Index: trunk/test/unit/org/openstreetmap/josm/io/OsmReaderTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/io/OsmReaderTest.java	(revision 16641)
+++ trunk/test/unit/org/openstreetmap/josm/io/OsmReaderTest.java	(revision 16642)
@@ -40,4 +40,13 @@
     public JOSMTestRules test = new JOSMTestRules();
 
+    private static Options[][] options() {
+        return new Options[][]{
+                new Options[]{},
+                new Options[]{Options.CONVERT_UNKNOWN_TO_TAGS},
+                new Options[]{Options.SAVE_ORIGINAL_ID},
+                new Options[]{Options.CONVERT_UNKNOWN_TO_TAGS, Options.SAVE_ORIGINAL_ID},
+        };
+    }
+
     private static final class PostProcessorStub implements OsmServerReadPostprocessor {
         boolean called;
@@ -72,29 +81,8 @@
     }
 
-    private static void testUnknown(String osm) throws Exception {
+    private static void testUnknown(String osm, Options[] options) throws Exception {
         try (InputStream in = new ByteArrayInputStream(
                 ("<?xml version='1.0' encoding='UTF-8'?>" + osm).getBytes(StandardCharsets.UTF_8))) {
-            assertTrue(OsmReader.parseDataSet(in, NullProgressMonitor.INSTANCE).allPrimitives().isEmpty());
-        }
-        testUnknown(osm, true);
-        testUnknown(osm, false);
-    }
-
-    private static void testUnknown(String osm, boolean parseUnknownAttributes) throws Exception {
-        try (InputStream in = new ByteArrayInputStream(
-                ("<?xml version='1.0' encoding='UTF-8'?>" + osm).getBytes(StandardCharsets.UTF_8))) {
-            assertTrue(OsmReader.parseDataSet(in, NullProgressMonitor.INSTANCE, Options.CONVERT_UNKNOWN_TO_TAGS).allPrimitives()
-                    .isEmpty());
-        }
-        testUnknown(osm, parseUnknownAttributes, true);
-        testUnknown(osm, parseUnknownAttributes, true);
-    }
-
-    private static void testUnknown(String osm, boolean parseUnknownAttributes, boolean keepOriginalId)
-            throws Exception {
-        try (InputStream in = new ByteArrayInputStream(
-                ("<?xml version='1.0' encoding='UTF-8'?>" + osm).getBytes(StandardCharsets.UTF_8))) {
-            assertTrue(OsmReader.parseDataSet(in, NullProgressMonitor.INSTANCE, Options.CONVERT_UNKNOWN_TO_TAGS, Options.SAVE_ORIGINAL_ID)
-                    .allPrimitives().isEmpty());
+            assertTrue(OsmReader.parseDataSet(in, NullProgressMonitor.INSTANCE, options).allPrimitives().isEmpty());
         }
     }
@@ -106,5 +94,7 @@
     @Test
     public void testUnknownRoot() throws Exception {
-        testUnknown("<nonosm/>");
+        for (Options[] options : options()) {
+            testUnknown("<nonosm/>", options);
+        }
     }
 
@@ -115,5 +105,7 @@
     @Test
     public void testUnknownMeta() throws Exception {
-        testUnknown("<osm version='0.6'><meta osm_base='2017-03-29T19:04:03Z'/></osm>");
+        for (Options[] options : options()) {
+            testUnknown("<osm version='0.6'><meta osm_base='2017-03-29T19:04:03Z'/></osm>", options);
+        }
     }
 
@@ -124,5 +116,7 @@
     @Test
     public void testUnknownNote() throws Exception {
-        testUnknown("<osm version='0.6'><note>The data included in this document is from www.openstreetmap.org.</note></osm>");
+        for (Options[] options : options()) {
+            testUnknown("<osm version='0.6'><note>The data included in this document is from www.openstreetmap.org.</note></osm>", options);
+        }
     }
 
@@ -133,6 +127,8 @@
     @Test
     public void testUnknownTag() throws Exception {
-        testUnknown("<osm version='0.6'><foo>bar</foo></osm>");
-        testUnknown("<osm version='0.6'><foo><bar/></foo></osm>");
+        for (Options[] options : options()) {
+            testUnknown("<osm version='0.6'><foo>bar</foo></osm>", options);
+            testUnknown("<osm version='0.6'><foo><bar/></foo></osm>", options);
+        }
     }
 
@@ -143,19 +139,5 @@
      * @throws Exception if any error occurs
      */
-    private static DataSet testValidData(String osm) throws Exception {
-        try (InputStream in = new ByteArrayInputStream(
-                ("<?xml version='1.0' encoding='UTF-8'?>" + osm).getBytes(StandardCharsets.UTF_8))) {
-            return OsmReader.parseDataSet(in, NullProgressMonitor.INSTANCE);
-        }
-    }
-
-    /**
-     * Test valid data.
-     * @param osm OSM data without XML prefix
-     * @param options The options to use to parse the data
-     * @return parsed data set
-     * @throws Exception if any error occurs
-     */
-    private static DataSet testValidData(String osm, Options... options) throws Exception {
+    private static DataSet testValidData(String osm, Options[] options) throws Exception {
         try (InputStream in = new ByteArrayInputStream(
                 ("<?xml version='1.0' encoding='UTF-8'?>" + osm).getBytes(StandardCharsets.UTF_8))) {
@@ -178,26 +160,4 @@
             assertEquals(expectedError, e.getMessage());
         }
-        testInvalidData(osm, expectedError, true);
-        testInvalidData(osm, expectedError, false);
-    }
-
-    /**
-     * Test invalid data.
-     *
-     * @param osm                    OSM data without XML prefix
-     * @param expectedError          expected error message
-     * @param parseUnknownAttributes if true, attempt to parse unknown xml
-     *                               attributes
-     * @throws Exception if any error occurs
-     */
-    private static void testInvalidData(String osm, String expectedError, boolean parseUnknownAttributes)
-            throws Exception {
-        try (InputStream in = new ByteArrayInputStream(
-                ("<?xml version='1.0' encoding='UTF-8'?>" + osm).getBytes(StandardCharsets.UTF_8))) {
-            OsmReader.parseDataSet(in, NullProgressMonitor.INSTANCE, Options.CONVERT_UNKNOWN_TO_TAGS);
-            fail("should throw exception");
-        } catch (IllegalDataException e) {
-            assertEquals(expectedError, e.getMessage());
-        }
     }
 
@@ -336,9 +296,7 @@
     public void testGdprChangeset() throws Exception {
         String gdprChangeset = "<osm version='0.6'><node id='1' version='1' changeset='0'/></osm>";
-        testValidData(gdprChangeset);
-        testValidData(gdprChangeset, Options.CONVERT_UNKNOWN_TO_TAGS);
-        testValidData(gdprChangeset, (Options) null);
-        testValidData(gdprChangeset, Options.SAVE_ORIGINAL_ID);
-        testValidData(gdprChangeset, Options.values());
+        for (Options[] options : options()) {
+            testValidData(gdprChangeset, options);
+        }
     }
 
@@ -420,6 +378,6 @@
                 "<remark>runtime error: Query ran out of memory in \"query\" at line 5.</remark>\r\n" +
                 "</osm>";
-        for (DataSet ds : Arrays.asList(testValidData(query), testValidData(query, Options.CONVERT_UNKNOWN_TO_TAGS), testValidData(query, (Options) null),
-                testValidData(query, Options.SAVE_ORIGINAL_ID), testValidData(query, Options.values()))) {
+        for (Options[] options : options()) {
+            DataSet ds = testValidData(query, options);
             assertEquals("runtime error: Query ran out of memory in \"query\" at line 5.", ds.getRemark());
         }
@@ -434,18 +392,18 @@
         String testData = "<osm version=\"0.6\" generator=\"fake generator\">"
                 + "<node id='1' version='1' visible='true' changeset='82' randomkey='randomvalue'></node>" + "</osm>";
-        DataSet ds = testValidData(testData);
-        assertEquals(0, ds.getNodes().iterator().next().getKeys().size());
-        assertEquals(1, ds.getNodes().iterator().next().getUniqueId());
-
-        ds = testValidData(testData, Options.CONVERT_UNKNOWN_TO_TAGS);
-        Node firstNode = ds.getNodes().iterator().next();
-        assertEquals(1, firstNode.getKeys().size());
-        assertEquals("randomvalue", firstNode.get("randomkey"));
-        assertEquals(1, ds.getNodes().iterator().next().getUniqueId());
-
-
-        ds = testValidData(testData, (Options) null);
-        assertEquals(0, ds.getNodes().iterator().next().getKeys().size());
-        assertEquals(1, ds.getNodes().iterator().next().getUniqueId());
+        for (Options[] options : options()) {
+            DataSet ds = testValidData(testData, options);
+            Node firstNode = ds.getNodes().iterator().next();
+            if (Arrays.asList(options).contains(Options.CONVERT_UNKNOWN_TO_TAGS)) {
+                assertEquals("randomvalue", firstNode.get("randomkey"));
+            } else {
+                assertNull(firstNode.get("randomkey"));
+            }
+            if (Arrays.asList(options).contains(Options.SAVE_ORIGINAL_ID)) {
+                assertEquals("1", firstNode.get("current_id"));
+            } else {
+                assertNull(firstNode.get("current_id"));
+            }
+        }
     }
 }
