- Timestamp:
- 2014-08-01T19:17:40+02:00 (10 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/osm/OsmUtils.java
r7005 r7356 6 6 import java.util.List; 7 7 import java.util.Locale; 8 import java.util.Map; 9 10 import org.openstreetmap.josm.tools.CheckParameterUtil; 11 import org.openstreetmap.josm.tools.TextTagParser; 8 12 9 13 public final class OsmUtils { … … 48 52 return FALSE_VALUES.contains(value); 49 53 } 54 55 /** 56 * Creates a new OSM primitive according to the given assertion. Originally written for unit tests, 57 * this can also be used in another places like validation of local MapCSS validator rules. 58 * @param assertion The assertion describing OSM primitive (ex: "way name=Foo railway=rail") 59 * @return a new OSM primitive according to the given assertion 60 * @throws IllegalArgumentException if assertion is null or if the primitive type cannot be deduced from it 61 * @since 7356 62 */ 63 public static OsmPrimitive createPrimitive(String assertion) { 64 CheckParameterUtil.ensureParameterNotNull(assertion, "assertion"); 65 final String[] x = assertion.split("\\s+", 2); 66 final OsmPrimitive p = "n".equals(x[0]) || "node".equals(x[0]) 67 ? new Node() 68 : "w".equals(x[0]) || "way".equals(x[0]) 69 ? new Way() 70 : "r".equals(x[0]) || "relation".equals(x[0]) 71 ? new Relation() 72 : null; 73 if (p == null) { 74 throw new IllegalArgumentException("Expecting n/node/w/way/r/relation, but got " + x[0]); 75 } 76 for (final Map.Entry<String, String> i : TextTagParser.readTagsFromText(x[1]).entrySet()) { 77 p.put(i.getKey(), i.getValue()); 78 } 79 return p; 80 } 50 81 } -
trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
r7300 r7356 8 8 import java.io.InputStream; 9 9 import java.io.Reader; 10 import java.text.MessageFormat; 10 11 import java.util.ArrayList; 11 12 import java.util.Arrays; … … 15 16 import java.util.Iterator; 16 17 import java.util.LinkedHashMap; 18 import java.util.LinkedHashSet; 17 19 import java.util.LinkedList; 18 20 import java.util.List; … … 28 30 import org.openstreetmap.josm.command.SequenceCommand; 29 31 import org.openstreetmap.josm.data.osm.OsmPrimitive; 32 import org.openstreetmap.josm.data.osm.OsmUtils; 30 33 import org.openstreetmap.josm.data.osm.Tag; 31 34 import org.openstreetmap.josm.data.validation.FixableTestError; … … 340 343 } 341 344 } catch (IndexOutOfBoundsException ignore) { 342 Main.debug(ignore.getMessage()); 345 if (Main.isDebugEnabled()) { 346 Main.debug(ignore.getMessage()); 347 } 343 348 } 344 349 return null; … … 557 562 checks.remove(url); 558 563 checks.putAll(url, tagchecks); 564 // Check assertions, useful for development of local files 565 if (Main.pref.getBoolean("validator.check_assert_local_rules", false) && Utils.isLocalUrl(url)) { 566 for (String msg : checkAsserts(tagchecks)) { 567 Main.warn(msg); 568 } 569 } 559 570 } 560 571 } … … 569 580 String i = source.url; 570 581 try { 571 if (i.startsWith("resource:")) { 582 if (!i.startsWith("resource:")) { 583 Main.info(tr("Adding {0} to tag checker", i)); 584 } else if (Main.isDebugEnabled()) { 572 585 Main.debug(tr("Adding {0} to tag checker", i)); 573 } else {574 Main.info(tr("Adding {0} to tag checker", i));575 586 } 576 587 addMapCSS(i); … … 590 601 } 591 602 } 603 } 604 605 /** 606 * Checks that rule assertions are met for the given set of TagChecks. 607 * @param schecks The TagChecks for which assertions have to be checked 608 * @return A set of error messages, empty if all assertions are met 609 * @since 7356 610 */ 611 public Set<String> checkAsserts(final Collection<TagCheck> schecks) { 612 Set<String> assertionErrors = new LinkedHashSet<>(); 613 for (final TagCheck check : schecks) { 614 if (Main.isDebugEnabled()) { 615 Main.debug("Check: "+check); 616 } 617 for (final Map.Entry<String, Boolean> i : check.assertions.entrySet()) { 618 if (Main.isDebugEnabled()) { 619 Main.debug("- Assertion: "+i); 620 } 621 final OsmPrimitive p = OsmUtils.createPrimitive(i.getKey()); 622 final boolean isError = Utils.exists(getErrorsForPrimitive(p, true), new Predicate<TestError>() { 623 @Override 624 public boolean evaluate(TestError e) { 625 //noinspection EqualsBetweenInconvertibleTypes 626 return e.getTester().equals(check.rule); 627 } 628 }); 629 if (isError != i.getValue()) { 630 final String error = MessageFormat.format("Expecting test ''{0}'' (i.e., {1}) to {2} {3} (i.e., {4})", 631 check.getMessage(p), check.rule.selectors, i.getValue() ? "match" : "not match", i.getKey(), p.getKeys()); 632 assertionErrors.add(error); 633 } 634 } 635 } 636 return assertionErrors; 592 637 } 593 638 -
trunk/src/org/openstreetmap/josm/gui/preferences/SourceEntry.java
r7276 r7356 8 8 9 9 import org.openstreetmap.josm.Main; 10 import org.openstreetmap.josm.tools.Utils; 10 11 11 12 /** … … 178 179 */ 179 180 public boolean isLocal() { 180 if (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("resource://")) 181 return false; 182 return true; 181 return Utils.isLocalUrl(url); 183 182 } 184 183 -
trunk/src/org/openstreetmap/josm/tools/Utils.java
r7321 r7356 1053 1053 } 1054 1054 1055 /** 1056 * Determines if the given URL denotes a file on a local filesystem. 1057 * @param url The URL to test 1058 * @return {@code true} if the url points to a local file 1059 * @since 7356 1060 */ 1061 public static boolean isLocalUrl(String url) { 1062 if (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("resource://")) 1063 return false; 1064 return true; 1065 } 1055 1066 } -
trunk/test/unit/org/openstreetmap/josm/TestUtils.java
r7109 r7356 9 9 import java.util.Arrays; 10 10 import java.util.Comparator; 11 import java.util.Map;12 11 13 12 import org.junit.Test; 14 import org.openstreetmap.josm.data.osm.Node;15 13 import org.openstreetmap.josm.data.osm.OsmPrimitive; 16 import org.openstreetmap.josm.data.osm. Relation;14 import org.openstreetmap.josm.data.osm.OsmUtils; 17 15 import org.openstreetmap.josm.data.osm.Way; 18 import org.openstreetmap.josm.tools.TextTagParser;19 16 17 /** 18 * Various utils, useful for unit tests. 19 */ 20 20 public class TestUtils { 21 21 … … 32 32 } 33 33 34 public static OsmPrimitive createPrimitive(String assertion) {35 if (Main.pref == null) {36 Main.initApplicationPreferences();37 }38 final String[] x = assertion.split("\\s+", 2);39 final OsmPrimitive p = "n".equals(x[0]) || "node".equals(x[0])40 ? new Node()41 : "w".equals(x[0]) || "way".equals(x[0])42 ? new Way()43 : "r".equals(x[0]) || "relation".equals(x[0])44 ? new Relation()45 : null;46 if (p == null) {47 throw new IllegalArgumentException("Expecting n/node/w/way/r/relation, but got " + x[0]);48 }49 for (final Map.Entry<String, String> i : TextTagParser.readTagsFromText(x[1]).entrySet()) {50 p.put(i.getKey(), i.getValue());51 }52 return p;53 }54 55 34 @Test 56 35 public void testCreatePrimitive() throws Exception { 57 final OsmPrimitive p = createPrimitive("way name=Foo railway=rail");36 final OsmPrimitive p = OsmUtils.createPrimitive("way name=Foo railway=rail"); 58 37 assertTrue(p instanceof Way); 59 38 assertThat(p.keySet().size(), is(2)); … … 64 43 @Test(expected = IllegalArgumentException.class) 65 44 public void testCreatePrimitiveFail() throws Exception { 66 TestUtils.createPrimitive("noway name=Foo");45 OsmUtils.createPrimitive("noway name=Foo"); 67 46 } 68 47 -
trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
r7275 r7356 8 8 9 9 import java.io.StringReader; 10 import java.text.MessageFormat;11 10 import java.util.LinkedHashSet; 12 11 import java.util.List; 13 import java.util.Map;14 12 import java.util.Set; 15 13 … … 17 15 import org.junit.Test; 18 16 import org.openstreetmap.josm.JOSMFixture; 19 import org.openstreetmap.josm. TestUtils;17 import org.openstreetmap.josm.Main; 20 18 import org.openstreetmap.josm.command.ChangePropertyCommand; 21 19 import org.openstreetmap.josm.data.osm.Node; 22 import org.openstreetmap.josm.data.osm.OsmPrimitive;23 20 import org.openstreetmap.josm.data.osm.Tag; 24 21 import org.openstreetmap.josm.data.validation.Severity; 25 import org.openstreetmap.josm.data.validation.TestError;26 22 import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.TagCheck; 27 import org.openstreetmap.josm.tools.Predicate;28 import org.openstreetmap.josm.tools.Utils;29 23 24 /** 25 * JUnit Test of MapCSS TagChecker. 26 */ 30 27 public class MapCSSTagCheckerTest { 31 28 … … 72 69 @Test 73 70 public void testInit() throws Exception { 74 finalMapCSSTagChecker c = new MapCSSTagChecker();71 MapCSSTagChecker c = new MapCSSTagChecker(); 75 72 c.initialize(); 76 73 77 LinkedHashSet<String> assertionErrors = new LinkedHashSet<>(); 78 for (final Set<TagCheck> schecks : c.checks.values()) { 79 for (final TagCheck check : schecks) { 80 System.out.println("Check: "+check); 81 for (final Map.Entry<String, Boolean> i : check.assertions.entrySet()) { 82 System.out.println("- Assertion: "+i); 83 final OsmPrimitive p = TestUtils.createPrimitive(i.getKey()); 84 final boolean isError = Utils.exists(c.getErrorsForPrimitive(p, true), new Predicate<TestError>() { 85 @Override 86 public boolean evaluate(TestError e) { 87 //noinspection EqualsBetweenInconvertibleTypes 88 return e.getTester().equals(check.rule); 89 } 90 }); 91 if (isError != i.getValue()) { 92 final String error = MessageFormat.format("Expecting test ''{0}'' (i.e., {1}) to {2} {3} (i.e., {4})", 93 check.getMessage(p), check.rule.selectors, i.getValue() ? "match" : "not match", i.getKey(), p.getKeys()); 94 System.err.println(error); 95 assertionErrors.add(error); 96 } 97 } 98 } 74 Set<String> assertionErrors = new LinkedHashSet<>(); 75 for (Set<TagCheck> schecks : c.checks.values()) { 76 assertionErrors.addAll(c.checkAsserts(schecks)); 77 } 78 for (String msg : assertionErrors) { 79 Main.error(msg); 99 80 } 100 81 assertTrue("not all assertions included in the tests are met", assertionErrors.isEmpty()); -
trunk/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java
r7307 r7356 18 18 import org.openstreetmap.josm.data.osm.DataSet; 19 19 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 20 import org.openstreetmap.josm.data.osm.OsmUtils; 20 21 import org.openstreetmap.josm.data.osm.Relation; 21 22 import org.openstreetmap.josm.data.osm.Way; … … 106 107 107 108 static String getFormattedRelationName(String tagsString) { 108 return DefaultNameFormatter.getInstance().format((Relation) TestUtils.createPrimitive("relation " + tagsString))109 return DefaultNameFormatter.getInstance().format((Relation) OsmUtils.createPrimitive("relation " + tagsString)) 109 110 .replace("\u200E", "").replace("\u200F", ""); 110 111 } 111 112 112 113 static String getFormattedWayName(String tagsString) { 113 return DefaultNameFormatter.getInstance().format((Way) TestUtils.createPrimitive("way " + tagsString))114 return DefaultNameFormatter.getInstance().format((Way) OsmUtils.createPrimitive("way " + tagsString)) 114 115 .replace("\u200E", "").replace("\u200F", ""); 115 116 } -
trunk/test/unit/org/openstreetmap/josm/gui/tagging/PresetClassificationsTest.java
r7210 r7356 2 2 package org.openstreetmap.josm.gui.tagging; 3 3 4 import org.junit.BeforeClass; 5 import org.junit.Test; 6 import org.openstreetmap.josm.JOSMFixture; 7 import org.openstreetmap.josm.TestUtils; 8 import org.openstreetmap.josm.data.osm.Node; 9 import org.openstreetmap.josm.data.osm.OsmPrimitive; 10 import org.openstreetmap.josm.data.osm.Way; 11 import org.openstreetmap.josm.tools.Utils; 12 import org.xml.sax.SAXException; 4 import static org.junit.Assert.assertTrue; 13 5 14 6 import java.io.IOException; … … 18 10 import java.util.List; 19 11 20 import static org.junit.Assert.assertTrue; 12 import org.junit.BeforeClass; 13 import org.junit.Test; 14 import org.openstreetmap.josm.JOSMFixture; 15 import org.openstreetmap.josm.data.osm.Node; 16 import org.openstreetmap.josm.data.osm.OsmPrimitive; 17 import org.openstreetmap.josm.data.osm.OsmUtils; 18 import org.openstreetmap.josm.data.osm.Way; 19 import org.openstreetmap.josm.tools.Utils; 20 import org.xml.sax.SAXException; 21 21 22 22 public class PresetClassificationsTest { … … 61 61 @Test 62 62 public void testRelationsForTram() { 63 final OsmPrimitive tram = TestUtils.createPrimitive("way railway=tram");63 final OsmPrimitive tram = OsmUtils.createPrimitive("way railway=tram"); 64 64 assertTrue("railway=tram should match 'Railway route' for relation creation", getMatchingPresetNames("route", tram).contains("Railway route")); 65 65 assertTrue("railway=tram should match 'Public transport route' for relation creation", getMatchingPresetNames("route", tram).contains("Public transport route")); 66 66 assertTrue("railway=tram should not match 'Bus route'", !getMatchingPresetNames("route", tram).contains("Bus route")); 67 67 } 68 69 68 }
Note:
See TracChangeset
for help on using the changeset viewer.