source: josm/trunk/test/unit/org/openstreetmap/josm/data/validation/tests/SelfIntersectingWayTest.java@ 12564

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

fix unit tests

  • Property svn:eol-style set to native
File size: 8.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.validation.tests;
3
4import java.util.ArrayList;
5import java.util.List;
6
7import org.junit.Assert;
8import org.junit.BeforeClass;
9import org.junit.Test;
10import org.openstreetmap.josm.JOSMFixture;
11import org.openstreetmap.josm.data.coor.LatLon;
12import org.openstreetmap.josm.data.osm.Node;
13import org.openstreetmap.josm.data.osm.OsmUtils;
14import org.openstreetmap.josm.data.osm.Way;
15
16/**
17 * JUnit Test of Multipolygon validation test.
18 */
19public class SelfIntersectingWayTest {
20
21 /**
22 * Setup test.
23 * @throws Exception if test cannot be initialized
24 */
25 @BeforeClass
26 public static void setUp() throws Exception {
27 JOSMFixture.createUnitTestFixture().init();
28 }
29
30 private static List<Node> createNodes() {
31 List<Node> nodes = new ArrayList<>();
32 for (int i = 0; i < 6; i++) {
33 nodes.add(new Node(i+1));
34 }
35 nodes.get(0).setCoor(new LatLon(34.2680, 133.563));
36 nodes.get(1).setCoor(new LatLon(34.2509, 133.548));
37 nodes.get(2).setCoor(new LatLon(34.2446, 133.566));
38 nodes.get(3).setCoor(new LatLon(34.2681, 133.560));
39 nodes.get(4).setCoor(new LatLon(34.2656, 133.561));
40 nodes.get(5).setCoor(new LatLon(34.2655, 133.562));
41 return nodes;
42 }
43
44 /**
45 * Self-Intersection at inner node (not first / last).
46 */
47 @Test
48 public void testUnclosedWayNormal() {
49 List<Node> nodes = createNodes();
50
51 Way w = (Way) OsmUtils.createPrimitive("way ");
52 List<Node> wayNodes = new ArrayList<>();
53 wayNodes.add(nodes.get(0));
54 wayNodes.add(nodes.get(1));
55 wayNodes.add(nodes.get(2));
56 wayNodes.add(nodes.get(1)); // problem
57 wayNodes.add(nodes.get(3));
58 wayNodes.add(nodes.get(4));
59 w.setNodes(wayNodes);
60 SelfIntersectingWay test = new SelfIntersectingWay();
61 test.visit(w);
62 Assert.assertEquals(1, test.getErrors().size());
63 Assert.assertTrue(test.getErrors().iterator().next().getHighlighted().contains(nodes.get(1)));
64 }
65
66 /**
67 * First node is identical to an inner node ("P"-Shape).
68 * This is considered okay.
69 */
70 @Test
71 public void testUnclosedWayFirst() {
72 List<Node> nodes = createNodes();
73
74 Way w = (Way) OsmUtils.createPrimitive("way ");
75 List<Node> wayNodes = new ArrayList<>();
76 wayNodes.add(nodes.get(0));
77 wayNodes.add(nodes.get(1));
78 wayNodes.add(nodes.get(2));
79 wayNodes.add(nodes.get(0)); // problem
80 wayNodes.add(nodes.get(3));
81 wayNodes.add(nodes.get(4));
82 w.setNodes(wayNodes);
83 SelfIntersectingWay test = new SelfIntersectingWay();
84 test.visit(w);
85 Assert.assertEquals(0, test.getErrors().size());
86 }
87
88 /**
89 * First node is identical to an inner node ("P"-Shape).
90 * This is considered okay.
91 */
92 @Test
93 public void testUnclosedWayFirstRepeated() {
94 List<Node> nodes = createNodes();
95
96 Way w = (Way) OsmUtils.createPrimitive("way ");
97 List<Node> wayNodes = new ArrayList<>();
98 wayNodes.add(nodes.get(0));
99 wayNodes.add(nodes.get(1));
100 wayNodes.add(nodes.get(2));
101 wayNodes.add(nodes.get(0));
102 wayNodes.add(nodes.get(3));
103 wayNodes.add(nodes.get(4));
104 w.setNodes(wayNodes);
105 SelfIntersectingWay test = new SelfIntersectingWay();
106 test.visit(w);
107 Assert.assertEquals(0, test.getErrors().size());
108 }
109
110 /**
111 * Last node is identical to an inner node ("b"-Shape).
112 * This is considered okay.
113 */
114 @Test
115 public void testUnclosedWayLast() {
116 List<Node> nodes = createNodes();
117
118 Way w = (Way) OsmUtils.createPrimitive("way ");
119 List<Node> wayNodes = new ArrayList<>();
120 wayNodes.add(nodes.get(0));
121 wayNodes.add(nodes.get(1)); // problem node
122 wayNodes.add(nodes.get(2));
123 wayNodes.add(nodes.get(3));
124 wayNodes.add(nodes.get(4));
125 wayNodes.add(nodes.get(1));
126 w.setNodes(wayNodes);
127 SelfIntersectingWay test = new SelfIntersectingWay();
128 test.visit(w);
129 Assert.assertEquals(0, test.getErrors().size());
130 }
131
132 /**
133 * Both endpoints join at one inner node ("8"-shape).
134 * This is considered to be an error.
135 */
136 @Test
137 public void testClosedWay() {
138 List<Node> nodes = createNodes();
139
140 Way w = (Way) OsmUtils.createPrimitive("way ");
141 List<Node> wayNodes = new ArrayList<>();
142 wayNodes.add(nodes.get(0));
143 wayNodes.add(nodes.get(1));
144 wayNodes.add(nodes.get(2));
145 wayNodes.add(nodes.get(0)); // problem
146 wayNodes.add(nodes.get(3));
147 wayNodes.add(nodes.get(4));
148 wayNodes.add(nodes.get(0));
149 w.setNodes(wayNodes);
150 SelfIntersectingWay test = new SelfIntersectingWay();
151 test.visit(w);
152 Assert.assertEquals(1, test.getErrors().size());
153 Assert.assertTrue(test.getErrors().iterator().next().getHighlighted().contains(nodes.get(0)));
154 }
155
156 /**
157 * Closed way contains a spike.
158 * This is considered to be an error.
159 */
160 @Test
161 public void testSpikeWithStartInClosedWay() {
162 List<Node> nodes = createNodes();
163
164 Way w = (Way) OsmUtils.createPrimitive("way ");
165 List<Node> wayNodes = new ArrayList<>();
166 wayNodes.add(nodes.get(0));
167 wayNodes.add(nodes.get(1));
168 wayNodes.add(nodes.get(0)); // problem
169 wayNodes.add(nodes.get(3));
170 wayNodes.add(nodes.get(4));
171 wayNodes.add(nodes.get(0));
172 w.setNodes(wayNodes);
173 SelfIntersectingWay test = new SelfIntersectingWay();
174 test.visit(w);
175 Assert.assertEquals(1, test.getErrors().size());
176 Assert.assertTrue(test.getErrors().iterator().next().getHighlighted().contains(nodes.get(0)));
177 }
178
179 /**
180 * Closed way contains a spike.
181 * This is considered to be an error.
182 */
183 @Test
184 public void testSpikeWithEndInClosedWay() {
185 List<Node> nodes = createNodes();
186
187 Way w = (Way) OsmUtils.createPrimitive("way ");
188 List<Node> wayNodes = new ArrayList<>();
189 wayNodes.add(nodes.get(0));
190 wayNodes.add(nodes.get(1));
191 wayNodes.add(nodes.get(2));
192 wayNodes.add(nodes.get(0)); // problem
193 wayNodes.add(nodes.get(3));
194 wayNodes.add(nodes.get(0));
195 w.setNodes(wayNodes);
196 SelfIntersectingWay test = new SelfIntersectingWay();
197 test.visit(w);
198 Assert.assertEquals(1, test.getErrors().size());
199 Assert.assertTrue(test.getErrors().iterator().next().getHighlighted().contains(nodes.get(0)));
200 }
201
202 /**
203 * Closed way contains a spike.
204 * This is considered to be an error.
205 */
206 @Test
207 public void testSpikeInClosedWay() {
208 List<Node> nodes = createNodes();
209
210 Way w = (Way) OsmUtils.createPrimitive("way ");
211 List<Node> wayNodes = new ArrayList<>();
212 wayNodes.add(nodes.get(0));
213 wayNodes.add(nodes.get(1));
214 wayNodes.add(nodes.get(2));
215 wayNodes.add(nodes.get(3));
216 wayNodes.add(nodes.get(2));
217 wayNodes.add(nodes.get(0));
218 w.setNodes(wayNodes);
219 SelfIntersectingWay test = new SelfIntersectingWay();
220 test.visit(w);
221 Assert.assertEquals(1, test.getErrors().size());
222 Assert.assertTrue(test.getErrors().iterator().next().getHighlighted().contains(nodes.get(2)));
223 }
224
225 /**
226 * Closed way with barbell shape (a-b-c-a-d-e-f-d).
227 * This is considered to be an error.
228 */
229 @Test
230 public void testClosedWayBarbell() {
231 List<Node> nodes = createNodes();
232
233 Way w = (Way) OsmUtils.createPrimitive("way ");
234 List<Node> wayNodes = new ArrayList<>();
235 wayNodes.add(nodes.get(0));
236 wayNodes.add(nodes.get(1));
237 wayNodes.add(nodes.get(2));
238 wayNodes.add(nodes.get(0));
239 wayNodes.add(nodes.get(3));
240 wayNodes.add(nodes.get(4));
241 wayNodes.add(nodes.get(5));
242 wayNodes.add(nodes.get(3));
243 w.setNodes(wayNodes);
244 SelfIntersectingWay test = new SelfIntersectingWay();
245 test.visit(w);
246 Assert.assertEquals(1, test.getErrors().size());
247 Assert.assertTrue(test.getErrors().iterator().next().getHighlighted().contains(nodes.get(3)));
248 }
249
250}
Note: See TracBrowser for help on using the repository browser.