source: josm/trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java@ 9214

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

use LatLon.ZERO instead of new LatLon(0, 0)

  • Property svn:eol-style set to native
File size: 14.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.osm.visitor;
3
4import static org.junit.Assert.assertEquals;
5import static org.junit.Assert.assertNotNull;
6import static org.junit.Assert.assertNull;
7import static org.junit.Assert.assertTrue;
8
9import java.util.Collection;
10
11import org.junit.BeforeClass;
12import org.junit.Test;
13import org.openstreetmap.josm.JOSMFixture;
14import org.openstreetmap.josm.data.coor.LatLon;
15import org.openstreetmap.josm.data.osm.DataSet;
16import org.openstreetmap.josm.data.osm.Node;
17import org.openstreetmap.josm.data.osm.OsmPrimitive;
18import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
19import org.openstreetmap.josm.data.osm.Relation;
20import org.openstreetmap.josm.data.osm.RelationMember;
21import org.openstreetmap.josm.data.osm.Way;
22
23/**
24 * Unit tests for class {@link MergeSourceBuildingVisitor}.
25 */
26public class MergeSourceBuildingVisitorTest {
27
28 protected OsmPrimitive lookupByName(Collection<? extends OsmPrimitive> primitives, String name) {
29 if (primitives == null) return null;
30 if (name == null) return null;
31 for (OsmPrimitive primitive: primitives) {
32 if (name.equals(primitive.get("name")))
33 return primitive;
34 }
35 return null;
36 }
37
38 /**
39 * Setup test.
40 */
41 @BeforeClass
42 public static void setUp() {
43 JOSMFixture.createUnitTestFixture().init();
44 }
45
46 @Test
47 public void testNodes() {
48 DataSet source = new DataSet();
49 Node n1 = new Node(1);
50 Node n2 = new Node(new LatLon(10.0, 10.0));
51 n2.put("name", "n2");
52 Node n3 = new Node(3);
53 Node n4 = new Node(new LatLon(20.0, 20.0));
54 n4.put("name", "n4");
55 source.addPrimitive(n1);
56 source.addPrimitive(n2);
57 source.addPrimitive(n3);
58 source.addPrimitive(n4);
59 source.setSelected(n1, n2);
60
61 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
62 DataSet hull = builder.build();
63 assertNotNull(hull);
64 assertEquals(2, hull.getNodes().size());
65
66 OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.NODE);
67 assertNotNull(p);
68 assertEquals(p.getClass(), Node.class);
69
70 p = hull.getPrimitiveById(3, OsmPrimitiveType.NODE);
71 assertNull(p);
72
73 p = lookupByName(hull.getNodes(), "n2");
74 assertNotNull(p);
75
76 p = lookupByName(hull.getNodes(), "n4");
77 assertNull(p);
78 }
79
80 @Test
81 public void testOneWay() {
82 DataSet source = new DataSet();
83 Node n1 = new Node(1);
84 Node n2 = new Node(2);
85 Way w1 = new Way(3, 1);
86 w1.addNode(n1);
87 w1.addNode(n2);
88 source.addPrimitive(n1);
89 source.addPrimitive(n2);
90 source.addPrimitive(w1);
91 source.setSelected(w1);
92
93 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
94 DataSet hull = builder.build();
95 assertNotNull(hull);
96 assertEquals(1, hull.getWays().size());
97 assertEquals(2, hull.getNodes().size());
98
99 OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.NODE);
100 assertNotNull(p);
101 assertEquals(p.getClass(), Node.class);
102
103 p = hull.getPrimitiveById(2, OsmPrimitiveType.NODE);
104 assertNotNull(p);
105 assertEquals(p.getClass(), Node.class);
106
107 p = hull.getPrimitiveById(3, OsmPrimitiveType.WAY);
108 assertNotNull(p);
109 assertEquals(p.getClass(), Way.class);
110 }
111
112 @Test
113 public void testOneWayNodesSelectedToo() {
114 DataSet source = new DataSet();
115 Node n1 = new Node(1);
116 Node n2 = new Node(2);
117 Way w1 = new Way(3, 1);
118 w1.addNode(n1);
119 w1.addNode(n2);
120 source.addPrimitive(n1);
121 source.addPrimitive(n2);
122 source.addPrimitive(w1);
123 source.setSelected(w1, n1, n2);
124
125 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
126 DataSet hull = builder.build();
127 assertNotNull(hull);
128 assertEquals(1, hull.getWays().size());
129 assertEquals(2, hull.getNodes().size());
130
131 OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.NODE);
132 assertNotNull(p);
133 assertEquals(p.getClass(), Node.class);
134
135 p = hull.getPrimitiveById(2, OsmPrimitiveType.NODE);
136 assertNotNull(p);
137 assertEquals(p.getClass(), Node.class);
138
139 p = hull.getPrimitiveById(3, OsmPrimitiveType.WAY);
140 assertNotNull(p);
141 assertEquals(p.getClass(), Way.class);
142 }
143
144 @Test
145 public void testOneWayIncomplete() {
146 DataSet source = new DataSet();
147 Way w1 = new Way(3);
148 source.addPrimitive(w1);
149 source.setSelected(w1);
150
151 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
152 DataSet hull = builder.build();
153 assertNotNull(hull);
154 assertEquals(1, hull.getWays().size());
155
156 OsmPrimitive p = hull.getPrimitiveById(3, OsmPrimitiveType.WAY);
157 assertNotNull(p);
158 assertEquals(p.getClass(), Way.class);
159 assertTrue(p.isIncomplete());
160 }
161
162 @Test
163 public void testOneRelationExistingMembersSelected() {
164 DataSet source = new DataSet();
165 Relation r1 = new Relation(1, 1);
166 Node n20 = new Node(20, 1);
167 n20.setCoor(LatLon.ZERO);
168 r1.addMember(new RelationMember("node-20", n20));
169 Way w30 = new Way(30, 1);
170 Node n21 = new Node(21);
171 w30.addNode(n21);
172 Node n22 = new Node(22);
173 w30.addNode(n22);
174 r1.addMember(new RelationMember("way-30", w30));
175 Relation r40 = new Relation(40);
176 r1.addMember(new RelationMember("relation-40", r40));
177 source.addPrimitive(n20);
178 source.addPrimitive(n21);
179 source.addPrimitive(n22);
180 source.addPrimitive(w30);
181 source.addPrimitive(r40);
182 source.addPrimitive(r1);
183 source.setSelected(r1, n20, w30, r40);
184
185 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
186 DataSet hull = builder.build();
187 assertNotNull(hull);
188 assertEquals(1, hull.getWays().size());
189 assertEquals(3, hull.getNodes().size());
190 assertEquals(2, hull.getRelations().size());
191
192 OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
193 assertNotNull(p);
194 assertEquals(p.getClass(), Relation.class);
195
196 Way w = (Way) hull.getPrimitiveById(30, OsmPrimitiveType.WAY);
197 assertNotNull(w);
198 assertEquals(2, w.getNodesCount());
199 Node n = (Node) hull.getPrimitiveById(21, OsmPrimitiveType.NODE);
200 assertNotNull(n);
201 assertTrue(w.containsNode(n));
202
203 n = (Node) hull.getPrimitiveById(22, OsmPrimitiveType.NODE);
204 assertNotNull(n);
205 assertTrue(w.containsNode(n));
206
207 Relation r = (Relation) hull.getPrimitiveById(40, OsmPrimitiveType.RELATION);
208 assertNotNull(r);
209
210 r = (Relation) hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
211 assertNotNull(r);
212 assertEquals(3, r.getMembersCount());
213 RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20, OsmPrimitiveType.NODE));
214 assertTrue(r.getMembers().contains(m));
215 m = new RelationMember("way-30", hull.getPrimitiveById(30, OsmPrimitiveType.WAY));
216 assertTrue(r.getMembers().contains(m));
217 m = new RelationMember("relation-40", hull.getPrimitiveById(40, OsmPrimitiveType.RELATION));
218 assertTrue(r.getMembers().contains(m));
219 }
220
221 @Test
222 public void testOneRelationExistingMembersNotSelected() {
223 DataSet source = new DataSet();
224 Relation r1 = new Relation(1, 1);
225 Node n20 = new Node(20);
226 r1.addMember(new RelationMember("node-20", n20));
227 Way w30 = new Way(30, 1);
228 Node n21;
229 w30.addNode(n21 = new Node(21));
230 Node n22;
231 w30.addNode(n22 = new Node(22));
232 r1.addMember(new RelationMember("way-30", w30));
233 Relation r40 = new Relation(40);
234 r1.addMember(new RelationMember("relation-40", r40));
235 source.addPrimitive(n20);
236 source.addPrimitive(n21);
237 source.addPrimitive(n22);
238 source.addPrimitive(w30);
239 source.addPrimitive(r40);
240 source.addPrimitive(r1);
241 source.setSelected(r1);
242
243 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
244 DataSet hull = builder.build();
245 assertNotNull(hull);
246 assertEquals(1, hull.getWays().size());
247 assertEquals(1, hull.getNodes().size());
248 assertEquals(2, hull.getRelations().size());
249
250 OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
251 assertNotNull(p);
252 assertEquals(p.getClass(), Relation.class);
253
254 Way w = (Way) hull.getPrimitiveById(30, OsmPrimitiveType.WAY);
255 assertNotNull(w);
256 assertTrue(w.isIncomplete());
257
258
259 Node n = (Node) hull.getPrimitiveById(21, OsmPrimitiveType.NODE);
260 assertNull(n);
261
262 n = (Node) hull.getPrimitiveById(22, OsmPrimitiveType.NODE);
263 assertNull(n);
264
265 Relation r = (Relation) hull.getPrimitiveById(40, OsmPrimitiveType.RELATION);
266 assertNotNull(r);
267 assertTrue(r.isIncomplete());
268
269 r = (Relation) hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
270 assertNotNull(r);
271 assertEquals(3, r.getMembersCount());
272 RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20, OsmPrimitiveType.NODE));
273 assertTrue(r.getMembers().contains(m));
274 m = new RelationMember("way-30", hull.getPrimitiveById(30, OsmPrimitiveType.WAY));
275 assertTrue(r.getMembers().contains(m));
276 m = new RelationMember("relation-40", hull.getPrimitiveById(40, OsmPrimitiveType.RELATION));
277 assertTrue(r.getMembers().contains(m));
278 }
279
280 @Test
281 public void testOneRelationNewMembersNotSelected() {
282 DataSet source = new DataSet();
283 Relation r1 = new Relation();
284 r1.put("name", "r1");
285 Node n20 = new Node(new LatLon(20.0, 20.0));
286 n20.put("name", "n20");
287 r1.addMember(new RelationMember("node-20", n20));
288
289 Way w30 = new Way();
290 w30.put("name", "w30");
291 Node n21;
292 w30.addNode(n21 = new Node(new LatLon(21.0, 21.0)));
293 n21.put("name", "n21");
294 Node n22;
295 w30.addNode(n22 = new Node(new LatLon(22.0, 22.0)));
296 n22.put("name", "n22");
297 r1.addMember(new RelationMember("way-30", w30));
298 Relation r40 = new Relation();
299 r40.put("name", "r40");
300 r1.addMember(new RelationMember("relation-40", r40));
301
302 source.addPrimitive(n20);
303 source.addPrimitive(n21);
304 source.addPrimitive(n22);
305 source.addPrimitive(w30);
306 source.addPrimitive(r40);
307 source.addPrimitive(r1);
308 source.setSelected(r1);
309
310 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
311 DataSet hull = builder.build();
312 assertNotNull(hull);
313 assertEquals(1, hull.getWays().size());
314 assertEquals(3, hull.getNodes().size());
315 assertEquals(2, hull.getRelations().size());
316
317 OsmPrimitive p = lookupByName(hull.getRelations(), "r1");
318 assertNotNull(p);
319 assertEquals(p.getClass(), Relation.class);
320
321 Way w = (Way) lookupByName(hull.getWays(), "w30");
322 assertNotNull(w);
323 assertEquals(2, w.getNodesCount());
324
325 Node n = (Node) lookupByName(hull.getNodes(), "n21");
326 assertNotNull(n);
327 assertTrue(w.containsNode(n));
328
329 n = (Node) lookupByName(hull.getNodes(), "n22");
330 assertNotNull(n);
331 assertTrue(w.containsNode(n));
332
333 Relation r = (Relation) lookupByName(hull.getRelations(), "r40");
334 assertNotNull(r);
335
336 r = (Relation) lookupByName(hull.getRelations(), "r1");
337 assertNotNull(r);
338 assertEquals(3, r.getMembersCount());
339 RelationMember m = new RelationMember("node-20", lookupByName(hull.getNodes(), "n20"));
340 assertTrue(r.getMembers().contains(m));
341 m = new RelationMember("way-30", lookupByName(hull.getWays(), "w30"));
342 assertTrue(r.getMembers().contains(m));
343 m = new RelationMember("relation-40", lookupByName(hull.getRelations(), "r40"));
344 assertTrue(r.getMembers().contains(m));
345 }
346
347 @Test
348 public void testOneRelationExistingRecursive() {
349 DataSet source = new DataSet();
350 Relation r1 = new Relation(1, 1);
351 r1.addMember(new RelationMember("relation-1", r1));
352 source.addPrimitive(r1);
353 source.setSelected(r1);
354
355 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
356 DataSet hull = builder.build();
357 assertNotNull(hull);
358 assertEquals(1, hull.getRelations().size());
359
360 Relation r = (Relation) hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
361 assertNotNull(r);
362 assertEquals(1, r.getMembersCount());
363 assertTrue(r.getMembers().contains(new RelationMember("relation-1", r)));
364 }
365
366 @Test
367 public void testOneRelationNewRecursive() {
368 DataSet source = new DataSet();
369 Relation r1 = new Relation();
370 r1.put("name", "r1");
371 r1.addMember(new RelationMember("relation-1", r1));
372 source.addPrimitive(r1);
373 source.setSelected(r1);
374
375 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
376 DataSet hull = builder.build();
377 assertNotNull(hull);
378 assertEquals(1, hull.getRelations().size());
379
380 Relation r = (Relation) lookupByName(hull.getRelations(), "r1");
381 assertNotNull(r);
382 assertEquals(1, r.getMembersCount());
383 assertTrue(r.getMembers().contains(new RelationMember("relation-1", r)));
384 }
385
386 @Test
387 public void testTwoRelationExistingCircular() {
388 DataSet source = new DataSet();
389 Relation r1 = new Relation(1, 1);
390 source.addPrimitive(r1);
391 Relation r2 = new Relation(2, 3);
392 source.addPrimitive(r2);
393 r1.addMember(new RelationMember("relation-2", r2));
394 r2.addMember(new RelationMember("relation-1", r1));
395 source.setSelected(r1, r2);
396
397 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
398 DataSet hull = builder.build();
399 assertNotNull(hull);
400 assertEquals(2, hull.getRelations().size());
401
402 r1 = (Relation) hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
403 assertNotNull(r1);
404 r2 = (Relation) hull.getPrimitiveById(2, OsmPrimitiveType.RELATION);
405 assertNotNull(r2);
406 assertEquals(1, r1.getMembersCount());
407 assertTrue(r1.getMembers().contains(new RelationMember("relation-2", r2)));
408 assertEquals(1, r2.getMembersCount());
409 assertTrue(r2.getMembers().contains(new RelationMember("relation-1", r1)));
410 }
411}
Note: See TracBrowser for help on using the repository browser.