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
RevLine 
[1890]1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.osm.visitor;
3
[1926]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
[1890]9import java.util.Collection;
10
[3284]11import org.junit.BeforeClass;
[1890]12import org.junit.Test;
[3284]13import org.openstreetmap.josm.Main;
[1890]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;
[2077]18import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
[1890]19import org.openstreetmap.josm.data.osm.Relation;
20import org.openstreetmap.josm.data.osm.RelationMember;
21import org.openstreetmap.josm.data.osm.Way;
[3284]22import org.openstreetmap.josm.data.projection.Mercator;
[1890]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
[3284]36 @BeforeClass
37 public static void setUp() {
38 Main.proj = new Mercator();
39 }
40
[1890]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");
[2381]50 source.addPrimitive(n1);
51 source.addPrimitive(n2);
52 source.addPrimitive(n3);
53 source.addPrimitive(n4);
[1890]54 source.setSelected(n1,n2);
55
56 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
57 DataSet hull = builder.build();
58 assertNotNull(hull);
[2381]59 assertEquals(2, hull.getNodes().size());
[1890]60
[2077]61 OsmPrimitive p = hull.getPrimitiveById(1,OsmPrimitiveType.NODE);
[1890]62 assertNotNull(p);
63 assertEquals(p.getClass(), Node.class);
64
[2077]65 p = hull.getPrimitiveById(3,OsmPrimitiveType.NODE);
[1890]66 assertNull(p);
67
[2381]68 p = lookupByName(hull.getNodes(), "n2");
[1890]69 assertNotNull(p);
70
[2381]71 p = lookupByName(hull.getNodes(), "n4");
[1890]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);
[2620]81 Way w1 = new Way(3, 1);
[1910]82 w1.addNode(n1);
83 w1.addNode(n2);
[2381]84 source.addPrimitive(n1);
85 source.addPrimitive(n2);
86 source.addPrimitive(w1);
[1890]87 source.setSelected(w1);
88
89 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
90 DataSet hull = builder.build();
91 assertNotNull(hull);
[2381]92 assertEquals(1, hull.getWays().size());
93 assertEquals(2, hull.getNodes().size());
[1890]94
[2077]95 OsmPrimitive p = hull.getPrimitiveById(1,OsmPrimitiveType.NODE);
[1890]96 assertNotNull(p);
97 assertEquals(p.getClass(), Node.class);
98
[2077]99 p = hull.getPrimitiveById(2,OsmPrimitiveType.NODE);
[1890]100 assertNotNull(p);
101 assertEquals(p.getClass(), Node.class);
102
[2077]103 p = hull.getPrimitiveById(3, OsmPrimitiveType.WAY);
[1890]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);
[2620]113 Way w1 = new Way(3, 1);
[1910]114 w1.addNode(n1);
115 w1.addNode(n2);
[2381]116 source.addPrimitive(n1);
117 source.addPrimitive(n2);
118 source.addPrimitive(w1);
[1890]119 source.setSelected(w1,n1,n2);
120
121 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
122 DataSet hull = builder.build();
123 assertNotNull(hull);
[2381]124 assertEquals(1, hull.getWays().size());
125 assertEquals(2, hull.getNodes().size());
[1890]126
[2077]127 OsmPrimitive p = hull.getPrimitiveById(1,OsmPrimitiveType.NODE);
[1890]128 assertNotNull(p);
129 assertEquals(p.getClass(), Node.class);
130
[2077]131 p = hull.getPrimitiveById(2, OsmPrimitiveType.NODE);
[1890]132 assertNotNull(p);
133 assertEquals(p.getClass(), Node.class);
134
[2077]135 p = hull.getPrimitiveById(3,OsmPrimitiveType.WAY);
[1890]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);
[2381]144 source.addPrimitive(w1);
[1890]145 source.setSelected(w1);
146
147 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
148 DataSet hull = builder.build();
149 assertNotNull(hull);
[2381]150 assertEquals(1, hull.getWays().size());
[1890]151
[2077]152 OsmPrimitive p = hull.getPrimitiveById(3, OsmPrimitiveType.WAY);
[1890]153 assertNotNull(p);
154 assertEquals(p.getClass(), Way.class);
[2578]155 assertTrue(p.isIncomplete());
[1890]156 }
157
158 @Test
159 public void test_OneRelation_ExistingMembersSelected() {
160 DataSet source = new DataSet();
[3025]161 Relation r1 = new Relation(1, 1);
[2620]162 Node n20 = new Node(20, 1);
[3025]163 n20.setCoor(new LatLon(0, 0));
[1951]164 r1.addMember(new RelationMember("node-20",n20));
[2620]165 Way w30 = new Way(30, 1);
[3025]166 Node n21 = new Node(21);
167 w30.addNode(n21);
168 Node n22 = new Node(22);
169 w30.addNode(n22);
[1951]170 r1.addMember(new RelationMember("way-30",w30));
[1890]171 Relation r40 = new Relation(40);
[1951]172 r1.addMember(new RelationMember("relation-40", r40));
[2381]173 source.addPrimitive(n20);
174 source.addPrimitive(n21);
175 source.addPrimitive(n22);
176 source.addPrimitive(w30);
[3025]177 source.addPrimitive(r40);
[2381]178 source.addPrimitive(r1);
[1890]179 source.setSelected(r1,n20,w30,r40);
180
181 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
182 DataSet hull = builder.build();
183 assertNotNull(hull);
[2381]184 assertEquals(1, hull.getWays().size());
185 assertEquals(3, hull.getNodes().size());
186 assertEquals(2, hull.getRelations().size());
[1890]187
[2077]188 OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
[1890]189 assertNotNull(p);
190 assertEquals(p.getClass(), Relation.class);
191
[2077]192 Way w = (Way)hull.getPrimitiveById(30,OsmPrimitiveType.WAY);
[1890]193 assertNotNull(w);
[1910]194 assertEquals(2, w.getNodesCount());
[2077]195 Node n = (Node)hull.getPrimitiveById(21, OsmPrimitiveType.NODE);
[1890]196 assertNotNull(n);
[1912]197 assertTrue(w.containsNode(n));
[1890]198
[2077]199 n = (Node)hull.getPrimitiveById(22,OsmPrimitiveType.NODE);
[1890]200 assertNotNull(n);
[1912]201 assertTrue(w.containsNode(n));
[1890]202
[2077]203 Relation r = (Relation)hull.getPrimitiveById(40,OsmPrimitiveType.RELATION);
[1890]204 assertNotNull(r);
205
[2077]206 r = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
[1890]207 assertNotNull(r);
[1926]208 assertEquals(3, r.getMembersCount());
[2077]209 RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20,OsmPrimitiveType.NODE));
[1951]210 assertTrue(r.getMembers().contains(m));
[2077]211 m = new RelationMember("way-30", hull.getPrimitiveById(30, OsmPrimitiveType.WAY));
[1951]212 assertTrue(r.getMembers().contains(m));
[2077]213 m = new RelationMember("relation-40", hull.getPrimitiveById(40, OsmPrimitiveType.RELATION));
[1951]214 assertTrue(r.getMembers().contains(m));
[1890]215 }
216
217 @Test
218 public void test_OneRelation_ExistingMembersNotSelected() {
219 DataSet source = new DataSet();
[3025]220 Relation r1 = new Relation(1, 1);
[1890]221 Node n20 = new Node(20);
[1951]222 r1.addMember(new RelationMember("node-20",n20));
[2620]223 Way w30 = new Way(30, 1);
[1890]224 Node n21;
[1910]225 w30.addNode(n21 = new Node(21));
[1890]226 Node n22;
[1910]227 w30.addNode(n22 = new Node(22));
[1951]228 r1.addMember(new RelationMember("way-30",w30));
[1890]229 Relation r40 = new Relation(40);
[1951]230 r1.addMember(new RelationMember("relation-40", r40));
[2381]231 source.addPrimitive(n20);
232 source.addPrimitive(n21);
233 source.addPrimitive(n22);
234 source.addPrimitive(w30);
[3025]235 source.addPrimitive(r40);
[2381]236 source.addPrimitive(r1);
[1890]237 source.setSelected(r1);
238
239 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
240 DataSet hull = builder.build();
241 assertNotNull(hull);
[2381]242 assertEquals(1, hull.getWays().size());
243 assertEquals(1, hull.getNodes().size());
244 assertEquals(2, hull.getRelations().size());
[1890]245
[2077]246 OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
[1890]247 assertNotNull(p);
248 assertEquals(p.getClass(), Relation.class);
249
[2077]250 Way w = (Way)hull.getPrimitiveById(30, OsmPrimitiveType.WAY);
[1890]251 assertNotNull(w);
[2578]252 assertTrue(w.isIncomplete());
[1890]253
254
[2077]255 Node n = (Node)hull.getPrimitiveById(21,OsmPrimitiveType.NODE);
[1890]256 assertNull(n);
257
[2077]258 n = (Node)hull.getPrimitiveById(22, OsmPrimitiveType.NODE);
[1890]259 assertNull(n);
260
[2077]261 Relation r = (Relation)hull.getPrimitiveById(40, OsmPrimitiveType.RELATION);
[1890]262 assertNotNull(r);
[2578]263 assertTrue(r.isIncomplete());
[1890]264
[2077]265 r = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
[1890]266 assertNotNull(r);
[1926]267 assertEquals(3, r.getMembersCount());
[2077]268 RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20, OsmPrimitiveType.NODE));
[1951]269 assertTrue(r.getMembers().contains(m));
[2077]270 m = new RelationMember("way-30", hull.getPrimitiveById(30, OsmPrimitiveType.WAY));
[1951]271 assertTrue(r.getMembers().contains(m));
[2077]272 m = new RelationMember("relation-40", hull.getPrimitiveById(40, OsmPrimitiveType.RELATION));
[1951]273 assertTrue(r.getMembers().contains(m));
[1890]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");
[2077]283 r1.addMember(new RelationMember("node-20",n20));
284
[1890]285 Way w30 = new Way();
286 w30.put("name", "w30");
287 Node n21;
[1910]288 w30.addNode(n21 = new Node(new LatLon(21.0,21.0)));
[1890]289 n21.put("name","n21");
290 Node n22;
[1910]291 w30.addNode(n22 = new Node(new LatLon(22.0,22.0)));
[1890]292 n22.put("name","n22");
[1951]293 r1.addMember(new RelationMember("way-30",w30));
[1890]294 Relation r40 = new Relation();
295 r40.put("name", "r40");
[1951]296 r1.addMember(new RelationMember("relation-40", r40));
[2077]297
[2381]298 source.addPrimitive(n20);
299 source.addPrimitive(n21);
300 source.addPrimitive(n22);
301 source.addPrimitive(w30);
[3025]302 source.addPrimitive(r40);
[2381]303 source.addPrimitive(r1);
[1890]304 source.setSelected(r1);
305
306 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
307 DataSet hull = builder.build();
308 assertNotNull(hull);
[2381]309 assertEquals(1, hull.getWays().size());
310 assertEquals(3, hull.getNodes().size());
311 assertEquals(2, hull.getRelations().size());
[1890]312
[2381]313 OsmPrimitive p = lookupByName(hull.getRelations(), "r1");
[1890]314 assertNotNull(p);
315 assertEquals(p.getClass(), Relation.class);
316
[2381]317 Way w = (Way)lookupByName(hull.getWays(), "w30");
[1890]318 assertNotNull(w);
[1910]319 assertEquals(2, w.getNodesCount());
[1890]320
[2381]321 Node n = (Node)lookupByName(hull.getNodes(), "n21");
[1890]322 assertNotNull(n);
[1912]323 assertTrue(w.containsNode(n));
[1890]324
[2381]325 n = (Node)lookupByName(hull.getNodes(), "n22");
[1890]326 assertNotNull(n);
[1912]327 assertTrue(w.containsNode(n));
[1890]328
[2381]329 Relation r = (Relation)lookupByName(hull.getRelations(), "r40");
[1890]330 assertNotNull(r);
331
[2381]332 r = (Relation)lookupByName(hull.getRelations(), "r1");
[1890]333 assertNotNull(r);
[1926]334 assertEquals(3, r.getMembersCount());
[2381]335 RelationMember m = new RelationMember("node-20", lookupByName(hull.getNodes(), "n20"));
[1951]336 assertTrue(r.getMembers().contains(m));
[2388]337 m = new RelationMember("way-30", lookupByName(hull.getWays(), "w30"));
[1951]338 assertTrue(r.getMembers().contains(m));
[2388]339 m = new RelationMember("relation-40", lookupByName(hull.getRelations(), "r40"));
[1951]340 assertTrue(r.getMembers().contains(m));
[1890]341 }
342
343 @Test
344 public void test_OneRelation_Existing_Recursive() {
345 DataSet source = new DataSet();
[3025]346 Relation r1 = new Relation(1, 1);
[1951]347 r1.addMember(new RelationMember("relation-1",r1));
[2381]348 source.addPrimitive(r1);
[1890]349 source.setSelected(r1);
350
351 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
352 DataSet hull = builder.build();
353 assertNotNull(hull);
[2381]354 assertEquals(1, hull.getRelations().size());
[1890]355
[2077]356 Relation r = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
[1890]357 assertNotNull(r);
[1926]358 assertEquals(1, r.getMembersCount());
[1951]359 assertTrue(r.getMembers().contains(new RelationMember("relation-1",r)));
[1890]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");
[1951]367 r1.addMember(new RelationMember("relation-1",r1));
[2381]368 source.addPrimitive(r1);
[1890]369 source.setSelected(r1);
370
371 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
372 DataSet hull = builder.build();
373 assertNotNull(hull);
[2381]374 assertEquals(1, hull.getRelations().size());
[1890]375
[2381]376 Relation r = (Relation)lookupByName(hull.getRelations(), "r1");
[1890]377 assertNotNull(r);
[1926]378 assertEquals(1, r.getMembersCount());
[1951]379 assertTrue(r.getMembers().contains(new RelationMember("relation-1",r)));
[1890]380 }
381
382 @Test
383 public void test_TwoRelation_Existing_Circular() {
384 DataSet source = new DataSet();
[3025]385 Relation r1 = new Relation(1, 1);
386 source.addPrimitive(r1);
387 Relation r2 = new Relation(2, 3);
388 source.addPrimitive(r2);
[1951]389 r1.addMember(new RelationMember("relation-2",r2));
390 r2.addMember(new RelationMember("relation-1",r1));
[1890]391 source.setSelected(r1,r2);
392
393 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
394 DataSet hull = builder.build();
395 assertNotNull(hull);
[2381]396 assertEquals(2, hull.getRelations().size());
[1890]397
[2077]398 r1 = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
[1890]399 assertNotNull(r1);
[2077]400 r2 = (Relation)hull.getPrimitiveById(2, OsmPrimitiveType.RELATION);
[1890]401 assertNotNull(r2);
[1926]402 assertEquals(1, r1.getMembersCount());
[1951]403 assertTrue(r1.getMembers().contains(new RelationMember("relation-2",r2)));
[1926]404 assertEquals(1, r2.getMembersCount());
[1951]405 assertTrue(r2.getMembers().contains(new RelationMember("relation-1",r1)));
[1890]406 }
407}
Note: See TracBrowser for help on using the repository browser.