Changeset 6547 in josm for trunk/test/unit/org


Ignore:
Timestamp:
2013-12-27T16:14:28+01:00 (10 years ago)
Author:
simon04
Message:

MapCSS: add regular expression support for key conditions

For instance, [/^addr:/] matches any addr:* key.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy

    r6455 r6547  
    11package org.openstreetmap.josm.gui.mappaint.mapcss
    22
     3import org.junit.Before
    34import org.junit.Test
    45import org.openstreetmap.josm.Main
     
    1718    }
    1819
     20    protected static Environment getEnvironment(String key, String value) {
     21        return new Environment().withPrimitive(getPrimitive(key, value))
     22    }
     23
     24    @Before
     25    public void setUp() throws Exception {
     26        Main.pref = new Preferences()
     27    }
     28
    1929    @Test
    2030    public void testEqualCondition() throws Exception {
     
    2434        assert "surface".equals(condition.k)
    2535        assert "paved".equals(condition.v)
    26         Main.pref = new Preferences()
    27         assert condition.applies(new Environment().withPrimitive(getPrimitive("surface", "paved")))
    28         assert !condition.applies(new Environment().withPrimitive(getPrimitive("surface", "unpaved")))
     36        assert condition.applies(getEnvironment("surface", "paved"))
     37        assert !condition.applies(getEnvironment("surface", "unpaved"))
    2938    }
    3039
     
    3241    public void testNotEqualCondition() throws Exception {
    3342        def condition = (Condition.KeyValueCondition) new MapCSSParser(new StringReader("[surface!=paved]")).condition(Condition.Context.PRIMITIVE)
    34         assert condition instanceof Condition.KeyValueCondition
    3543        assert Condition.Op.NEQ.equals(condition.op)
    36         Main.pref = new Preferences()
    37         assert !condition.applies(new Environment().withPrimitive(getPrimitive("surface", "paved")))
    38         assert condition.applies(new Environment().withPrimitive(getPrimitive("surface", "unpaved")))
     44        assert !condition.applies(getEnvironment("surface", "paved"))
     45        assert condition.applies(getEnvironment("surface", "unpaved"))
    3946    }
    4047
     
    4249    public void testRegexCondition() throws Exception {
    4350        def condition = (Condition.KeyValueCondition) new MapCSSParser(new StringReader("[surface=~/paved|unpaved/]")).condition(Condition.Context.PRIMITIVE)
    44         assert condition instanceof Condition.KeyValueCondition
    4551        assert Condition.Op.REGEX.equals(condition.op)
    46         Main.pref = new Preferences()
    47         assert condition.applies(new Environment().withPrimitive(getPrimitive("surface", "unpaved")))
    48         assert !condition.applies(new Environment().withPrimitive(getPrimitive("surface", "grass")))
     52        assert condition.applies(getEnvironment("surface", "unpaved"))
     53        assert !condition.applies(getEnvironment("surface", "grass"))
    4954    }
    5055
     
    5257    public void testNegatedRegexCondition() throws Exception {
    5358        def condition = (Condition.KeyValueCondition) new MapCSSParser(new StringReader("[surface!~/paved|unpaved/]")).condition(Condition.Context.PRIMITIVE)
    54         assert condition instanceof Condition.KeyValueCondition
    5559        assert Condition.Op.NREGEX.equals(condition.op)
    56         Main.pref = new Preferences()
    57         assert !condition.applies(new Environment().withPrimitive(getPrimitive("surface", "unpaved")))
    58         assert condition.applies(new Environment().withPrimitive(getPrimitive("surface", "grass")))
     60        assert !condition.applies(getEnvironment("surface", "unpaved"))
     61        assert condition.applies(getEnvironment("surface", "grass"))
     62    }
     63
     64    @Test
     65    public void testStandardKeyCondition() throws Exception {
     66        def c1 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[ highway ]")).condition(Condition.Context.PRIMITIVE)
     67        assert c1.matchType == null
     68        assert c1.applies(getEnvironment("highway", "unclassified"))
     69        assert !c1.applies(getEnvironment("railway", "rail"))
     70        def c2 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[\"/slash/\"]")).condition(Condition.Context.PRIMITIVE)
     71        assert c2.matchType == null
     72        assert c2.applies(getEnvironment("/slash/", "yes"))
     73        assert !c2.applies(getEnvironment("\"slash\"", "no"))
     74    }
     75
     76    @Test
     77    public void testYesNoKeyCondition() throws Exception {
     78        def c1 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[oneway?]")).condition(Condition.Context.PRIMITIVE)
     79        def c2 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[oneway?!]")).condition(Condition.Context.PRIMITIVE)
     80        def c3 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[!oneway?]")).condition(Condition.Context.PRIMITIVE)
     81        def c4 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[!oneway?!]")).condition(Condition.Context.PRIMITIVE)
     82        def yes = getEnvironment("oneway", "yes")
     83        def no = getEnvironment("oneway", "no")
     84        def none = getEnvironment("no-oneway", "foo")
     85        assert c1.applies(yes)
     86        assert !c1.applies(no)
     87        assert !c1.applies(none)
     88        assert !c2.applies(yes)
     89        assert c2.applies(no)
     90        assert !c2.applies(none)
     91        assert !c3.applies(yes)
     92        assert c3.applies(no)
     93        assert c3.applies(none)
     94        assert c4.applies(yes)
     95        assert !c4.applies(no)
     96        assert c4.applies(none)
     97    }
     98
     99    @Test
     100    public void testRegexKeyCondition() throws Exception {
     101        def c1 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[/.*:(backward|forward)\$/]")).condition(Condition.Context.PRIMITIVE)
     102        assert Condition.KeyMatchType.REGEX.equals(c1.matchType)
     103        assert !c1.applies(getEnvironment("lanes", "3"))
     104        assert c1.applies(getEnvironment("lanes:forward", "3"))
     105        assert c1.applies(getEnvironment("lanes:backward", "3"))
     106        assert !c1.applies(getEnvironment("lanes:foobar", "3"))
    59107    }
    60108}
Note: See TracChangeset for help on using the changeset viewer.