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

Last change on this file since 13079 was 13020, checked in by bastiK, 7 years ago

see #15374 - update unit test

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