source: josm/trunk/test/unit/org/openstreetmap/josm/data/APIDataSetTest.java

Last change on this file was 18853, checked in by taylor.smock, 7 months ago

See #16567: Update to JUnit 5

This removes new JOSMTestRules() with no additional setup and most
JOSMFixture calls.

Removing the bare JOSMTestRules speeds up the test suite since there are two
fewer System.gc() calls per test.

  • Property svn:eol-style set to native
File size: 7.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data;
3
4import static org.junit.jupiter.api.Assertions.assertEquals;
5import static org.junit.jupiter.api.Assertions.assertFalse;
6import static org.junit.jupiter.api.Assertions.assertThrows;
7import static org.junit.jupiter.api.Assertions.assertTrue;
8
9import java.util.List;
10
11import org.junit.jupiter.api.Test;
12import org.openstreetmap.josm.data.conflict.ConflictCollection;
13import org.openstreetmap.josm.data.osm.CyclicUploadDependencyException;
14import org.openstreetmap.josm.data.osm.DataSet;
15import org.openstreetmap.josm.data.osm.Node;
16import org.openstreetmap.josm.data.osm.OsmPrimitive;
17import org.openstreetmap.josm.data.osm.Relation;
18import org.openstreetmap.josm.data.osm.RelationMember;
19import org.openstreetmap.josm.data.osm.Way;
20
21/**
22 * Unit tests for class {@link APIDataSet}.
23 */
24class APIDataSetTest {
25 @Test
26 void testOneNewRelationOnly() throws CyclicUploadDependencyException {
27 Relation r = new Relation();
28 r.put("name", "r1");
29 DataSet ds = new DataSet();
30 ds.addPrimitive(r);
31
32 APIDataSet apiDataSet = new APIDataSet();
33 apiDataSet.init(ds);
34 apiDataSet.adjustRelationUploadOrder();
35 List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
36
37 assertEquals(1, toAdd.size());
38 assertEquals(r, toAdd.get(0));
39 }
40
41 @Test
42 void testNewParentChildPair() throws CyclicUploadDependencyException {
43 DataSet ds = new DataSet();
44 Relation r1 = new Relation();
45 ds.addPrimitive(r1);
46 r1.put("name", "r1");
47
48 Relation r2 = new Relation();
49 ds.addPrimitive(r2);
50 r2.put("name", "r2");
51
52 r1.addMember(new RelationMember("", r2));
53
54 APIDataSet apiDataSet = new APIDataSet();
55 apiDataSet.init(ds);
56 apiDataSet.adjustRelationUploadOrder();
57 List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
58
59 assertEquals(2, toAdd.size());
60 assertEquals(r2, toAdd.get(0)); // child first
61 assertEquals(r1, toAdd.get(1)); // ... then the parent
62 }
63
64 @Test
65 void testOneExistingAndThreNewInAChain() throws CyclicUploadDependencyException {
66 DataSet ds = new DataSet();
67
68 Relation r1 = new Relation();
69 ds.addPrimitive(r1);
70 r1.put("name", "r1");
71
72 Relation r2 = new Relation();
73 ds.addPrimitive(r2);
74 r2.put("name", "r2");
75
76 Relation r3 = new Relation();
77 ds.addPrimitive(r3);
78 r3.put("name", "r3");
79
80 Relation r4 = new Relation(1, 1);
81 ds.addPrimitive(r4);
82 r4.put("name", "r4");
83 r4.setModified(true);
84
85 r1.addMember(new RelationMember("", r2));
86 r2.addMember(new RelationMember("", r3));
87
88 APIDataSet apiDataSet = new APIDataSet();
89 apiDataSet.init(ds);
90 apiDataSet.adjustRelationUploadOrder();
91 List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
92
93 assertEquals(3, toAdd.size());
94 assertEquals(r3, toAdd.get(0));
95 assertEquals(r2, toAdd.get(1));
96 assertEquals(r1, toAdd.get(2));
97
98 List<OsmPrimitive> toUpdate = apiDataSet.getPrimitivesToUpdate();
99 assertEquals(1, toUpdate.size());
100 assertEquals(r4, toUpdate.get(0));
101
102 final ConflictCollection cc4 = new ConflictCollection();
103 cc4.add(r4, r4);
104 assertTrue(apiDataSet.participatesInConflict(cc4));
105 final ConflictCollection cc1 = new ConflictCollection();
106 cc1.add(r1, r1);
107 assertFalse(apiDataSet.participatesInConflict(cc1));
108 }
109
110 @Test
111 void testOneParentTwoNewChildren() throws CyclicUploadDependencyException {
112 DataSet ds = new DataSet();
113 Relation r1 = new Relation();
114 ds.addPrimitive(r1);
115 r1.put("name", "r1");
116
117 Relation r2 = new Relation();
118 ds.addPrimitive(r2);
119 r2.put("name", "r2");
120
121 Relation r3 = new Relation();
122 ds.addPrimitive(r3);
123 r3.put("name", "r3");
124
125 r1.addMember(new RelationMember("", r2));
126 r1.addMember(new RelationMember("", r3));
127
128
129 APIDataSet apiDataSet = new APIDataSet();
130 apiDataSet.init(ds);
131 apiDataSet.adjustRelationUploadOrder();
132 List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
133
134 assertEquals(3, toAdd.size());
135 assertTrue(toAdd.indexOf(r2) < toAdd.indexOf(r1));
136 assertTrue(toAdd.indexOf(r3) < toAdd.indexOf(r1));
137 }
138
139 @Test // for ticket #9624
140 void testDeleteOneParentTwoNewChildren() throws CyclicUploadDependencyException {
141 DataSet ds = new DataSet();
142 Relation r1 = new Relation(1);
143 ds.addPrimitive(r1);
144 r1.put("name", "r1");
145
146 Relation r2 = new Relation(2);
147 ds.addPrimitive(r2);
148 r2.put("name", "r2");
149
150 Relation r3 = new Relation(3);
151 ds.addPrimitive(r3);
152 r3.put("name", "r3");
153
154 Relation r4 = new Relation(4);
155 ds.addPrimitive(r4);
156 r4.put("name", "unrelated");
157
158
159 r1.addMember(new RelationMember("", r2));
160 r1.addMember(new RelationMember("", r3));
161
162 r1.setDeleted(true);
163 r2.setDeleted(true);
164 r3.setDeleted(true);
165 r4.setDeleted(true);
166
167
168 APIDataSet apiDataSet = new APIDataSet();
169 apiDataSet.getPrimitivesToDelete().add(r4);
170 apiDataSet.getPrimitivesToDelete().add(r3);
171 apiDataSet.getPrimitivesToDelete().add(r2);
172 // add r1 last to test functionality of APIDataSet#adjustRelationUploadOrder()
173 apiDataSet.getPrimitivesToDelete().add(r1);
174 apiDataSet.adjustRelationUploadOrder();
175 List<OsmPrimitive> toDelete = apiDataSet.getPrimitivesToDelete();
176
177 assertEquals(4, toDelete.size());
178 assertTrue(toDelete.indexOf(r1) < toDelete.indexOf(r2));
179 assertTrue(toDelete.indexOf(r1) < toDelete.indexOf(r3));
180 }
181
182 @Test // for ticket #9656
183 void testDeleteWay() throws CyclicUploadDependencyException {
184 DataSet ds = new DataSet();
185 final Way way = new Way(1, 2);
186 way.put("highway", "unclassified");
187 ds.addPrimitive(way);
188
189 final Node n1 = new Node(2);
190 ds.addPrimitive(n1);
191 way.addNode(n1);
192
193 final Node n2 = new Node(3);
194 ds.addPrimitive(n2);
195 way.addNode(n2);
196
197 Relation r1 = new Relation(4, 2);
198 ds.addPrimitive(r1);
199 r1.put("name", "r1");
200 r1.addMember(new RelationMember("foo", way));
201
202
203 r1.setDeleted(true);
204 way.setDeleted(true);
205 n1.setDeleted(true);
206 n2.setDeleted(true);
207
208 APIDataSet apiDataSet = new APIDataSet();
209 apiDataSet.init(ds);
210 apiDataSet.adjustRelationUploadOrder();
211 List<OsmPrimitive> toDelete = apiDataSet.getPrimitivesToDelete();
212
213 assertEquals(4, toDelete.size());
214 assertTrue(toDelete.indexOf(way) < toDelete.indexOf(n1));
215 assertTrue(toDelete.indexOf(way) < toDelete.indexOf(n2));
216 assertTrue(toDelete.indexOf(r1) < toDelete.indexOf(way));
217 }
218
219 @Test
220 void testOneCycle() {
221 DataSet ds = new DataSet();
222 Relation r1 = new Relation();
223 ds.addPrimitive(r1);
224 r1.put("name", "r1");
225
226 Relation r2 = new Relation();
227 ds.addPrimitive(r2);
228 r2.put("name", "r2");
229
230 Relation r3 = new Relation();
231 ds.addPrimitive(r3);
232 r3.put("name", "r3");
233
234 r1.addMember(new RelationMember("", r2));
235 r2.addMember(new RelationMember("", r3));
236 r3.addMember(new RelationMember("", r1));
237
238 APIDataSet apiDataSet = new APIDataSet();
239 apiDataSet.init(ds);
240 assertThrows(CyclicUploadDependencyException.class, apiDataSet::adjustRelationUploadOrder);
241 }
242}
Note: See TracBrowser for help on using the repository browser.