Index: trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java	(revision 11487)
+++ trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java	(revision 11491)
@@ -7,4 +7,5 @@
 import static org.junit.Assert.assertTrue;
 
+import java.io.InputStream;
 import java.io.StringReader;
 import java.util.Collection;
@@ -14,7 +15,9 @@
 import java.util.Set;
 
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.ChangePropertyKeyCommand;
@@ -30,4 +33,5 @@
 import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.TagCheck;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
+import org.openstreetmap.josm.io.OsmReader;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -44,5 +48,5 @@
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules();
+    public JOSMTestRules test = new JOSMTestRules().projection();
 
     static MapCSSTagChecker buildTagChecker(String css) throws ParseException {
@@ -58,5 +62,5 @@
     @Test
     public void testNaturalMarsh() throws ParseException {
-        ParseResult result = MapCSSTagChecker.TagCheck.readMapCSS(new StringReader(
+        ParseResult result = TagCheck.readMapCSS(new StringReader(
                 "*[natural=marsh] {\n" +
                 "   group: tr(\"deprecated\");\n" +
@@ -66,8 +70,8 @@
                 "   fixAdd: \"wetland=marsh\";\n" +
                 "}"));
-        final List<MapCSSTagChecker.TagCheck> checks = result.parseChecks;
+        final List<TagCheck> checks = result.parseChecks;
         assertEquals(1, checks.size());
         assertTrue(result.parseErrors.isEmpty());
-        final MapCSSTagChecker.TagCheck check = checks.get(0);
+        final TagCheck check = checks.get(0);
         assertNotNull(check);
         assertEquals("{0.key}=null is deprecated", check.getDescription(null));
@@ -87,5 +91,5 @@
         assertFalse(check.test(n2));
         assertEquals("The key is natural and the value is marsh",
-                MapCSSTagChecker.TagCheck.insertArguments(check.rule.selectors.get(0), "The key is {0.key} and the value is {0.value}", null));
+                TagCheck.insertArguments(check.rule.selectors.get(0), "The key is {0.key} and the value is {0.value}", null));
     }
 
@@ -145,5 +149,5 @@
     @Test
     public void testTicket13630() throws ParseException {
-        ParseResult result = MapCSSTagChecker.TagCheck.readMapCSS(new StringReader(
+        ParseResult result = TagCheck.readMapCSS(new StringReader(
                 "node[crossing=zebra] {fixRemove: \"crossing=zebra\";}"));
         assertTrue(result.parseChecks.isEmpty());
@@ -151,4 +155,8 @@
     }
 
+    /**
+     * Unit test of {@code min-josm-version} processing.
+     * @throws ParseException if a parsing error occurs
+     */
     @Test
     public void testPreprocessing() throws ParseException {
@@ -160,4 +168,8 @@
     }
 
+    /**
+     * Unit test of {@link MapCSSTagChecker#initialize}.
+     * @throws Exception if an error occurs
+     */
     @Test
     public void testInit() throws Exception {
@@ -187,3 +199,20 @@
         assertTrue(parseResult.parseErrors.isEmpty());
     }
+
+    /**
+     * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/14287">Bug #14287</a>.
+     * @throws Exception if an error occurs
+     */
+    @Test
+    @Ignore("not fixed yet")
+    public void testTicket14287() throws Exception {
+        final MapCSSTagChecker test = buildTagChecker(
+                "node[amenity=parking] ∈ *[amenity=parking] {" +
+                "  throwWarning: tr(\"{0} inside {1}\", \"amenity=parking\", \"amenity=parking\");" +
+                "}");
+        try (InputStream is = TestUtils.getRegressionDataStream(14287, "example.osm")) {
+            test.visit(OsmReader.parseDataSet(is, null).allPrimitives());
+            assertEquals(6, test.getErrors().size());
+        }
+    }
 }
