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

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

spotbugs - fix various issues found with Eclipse plugin

  • Property svn:eol-style set to native
File size: 9.1 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 @SuppressFBWarnings(value = "NP_NULL_PARAM_DEREF_NONVIRTUAL")
56 public void test_Constructor() {
57
58 // should be OK
59 new OsmChangesetContentParser(new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8)));
60
61 shouldFail(() -> {
62 new OsmChangesetContentParser((String) null);
63 });
64
65 shouldFail(() -> {
66 new OsmChangesetContentParser((InputStream) null);
67 });
68 }
69
70 /**
71 * Test various invocations of {@link OsmChangesetContentParser#parse}
72 * @throws XmlParsingException never
73 */
74 @Test
75 public void test_parse_arguments() throws XmlParsingException {
76 OsmChangesetContentParser parser;
77
78 String doc = "<osmChange version=\"0.6\" generator=\"OpenStreetMap server\"></osmChange>";
79
80 // should be OK
81 parser = new OsmChangesetContentParser(new ByteArrayInputStream(doc.getBytes(StandardCharsets.UTF_8)));
82 parser.parse(null);
83
84 // should be OK
85 parser = new OsmChangesetContentParser(new ByteArrayInputStream(doc.getBytes(StandardCharsets.UTF_8)));
86 parser.parse(NullProgressMonitor.INSTANCE);
87
88 // should be OK
89 parser = new OsmChangesetContentParser(doc);
90 parser.parse(null);
91 }
92
93 /**
94 * A simple changeset content document with one created node
95 * @throws XmlParsingException never
96 */
97 @Test
98 public void test_OK_OneCreatedNode() throws XmlParsingException {
99 OsmChangesetContentParser parser;
100
101 String doc =
102 "<osmChange version=\"0.6\" generator=\"OpenStreetMap server\">\n" +
103 " <create>\n" +
104 " <node id=\"1\" version=\"1\" visible=\"true\" changeset=\"1\" lat=\"1.0\" lon=\"1.0\" timestamp=\"2009-12-22\" />\n" +
105 " </create>\n" +
106 "</osmChange>";
107
108 // should be OK
109 parser = new OsmChangesetContentParser(doc);
110 ChangesetDataSet ds = parser.parse();
111
112 assertEquals(1, ds.size());
113 HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
114 assertNotNull(p);
115 assertEquals(1, p.getId());
116 assertEquals(1, p.getVersion());
117 assertEquals(1, p.getChangesetId());
118 assertNotNull(p.getTimestamp());
119 assertEquals(ChangesetModificationType.CREATED, ds.getModificationType(p.getPrimitiveId()));
120 assertTrue(ds.isCreated(p.getPrimitiveId()));
121 }
122
123 /**
124 * A simple changeset content document with one updated node
125 * @throws XmlParsingException never
126 */
127 @Test
128 public void test_OK_OneUpdatedNode() throws XmlParsingException {
129 OsmChangesetContentParser parser;
130
131 String doc =
132 "<osmChange version=\"0.6\" generator=\"OpenStreetMap server\">\n" +
133 " <modify>\n" +
134 " <node id=\"1\" version=\"1\" visible=\"true\" changeset=\"1\" lat=\"1.0\" lon=\"1.0\" timestamp=\"2009-12-22\" />\n" +
135 " </modify>\n" +
136 "</osmChange>";
137
138 // should be OK
139 parser = new OsmChangesetContentParser(doc);
140 ChangesetDataSet ds = parser.parse();
141
142 assertEquals(1, ds.size());
143 HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
144 assertNotNull(p);
145 assertEquals(1, p.getId());
146 assertEquals(1, p.getVersion());
147 assertEquals(1, p.getChangesetId());
148 assertNotNull(p.getTimestamp());
149 assertEquals(ChangesetModificationType.UPDATED, ds.getModificationType(p.getPrimitiveId()));
150 assertTrue(ds.isUpdated(p.getPrimitiveId()));
151 }
152
153 /**
154 * A simple changeset content document with one deleted node
155 * @throws XmlParsingException never
156 */
157 @Test
158 public void test_OK_OneDeletedNode() throws XmlParsingException {
159 OsmChangesetContentParser parser;
160
161 String doc =
162 "<osmChange version=\"0.6\" generator=\"OpenStreetMap server\">\n" +
163 " <delete>\n" +
164 " <node id=\"1\" version=\"1\" visible=\"true\" changeset=\"1\" lat=\"1.0\" lon=\"1.0\" timestamp=\"2009-12-22\" />\n" +
165 " </delete>\n" +
166 "</osmChange>";
167
168 // should be OK
169 parser = new OsmChangesetContentParser(doc);
170 ChangesetDataSet ds = parser.parse();
171
172 assertEquals(1, ds.size());
173 HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
174 assertNotNull(p);
175 assertEquals(1, p.getId());
176 assertEquals(1, p.getVersion());
177 assertEquals(1, p.getChangesetId());
178 assertNotNull(p.getTimestamp());
179 assertEquals(ChangesetModificationType.DELETED, ds.getModificationType(p.getPrimitiveId()));
180 assertTrue(ds.isDeleted(p.getPrimitiveId()));
181 }
182
183 /**
184 * A more complex test with a document including nodes, ways, and relations.
185 * @throws XmlParsingException never
186 */
187 @Test
188 public void test_OK_ComplexTestCase() throws XmlParsingException {
189 OsmChangesetContentParser parser;
190
191 String doc =
192 "<osmChange version=\"0.6\" generator=\"OpenStreetMap server\">\n" +
193 " <create>\n" +
194 " <node id=\"1\" version=\"1\" visible=\"true\" changeset=\"1\" lat=\"1.0\" lon=\"1.0\" timestamp=\"2009-12-22\">\n" +
195 " <tag k=\"a.key\" v=\"a.value\" />\n" +
196 " </node>\n" +
197 " </create>\n" +
198 " <modify>\n" +
199 " <way id=\"2\" version=\"2\" visible=\"true\" changeset=\"1\" timestamp=\"2009-12-22\">\n" +
200 " <nd ref=\"21\"/>\n" +
201 " <nd ref=\"22\"/>\n" +
202 " </way>\n" +
203 " </modify>\n" +
204 " <delete>\n" +
205 " <relation id=\"3\" version=\"3\" visible=\"true\" changeset=\"1\" timestamp=\"2009-12-22\" />\n" +
206 " </delete>\n" +
207 "</osmChange>";
208
209 // should be OK
210 parser = new OsmChangesetContentParser(doc);
211 ChangesetDataSet ds = parser.parse();
212
213 assertEquals(3, ds.size());
214
215 HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
216 assertNotNull(p);
217 assertEquals(1, p.getId());
218 assertEquals(1, p.getVersion());
219 assertEquals(1, p.getChangesetId());
220 assertNotNull(p.getTimestamp());
221 assertEquals(ChangesetModificationType.CREATED, ds.getModificationType(p.getPrimitiveId()));
222 assertTrue(ds.isCreated(p.getPrimitiveId()));
223 assertEquals("a.value", p.get("a.key"));
224
225 HistoryWay w = (HistoryWay) ds.getPrimitive(new SimplePrimitiveId(2, OsmPrimitiveType.WAY));
226 assertNotNull(w);
227 assertEquals(2, w.getId());
228 assertEquals(2, w.getVersion());
229 assertEquals(1, w.getChangesetId());
230 assertNotNull(w.getTimestamp());
231 assertEquals(ChangesetModificationType.UPDATED, ds.getModificationType(w.getPrimitiveId()));
232 assertTrue(ds.isUpdated(w.getPrimitiveId()));
233 assertEquals(2, w.getNumNodes());
234 assertEquals(Arrays.asList(21L, 22L), w.getNodes());
235
236 HistoryRelation r = (HistoryRelation) ds.getPrimitive(new SimplePrimitiveId(3, OsmPrimitiveType.RELATION));
237 assertNotNull(r);
238 assertEquals(3, r.getId());
239 assertEquals(3, r.getVersion());
240 assertEquals(1, r.getChangesetId());
241 assertNotNull(r.getTimestamp());
242 assertEquals(ChangesetModificationType.DELETED, ds.getModificationType(r.getPrimitiveId()));
243 assertTrue(ds.isDeleted(r.getPrimitiveId()));
244 }
245}
Note: See TracBrowser for help on using the repository browser.