Changeset 18875 in josm for trunk/test/unit
- Timestamp:
- 2023-10-23T21:06:35+02:00 (16 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/FunctionsTest.java
r18870 r18875 3 3 4 4 import static org.junit.jupiter.api.Assertions.assertAll; 5 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 5 6 import static org.junit.jupiter.api.Assertions.assertEquals; 6 7 import static org.junit.jupiter.api.Assertions.assertFalse; … … 9 10 import static org.junit.jupiter.api.Assertions.assertSame; 10 11 import static org.junit.jupiter.api.Assertions.assertTrue; 12 import static org.junit.jupiter.api.Assertions.fail; 11 13 import static org.openstreetmap.josm.data.osm.OsmPrimitiveType.NODE; 12 14 15 import java.lang.reflect.Method; 16 import java.lang.reflect.Modifier; 13 17 import java.util.Arrays; 14 18 import java.util.Collections; 15 19 import java.util.List; 16 20 import java.util.Objects; 17 21 import java.util.stream.Stream; 22 23 import org.junit.jupiter.api.AfterAll; 18 24 import org.junit.jupiter.api.Test; 25 import org.junit.jupiter.params.ParameterizedTest; 26 import org.junit.jupiter.params.provider.MethodSource; 19 27 import org.openstreetmap.josm.TestUtils; 20 28 import org.openstreetmap.josm.data.coor.LatLon; … … 30 38 import org.openstreetmap.josm.data.preferences.NamedColorProperty; 31 39 import org.openstreetmap.josm.gui.mappaint.Environment; 40 import org.openstreetmap.josm.gui.mappaint.MultiCascade; 32 41 import org.openstreetmap.josm.gui.util.GuiHelper; 33 42 import org.openstreetmap.josm.spi.preferences.Config; … … 35 44 import org.openstreetmap.josm.testutils.annotations.MapPaintStyles; 36 45 import org.openstreetmap.josm.testutils.annotations.Projection; 46 import org.openstreetmap.josm.testutils.annotations.Territories; 37 47 38 48 /** … … 62 72 return new Environment(osm); 63 73 } 74 } 75 76 private static Method[] FUNCTIONS; 77 78 static Stream<Method> getFunctions() { 79 if (FUNCTIONS == null) { 80 FUNCTIONS = Stream.of(Functions.class.getDeclaredMethods()) 81 .filter(m -> Modifier.isStatic(m.getModifiers()) && Modifier.isPublic(m.getModifiers())) 82 .toArray(Method[]::new); 83 } 84 return Stream.of(FUNCTIONS); 85 } 86 87 @AfterAll 88 static void tearDown() { 89 FUNCTIONS = null; 64 90 } 65 91 … … 231 257 assertTrue(Functions.parent_osm_primitives(env, "type2").isEmpty()); 232 258 } 259 260 /** 261 * Non-regression test for #23238: NPE when env.osm is null 262 */ 263 @ParameterizedTest 264 @MethodSource("getFunctions") 265 @Territories // needed for inside, outside, is_right_hand_traffic 266 void testNonRegression23238(Method function) { 267 if (function.getParameterCount() >= 1 && function.getParameterTypes()[0].isAssignableFrom(Environment.class) 268 && !function.getParameterTypes()[0].equals(Object.class)) { 269 Environment nullOsmEnvironment = new Environment(); 270 nullOsmEnvironment.mc = new MultiCascade(); 271 Object[] args = new Object[function.getParameterCount()]; 272 args[0] = nullOsmEnvironment; 273 for (int i = 1; i < function.getParameterCount(); i++) { 274 final Class<?> type = function.getParameterTypes()[i]; 275 if (String.class.isAssignableFrom(type)) { 276 args[i] = ""; 277 } else if (String[].class.isAssignableFrom(type)) { 278 args[i] = new String[] {"{0}", ""}; // join and tr require at least 2 arguments 279 } else if (Double.class.isAssignableFrom(type) || double.class.isAssignableFrom(type)) { 280 args[i] = 0d; 281 } else if (Object.class.isAssignableFrom(type)) { 282 args[i] = new Object[0]; 283 } else { 284 fail(type.getCanonicalName()); 285 } 286 } 287 assertDoesNotThrow(() -> function.invoke(null, args)); 288 } 289 } 233 290 }
Note:
See TracChangeset
for help on using the changeset viewer.