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

Last change on this file since 3284 was 3284, checked in by jttt, 14 years ago

Fix tests

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