Index: trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MultipolygonTestTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MultipolygonTestTest.java	(revision 9489)
+++ trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MultipolygonTestTest.java	(revision 9490)
@@ -5,9 +5,15 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
 
-import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
@@ -15,7 +21,11 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmUtils;
+import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.gui.DefaultNameFormatter;
 import org.openstreetmap.josm.gui.mappaint.ElemStyles;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
+import org.openstreetmap.josm.io.OsmReader;
 
 /**
@@ -25,4 +35,5 @@
 
     private static final MultipolygonTest MULTIPOLYGON_TEST = new MultipolygonTest();
+    private static final RelationChecker RELATION_TEST = new RelationChecker();
 
     /**
@@ -30,9 +41,8 @@
      * @throws Exception if test cannot be initialized
      */
-    @Before
-    public void setUp() throws Exception {
-        JOSMFixture.createUnitTestFixture().init();
+    @BeforeClass
+    public static void setUp() throws Exception {
+        JOSMFixture.createUnitTestFixture().init(true);
         MapPaintStyles.readFromPreferences();
-        MULTIPOLYGON_TEST.initialize();
     }
 
@@ -52,4 +62,5 @@
     @Test
     public void testTicket10469() {
+        MULTIPOLYGON_TEST.initialize();
         MULTIPOLYGON_TEST.startTest(null);
 
@@ -78,3 +89,44 @@
         MULTIPOLYGON_TEST.endTest();
     }
+
+    /**
+     * Test all error cases manually created in multipolygon.osm.
+     * @throws Exception in case of error
+     */
+    @Test
+    public void testMultipolygonFile() throws Exception {
+        try (InputStream is = new FileInputStream("data_nodist/multipolygon.osm")) {
+            for (Relation r : OsmReader.parseDataSet(is, null).getRelations()) {
+                if (r.isMultipolygon()) {
+                    String name = DefaultNameFormatter.getInstance().format(r);
+                    String codes = r.get("josm_error_codes");
+                    if (codes != null) {
+                        List<TestError> errors = new ArrayList<>();
+                        for (org.openstreetmap.josm.data.validation.Test test : Arrays.asList(MULTIPOLYGON_TEST, RELATION_TEST)) {
+                            test.initialize();
+                            test.startTest(null);
+                            test.visit(r);
+                            test.endTest();
+                            errors.addAll(test.getErrors());
+                        }
+                        Set<Integer> expectedCodes = new TreeSet<>();
+                        for (String code : codes.split(",")) {
+                            expectedCodes.add(Integer.parseInt(code));
+                        }
+                        Set<Integer> actualCodes = new TreeSet<>();
+                        for (TestError error : errors) {
+                            Integer code = error.getCode();
+                            assertTrue(name + " does not expect JOSM error code " + code + ": " + error.getDescription(),
+                                    expectedCodes.contains(code));
+                            actualCodes.add(code);
+                        }
+                        assertEquals(name + " " + expectedCodes + " => " + actualCodes,
+                                expectedCodes.size(), actualCodes.size());
+                    } else if (r.hasKey("name") && (r.getName().startsWith("06") || r.getName().startsWith("07"))) {
+                        fail(name + " lacks josm_error_codes tag");
+                    }
+                }
+            }
+        }
+    }
 }
