source: josm/trunk/test/unit/org/openstreetmap/josm/io/OsmChangesetContentParserTest.java@ 14047

Last change on this file since 14047 was 14047, checked in by Don-vip, 6 years ago

see #16498 - convert two more unit tests to Java

  • Property svn:eol-style set to native
File size: 9.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io;
3
4import static org.junit.Assert.assertEquals;
5import static org.junit.Assert.assertNotNull;
6import static org.junit.Assert.assertTrue;
7import static org.junit.Assert.fail;
8
9import java.io.ByteArrayInputStream;
10import java.io.InputStream;
11import java.nio.charset.StandardCharsets;
12import java.util.Arrays;
13
14import org.junit.Rule;
15import org.junit.Test;
16import org.openstreetmap.josm.data.osm.ChangesetDataSet;
17import org.openstreetmap.josm.data.osm.ChangesetDataSet.ChangesetModificationType;
18import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
19import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
20import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
21import org.openstreetmap.josm.data.osm.history.HistoryRelation;
22import org.openstreetmap.josm.data.osm.history.HistoryWay;
23import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
24import org.openstreetmap.josm.testutils.JOSMTestRules;
25import org.openstreetmap.josm.tools.Logging;
26import org.openstreetmap.josm.tools.XmlParsingException;
27
28import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
29
30/**
31 * Unit tests of {@link OsmChangesetContentParser}.
32 */
33public class OsmChangesetContentParserTest {
34
35 /**
36 * Setup rule
37 */
38 @Rule
39 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
40 public JOSMTestRules test = new JOSMTestRules();
41
42 private static void shouldFail(Runnable r) {
43 try {
44 r.run();
45 fail("should throw exception");
46 } catch (IllegalArgumentException e) {
47 Logging.trace(e);
48 }
49 }
50
51 /**
52 * Test various constructor invocations
53 */
54 @Test
55 public void test_Constructor() {
56
57 // should be OK
58 new OsmChangesetContentParser(new ByteArrayInputStream("".getBytes()));
59
60 shouldFail(() -> {
61 new OsmChangesetContentParser((String) null);
62 });
63
64 shouldFail(() -> {
65 new OsmChangesetContentParser((InputStream) null);
66 });
67 }
68
69 /**
70 * Test various invocations of {@link OsmChangesetContentParser#parse}
71 * @throws XmlParsingException never
72 */
73 @Test
74 public void test_parse_arguments() throws XmlParsingException {
75 OsmChangesetContentParser parser;
76
77 String doc = "<osmChange version=\"0.6\" generator=\"OpenStreetMap server\"></osmChange>";
78
79 // should be OK
80 parser = new OsmChangesetContentParser(new ByteArrayInputStream(doc.getBytes(StandardCharsets.UTF_8)));
81 parser.parse(null);
82
83 // should be OK
84 parser = new OsmChangesetContentParser(new ByteArrayInputStream(doc.getBytes(StandardCharsets.UTF_8)));
85 parser.parse(NullProgressMonitor.INSTANCE);
86
87 // should be OK
88 parser = new OsmChangesetContentParser(doc);
89 parser.parse(null);
90 }
91
92 /**
93 * A simple changeset content document with one created node
94 * @throws XmlParsingException never
95 */
96 @Test
97 public void test_OK_OneCreatedNode() throws XmlParsingException {
98 OsmChangesetContentParser parser;
99
100 String doc =
101 "<osmChange version=\"0.6\" generator=\"OpenStreetMap server\">\n" +
102 " <create>\n" +
103 " <node id=\"1\" version=\"1\" visible=\"true\" changeset=\"1\" lat=\"1.0\" lon=\"1.0\" timestamp=\"2009-12-22\" />\n" +
104 " </create>\n" +
105 "</osmChange>";
106
107 // should be OK
108 parser = new OsmChangesetContentParser(doc);
109 ChangesetDataSet ds = parser.parse();
110
111 assertEquals(1, ds.size());
112 HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
113 assertNotNull(p);
114 assertEquals(1, p.getId());
115 assertEquals(1, p.getVersion());
116 assertEquals(1, p.getChangesetId());
117 assertNotNull(p.getTimestamp());
118 assertEquals(ChangesetModificationType.CREATED, ds.getModificationType(p.getPrimitiveId()));
119 assertTrue(ds.isCreated(p.getPrimitiveId()));
120 }
121
122 /**
123 * A simple changeset content document with one updated node
124 * @throws XmlParsingException never
125 */
126 @Test
127 public void test_OK_OneUpdatedNode() throws XmlParsingException {
128 OsmChangesetContentParser parser;
129
130 String doc =
131 "<osmChange version=\"0.6\" generator=\"OpenStreetMap server\">\n" +
132 " <modify>\n" +
133 " <node id=\"1\" version=\"1\" visible=\"true\" changeset=\"1\" lat=\"1.0\" lon=\"1.0\" timestamp=\"2009-12-22\" />\n" +
134 " </modify>\n" +
135 "</osmChange>";
136
137 // should be OK
138 parser = new OsmChangesetContentParser(doc);
139 ChangesetDataSet ds = parser.parse();
140
141 assertEquals(1, ds.size());
142 HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
143 assertNotNull(p);
144 assertEquals(1, p.getId());
145 assertEquals(1, p.getVersion());
146 assertEquals(1, p.getChangesetId());
147 assertNotNull(p.getTimestamp());
148 assertEquals(ChangesetModificationType.UPDATED, ds.getModificationType(p.getPrimitiveId()));
149 assertTrue(ds.isUpdated(p.getPrimitiveId()));
150 }
151
152 /**
153 * A simple changeset content document with one deleted node
154 * @throws XmlParsingException never
155 */
156 @Test
157 public void test_OK_OneDeletedNode() throws XmlParsingException {
158 OsmChangesetContentParser parser;
159
160 String doc =
161 "<osmChange version=\"0.6\" generator=\"OpenStreetMap server\">\n" +
162 " <delete>\n" +
163 " <node id=\"1\" version=\"1\" visible=\"true\" changeset=\"1\" lat=\"1.0\" lon=\"1.0\" timestamp=\"2009-12-22\" />\n" +
164 " </delete>\n" +
165 "</osmChange>";
166
167 // should be OK
168 parser = new OsmChangesetContentParser(doc);
169 ChangesetDataSet ds = parser.parse();
170
171 assertEquals(1, ds.size());
172 HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
173 assertNotNull(p);
174 assertEquals(1, p.getId());
175 assertEquals(1, p.getVersion());
176 assertEquals(1, p.getChangesetId());
177 assertNotNull(p.getTimestamp());
178 assertEquals(ChangesetModificationType.DELETED, ds.getModificationType(p.getPrimitiveId()));
179 assertTrue(ds.isDeleted(p.getPrimitiveId()));
180 }
181
182 /**
183 * A more complex test with a document including nodes, ways, and relations.
184 * @throws XmlParsingException never
185 */
186 @Test
187 public void test_OK_ComplexTestCase() throws XmlParsingException {
188 OsmChangesetContentParser parser;
189
190 String doc =
191 "<osmChange version=\"0.6\" generator=\"OpenStreetMap server\">\n" +
192 " <create>\n" +
193 " <node id=\"1\" version=\"1\" visible=\"true\" changeset=\"1\" lat=\"1.0\" lon=\"1.0\" timestamp=\"2009-12-22\">\n" +
194 " <tag k=\"a.key\" v=\"a.value\" />\n" +
195 " </node>\n" +
196 " </create>\n" +
197 " <modify>\n" +
198 " <way id=\"2\" version=\"2\" visible=\"true\" changeset=\"1\" timestamp=\"2009-12-22\">\n" +
199 " <nd ref=\"21\"/>\n" +
200 " <nd ref=\"22\"/>\n" +
201 " </way>\n" +
202 " </modify>\n" +
203 " <delete>\n" +
204 " <relation id=\"3\" version=\"3\" visible=\"true\" changeset=\"1\" timestamp=\"2009-12-22\" />\n" +
205 " </delete>\n" +
206 "</osmChange>";
207
208 // should be OK
209 parser = new OsmChangesetContentParser(doc);
210 ChangesetDataSet ds = parser.parse();
211
212 assertEquals(3, ds.size());
213
214 HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
215 assertNotNull(p);
216 assertEquals(1, p.getId());
217 assertEquals(1, p.getVersion());
218 assertEquals(1, p.getChangesetId());
219 assertNotNull(p.getTimestamp());
220 assertEquals(ChangesetModificationType.CREATED, ds.getModificationType(p.getPrimitiveId()));
221 assertTrue(ds.isCreated(p.getPrimitiveId()));
222 assertEquals("a.value", p.get("a.key"));
223
224 HistoryWay w = (HistoryWay) ds.getPrimitive(new SimplePrimitiveId(2, OsmPrimitiveType.WAY));
225 assertNotNull(w);
226 assertEquals(2, w.getId());
227 assertEquals(2, w.getVersion());
228 assertEquals(1, w.getChangesetId());
229 assertNotNull(w.getTimestamp());
230 assertEquals(ChangesetModificationType.UPDATED, ds.getModificationType(w.getPrimitiveId()));
231 assertTrue(ds.isUpdated(w.getPrimitiveId()));
232 assertEquals(2, w.getNumNodes());
233 assertEquals(Arrays.asList(21L, 22L), w.getNodes());
234
235 HistoryRelation r = (HistoryRelation) ds.getPrimitive(new SimplePrimitiveId(3, OsmPrimitiveType.RELATION));
236 assertNotNull(r);
237 assertEquals(3, r.getId());
238 assertEquals(3, r.getVersion());
239 assertEquals(1, r.getChangesetId());
240 assertNotNull(r.getTimestamp());
241 assertEquals(ChangesetModificationType.DELETED, ds.getModificationType(r.getPrimitiveId()));
242 assertTrue(ds.isDeleted(r.getPrimitiveId()));
243 }
244}
Note: See TracBrowser for help on using the repository browser.