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

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

Sonar - remove warnings related to the static preferences initialization in instance methods

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