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

Last change on this file since 2077 was 2077, checked in by Gubaer, 15 years ago

Had to replace DataSet:getPrimitiveById(id) with DataSet:getPrimitiveById(id,type). Primitive ids are not globally unique, only per type of primitive.
Fixed problems in unit test, available unit tests passing again.

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