package de.westnordost.streetcomplete.data.osm.tql; import junit.framework.TestCase; import java.util.HashMap; import java.util.Map; import de.westnordost.osmapi.map.data.Element; import de.westnordost.osmapi.map.data.OsmNode; public class TagFilterValueTest extends TestCase { public void testMatchesEqual() { TagFilterValue eq = new TagFilterValue("highway", "=", "residential"); assertTrue(eq.matches(elementWithTag("highway", "residential"))); assertFalse(eq.matches(elementWithTag("highway", "residental"))); assertFalse(eq.matches(new OsmNode(0, 0, 0d, 0d, null))); } public void testMatchesNEqual() { TagFilterValue neq = new TagFilterValue("highway", "!=", "residential"); assertFalse(neq.matches(elementWithTag("highway", "residential"))); assertTrue(neq.matches(elementWithTag("highway", "residental"))); assertTrue(neq.matches(new OsmNode(0, 0, 0d, 0d, null))); } public void testMatchesLikeDot() { TagFilterValue like = new TagFilterValue("highway", "~", ".esidential"); assertTrue(like.matches(elementWithTag("highway", "residential"))); assertTrue(like.matches(elementWithTag("highway", "wesidential"))); assertFalse(like.matches(elementWithTag("highway", "rresidential"))); assertFalse(like.matches(new OsmNode(0, 0, 0d, 0d, null))); } public void testMatchesLikeOr() { TagFilterValue like = new TagFilterValue("highway", "~", "residential|unclassified"); assertTrue(like.matches(elementWithTag("highway", "residential"))); assertTrue(like.matches(elementWithTag("highway", "unclassified"))); assertFalse(like.matches(elementWithTag("highway", "blub"))); assertFalse(like.matches(new OsmNode(0, 0, 0d, 0d, null))); } public void testMatchesNotLikeDot() { TagFilterValue notlike = new TagFilterValue("highway", "!~", ".*"); assertFalse(notlike.matches(elementWithTag("highway", "anything"))); assertTrue(notlike.matches(new OsmNode(0, 0, 0d, 0d, null))); } public void testMatchesNotLikeSomething() { TagFilterValue notlike = new TagFilterValue("noname", "!~", "yes"); assertFalse(notlike.matches(elementWithTag("noname", "yes"))); assertTrue(notlike.matches(elementWithTag("noname", "no"))); assertTrue(notlike.matches(new OsmNode(0, 0, 0d, 0d, null))); } public void testMatchesNoValue() { TagFilterValue key = new TagFilterValue("name", null, null); assertTrue(key.matches(elementWithTag("name", "yes"))); assertTrue(key.matches(elementWithTag("name", "no"))); assertFalse(key.matches(new OsmNode(0, 0, 0d, 0d, null))); } public void testToString() { TagFilterValue key = new TagFilterValue("A", "=", "B"); assertEquals("\"A\"=\"B\"", key.toString()); assertEquals("[\"A\"=\"B\"]", key.toOverpassQLString()); } public void testToRegexString() { TagFilterValue key = new TagFilterValue("A", "~", "B"); assertEquals("\"A\"~\"B\"", key.toString()); assertEquals("[\"A\"~\"^(B)$\"]", key.toOverpassQLString()); } public void testToRegexDotToString() { TagFilterValue key = new TagFilterValue("A", "!~", ".*"); assertEquals("\"A\"!~\".*\"", key.toString()); assertEquals("[\"A\"!~\".\"]", key.toOverpassQLString()); } private Element elementWithTag(String key, String value) { Map<String,String> tags = new HashMap<>(); tags.put(key, value); return new OsmNode(0, 0, 0d, 0d, tags); } }