Changeset 8266 in josm
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
r8265 r8266 147 147 /** 148 148 * Creates the fixing {@link Command} for the given primitive. The {@code matchingSelector} is used to 149 * evaluate placeholders (cf. {@link org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.TagCheck#insertArguments(Selector, String)}). 149 * evaluate placeholders (cf. {@link org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.TagCheck#insertArguments(Selector, String, OsmPrimitive)}). 150 150 */ 151 151 abstract Command createCommand(final OsmPrimitive p, final Selector matchingSelector); … … 167 167 return null; 168 168 } 169 return TagCheck.insertArguments(matchingSelector, s); 169 return TagCheck.insertArguments(matchingSelector, s, p); 170 170 } 171 171 … … 386 386 * {@link org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector}. 387 387 */ 388 static String determineArgument(Selector.GeneralSelector matchingSelector, int index, String type) { 388 static String determineArgument(Selector.GeneralSelector matchingSelector, int index, String type, OsmPrimitive p) { 389 389 try { 390 390 final Condition c = matchingSelector.getConditions().get(index); 391 391 final Tag tag = c instanceof Condition.KeyCondition 392 ? ((Condition.KeyCondition) c).asTag() 392 ? ((Condition.KeyCondition) c).asTag(p) 393 393 : c instanceof Condition.SimpleKeyValueCondition 394 394 ? ((Condition.SimpleKeyValueCondition) c).asTag() … … 417 417 * key/value/tag of the {@code index}-th {@link Condition} of {@code matchingSelector}. 418 418 */ 419 static String insertArguments(Selector matchingSelector, String s) { 419 static String insertArguments(Selector matchingSelector, String s, OsmPrimitive p) { 420 420 if (s != null && matchingSelector instanceof Selector.ChildOrParentSelector) { 421 return 421 return insertArguments(((Selector.ChildOrParentSelector)matchingSelector).right, s, p); 422 422 } else if (s == null || !(matchingSelector instanceof GeneralSelector)) { 423 423 return s; … … 426 426 final StringBuffer sb = new StringBuffer(); 427 427 while (m.find()) { 428 final String argument = determineArgument((Selector.GeneralSelector) matchingSelector, Integer.parseInt(m.group(1)), m.group(2)); 428 final String argument = determineArgument((Selector.GeneralSelector) matchingSelector, Integer.parseInt(m.group(1)), m.group(2), p); 429 429 try { 430 430 // Perform replacement with null-safe + regex-safe handling … … 501 501 */ 502 502 String getDescriptionForMatchingSelector(OsmPrimitive p, Selector matchingSelector) { 503 return insertArguments(matchingSelector, getDescription(p)); 503 return insertArguments(matchingSelector, getDescription(p), p); 504 504 } 505 505 -
trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java
r8252 r8266 4 4 import java.text.MessageFormat; 5 5 import java.util.Arrays; 6 import java.util.Collection; 6 7 import java.util.EnumSet; 7 8 import java.util.Objects; … … 340 341 } 341 342 342 public Tag asTag() { 343 return new Tag(label); 343 public Tag asTag(OsmPrimitive p) { 344 String key = label; 345 if (KeyMatchType.REGEX.equals(matchType)) { 346 final Collection<String> matchingKeys = Utils.filter(p.keySet(), containsPattern); 347 if (!matchingKeys.isEmpty()) { 348 key = matchingKeys.iterator().next(); 349 } 350 } 351 return new Tag(key, p.get(key)); 344 352 } 345 353 -
trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
r8265 r8266 8 8 9 9 import java.io.StringReader; 10 import java.util.Collection; 10 11 import java.util.Iterator; 11 12 import java.util.LinkedHashSet; … … 26 27 import org.openstreetmap.josm.data.osm.OsmUtils; 27 28 import org.openstreetmap.josm.data.validation.Severity; 29 import org.openstreetmap.josm.data.validation.TestError; 28 30 import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.TagCheck; 31 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException; 29 32 30 33 /** … … 39 42 public static void setUp() { 40 43 JOSMFixture.createUnitTestFixture().init(); 44 } 45 46 static MapCSSTagChecker buildTagChecker(String css) throws ParseException { 47 final MapCSSTagChecker test = new MapCSSTagChecker(); 48 test.checks.putAll("test", TagCheck.readMapCSS(new StringReader(css))); 49 return test; 41 50 } 42 51 … … 69 78 n2.put("natural", "wood"); 70 79 assertFalse(check.evaluate(n2)); 71 assertThat(MapCSSTagChecker.TagCheck.insertArguments(check.rule.selectors.get(0), "The key is {0.key} and the value is {0.value}"), 80 assertThat(MapCSSTagChecker.TagCheck.insertArguments(check.rule.selectors.get(0), "The key is {0.key} and the value is {0.value}", null), 72 81 is("The key is natural and the value is marsh")); 73 82 } … … 89 98 90 99 @Test 100 public void test9782() throws Exception { 101 final MapCSSTagChecker test = buildTagChecker("*[/.+_name/][!name] {" + 102 "throwWarning: tr(\"has {0} but not {1}\", \"{0.key}\", \"{1.key}\");}"); 103 final OsmPrimitive p = OsmUtils.createPrimitive("way alt_name=Foo"); 104 final Collection<TestError> errors = test.getErrorsForPrimitive(p, false); 105 assertThat(errors.size(), is(1)); 106 assertThat(errors.iterator().next().getMessage(), is("has alt_name but not name")); 107 } 108 109 @Test 110 public void test10859() throws Exception { 111 final MapCSSTagChecker test = buildTagChecker("way[highway=footway][foot?!] {\n" + 112 " throwWarning: tr(\"{0} used with {1}\", \"{0.value}\", \"{1.tag}\");}"); 113 final OsmPrimitive p = OsmUtils.createPrimitive("way highway=footway foot=no"); 114 final Collection<TestError> errors = test.getErrorsForPrimitive(p, false); 115 assertThat(errors.size(), is(1)); 116 assertThat(errors.iterator().next().getMessage(), is("footway used with foot=no")); 117 } 118 119 @Test 91 120 public void testInit() throws Exception { 92 121 MapCSSTagChecker c = new MapCSSTagChecker();
Note:
See TracChangeset
for help on using the changeset viewer.