Index: trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy	(revision 6543)
+++ trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy	(revision 6547)
@@ -1,4 +1,5 @@
 package org.openstreetmap.josm.gui.mappaint.mapcss
 
+import org.junit.Before
 import org.junit.Test
 import org.openstreetmap.josm.Main
@@ -17,4 +18,13 @@
     }
 
+    protected static Environment getEnvironment(String key, String value) {
+        return new Environment().withPrimitive(getPrimitive(key, value))
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        Main.pref = new Preferences()
+    }
+
     @Test
     public void testEqualCondition() throws Exception {
@@ -24,7 +34,6 @@
         assert "surface".equals(condition.k)
         assert "paved".equals(condition.v)
-        Main.pref = new Preferences()
-        assert condition.applies(new Environment().withPrimitive(getPrimitive("surface", "paved")))
-        assert !condition.applies(new Environment().withPrimitive(getPrimitive("surface", "unpaved")))
+        assert condition.applies(getEnvironment("surface", "paved"))
+        assert !condition.applies(getEnvironment("surface", "unpaved"))
     }
 
@@ -32,9 +41,7 @@
     public void testNotEqualCondition() throws Exception {
         def condition = (Condition.KeyValueCondition) new MapCSSParser(new StringReader("[surface!=paved]")).condition(Condition.Context.PRIMITIVE)
-        assert condition instanceof Condition.KeyValueCondition
         assert Condition.Op.NEQ.equals(condition.op)
-        Main.pref = new Preferences()
-        assert !condition.applies(new Environment().withPrimitive(getPrimitive("surface", "paved")))
-        assert condition.applies(new Environment().withPrimitive(getPrimitive("surface", "unpaved")))
+        assert !condition.applies(getEnvironment("surface", "paved"))
+        assert condition.applies(getEnvironment("surface", "unpaved"))
     }
 
@@ -42,9 +49,7 @@
     public void testRegexCondition() throws Exception {
         def condition = (Condition.KeyValueCondition) new MapCSSParser(new StringReader("[surface=~/paved|unpaved/]")).condition(Condition.Context.PRIMITIVE)
-        assert condition instanceof Condition.KeyValueCondition
         assert Condition.Op.REGEX.equals(condition.op)
-        Main.pref = new Preferences()
-        assert condition.applies(new Environment().withPrimitive(getPrimitive("surface", "unpaved")))
-        assert !condition.applies(new Environment().withPrimitive(getPrimitive("surface", "grass")))
+        assert condition.applies(getEnvironment("surface", "unpaved"))
+        assert !condition.applies(getEnvironment("surface", "grass"))
     }
 
@@ -52,9 +57,52 @@
     public void testNegatedRegexCondition() throws Exception {
         def condition = (Condition.KeyValueCondition) new MapCSSParser(new StringReader("[surface!~/paved|unpaved/]")).condition(Condition.Context.PRIMITIVE)
-        assert condition instanceof Condition.KeyValueCondition
         assert Condition.Op.NREGEX.equals(condition.op)
-        Main.pref = new Preferences()
-        assert !condition.applies(new Environment().withPrimitive(getPrimitive("surface", "unpaved")))
-        assert condition.applies(new Environment().withPrimitive(getPrimitive("surface", "grass")))
+        assert !condition.applies(getEnvironment("surface", "unpaved"))
+        assert condition.applies(getEnvironment("surface", "grass"))
+    }
+
+    @Test
+    public void testStandardKeyCondition() throws Exception {
+        def c1 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[ highway ]")).condition(Condition.Context.PRIMITIVE)
+        assert c1.matchType == null
+        assert c1.applies(getEnvironment("highway", "unclassified"))
+        assert !c1.applies(getEnvironment("railway", "rail"))
+        def c2 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[\"/slash/\"]")).condition(Condition.Context.PRIMITIVE)
+        assert c2.matchType == null
+        assert c2.applies(getEnvironment("/slash/", "yes"))
+        assert !c2.applies(getEnvironment("\"slash\"", "no"))
+    }
+
+    @Test
+    public void testYesNoKeyCondition() throws Exception {
+        def c1 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[oneway?]")).condition(Condition.Context.PRIMITIVE)
+        def c2 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[oneway?!]")).condition(Condition.Context.PRIMITIVE)
+        def c3 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[!oneway?]")).condition(Condition.Context.PRIMITIVE)
+        def c4 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[!oneway?!]")).condition(Condition.Context.PRIMITIVE)
+        def yes = getEnvironment("oneway", "yes")
+        def no = getEnvironment("oneway", "no")
+        def none = getEnvironment("no-oneway", "foo")
+        assert c1.applies(yes)
+        assert !c1.applies(no)
+        assert !c1.applies(none)
+        assert !c2.applies(yes)
+        assert c2.applies(no)
+        assert !c2.applies(none)
+        assert !c3.applies(yes)
+        assert c3.applies(no)
+        assert c3.applies(none)
+        assert c4.applies(yes)
+        assert !c4.applies(no)
+        assert c4.applies(none)
+    }
+
+    @Test
+    public void testRegexKeyCondition() throws Exception {
+        def c1 = (Condition.KeyCondition) new MapCSSParser(new StringReader("[/.*:(backward|forward)\$/]")).condition(Condition.Context.PRIMITIVE)
+        assert Condition.KeyMatchType.REGEX.equals(c1.matchType)
+        assert !c1.applies(getEnvironment("lanes", "3"))
+        assert c1.applies(getEnvironment("lanes:forward", "3"))
+        assert c1.applies(getEnvironment("lanes:backward", "3"))
+        assert !c1.applies(getEnvironment("lanes:foobar", "3"))
     }
 }
