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

Last change on this file since 8926 was 8857, checked in by Don-vip, 9 years ago

improve/cleanup unit tests

  • Property svn:eol-style set to native
File size: 7.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.osm;
3
4import static org.junit.Assert.assertEquals;
5import static org.junit.Assert.assertTrue;
6import static org.junit.Assert.fail;
7
8import java.util.List;
9
10import org.junit.BeforeClass;
11import org.junit.Test;
12import org.openstreetmap.josm.JOSMFixture;
13import org.openstreetmap.josm.actions.upload.CyclicUploadDependencyException;
14import org.openstreetmap.josm.data.APIDataSet;
15
16/**
17 * Unit tests for class {@link APIDataSet}.
18 */
19public class APIDataSetTest {
20
21 /**
22 * Setup test.
23 */
24 @BeforeClass
25 public static void init() {
26 JOSMFixture.createUnitTestFixture().init();
27 }
28
29 @Test
30 public void oneNewRelationOnly() {
31 Relation r = new Relation();
32 r.put("name", "r1");
33 DataSet ds = new DataSet();
34 ds.addPrimitive(r);
35
36 APIDataSet apiDataSet = new APIDataSet();
37 apiDataSet.init(ds);
38 try {
39 apiDataSet.adjustRelationUploadOrder();
40 } catch (CyclicUploadDependencyException e) {
41 fail("unexpected exception:" + e);
42 }
43 List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
44
45 assertEquals(1, toAdd.size());
46 assertEquals(r, toAdd.get(0));
47 }
48
49 @Test
50 public void newParentChildPair() {
51 DataSet ds = new DataSet();
52 Relation r1 = new Relation();
53 ds.addPrimitive(r1);
54 r1.put("name", "r1");
55
56 Relation r2 = new Relation();
57 ds.addPrimitive(r2);
58 r2.put("name", "r2");
59
60 r1.addMember(new RelationMember("", r2));
61
62 APIDataSet apiDataSet = new APIDataSet();
63 apiDataSet.init(ds);
64 try {
65 apiDataSet.adjustRelationUploadOrder();
66 } catch (CyclicUploadDependencyException e) {
67 fail("unexpected exception:" + e);
68 }
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 oneExistingAndThreNewInAChain() {
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 try {
103 apiDataSet.adjustRelationUploadOrder();
104 } catch (CyclicUploadDependencyException e) {
105 fail("unexpected exception:" + e);
106 }
107 List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
108
109 assertEquals(3, toAdd.size());
110 assertEquals(r3, toAdd.get(0));
111 assertEquals(r2, toAdd.get(1));
112 assertEquals(r1, toAdd.get(2));
113
114 List<OsmPrimitive> toUpdate = apiDataSet.getPrimitivesToUpdate();
115 assertEquals(1, toUpdate.size());
116 assertEquals(r4, toUpdate.get(0));
117 }
118
119 @Test
120 public void oneParentTwoNewChildren() {
121 DataSet ds = new DataSet();
122 Relation r1 = new Relation();
123 ds.addPrimitive(r1);
124 r1.put("name", "r1");
125
126 Relation r2 = new Relation();
127 ds.addPrimitive(r2);
128 r2.put("name", "r2");
129
130 Relation r3 = new Relation();
131 ds.addPrimitive(r3);
132 r3.put("name", "r3");
133
134 r1.addMember(new RelationMember("", r2));
135 r1.addMember(new RelationMember("", r3));
136
137
138 APIDataSet apiDataSet = new APIDataSet();
139 apiDataSet.init(ds);
140 try {
141 apiDataSet.adjustRelationUploadOrder();
142 } catch (CyclicUploadDependencyException e) {
143 fail("unexpected exception:" + e);
144 }
145 List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
146
147 assertEquals(3, toAdd.size());
148 assertTrue(toAdd.indexOf(r2) < toAdd.indexOf(r1));
149 assertTrue(toAdd.indexOf(r3) < toAdd.indexOf(r1));
150 }
151
152 @Test // for ticket #9624
153 public void deleteOneParentTwoNewChildren() {
154 DataSet ds = new DataSet();
155 Relation r1 = new Relation(1);
156 ds.addPrimitive(r1);
157 r1.put("name", "r1");
158
159 Relation r2 = new Relation(2);
160 ds.addPrimitive(r2);
161 r2.put("name", "r2");
162
163 Relation r3 = new Relation(3);
164 ds.addPrimitive(r3);
165 r3.put("name", "r3");
166
167 Relation r4 = new Relation(4);
168 ds.addPrimitive(r4);
169 r4.put("name", "unrelated");
170
171
172 r1.addMember(new RelationMember("", r2));
173 r1.addMember(new RelationMember("", r3));
174
175 r1.setDeleted(true);
176 r2.setDeleted(true);
177 r3.setDeleted(true);
178 r4.setDeleted(true);
179
180
181 APIDataSet apiDataSet = new APIDataSet();
182 // add r1 first to test functionality of APIDataSet#adjustRelationUploadOrder()
183 apiDataSet.getPrimitivesToDelete().add(r1);
184 apiDataSet.getPrimitivesToDelete().add(r2);
185 apiDataSet.getPrimitivesToDelete().add(r3);
186 apiDataSet.getPrimitivesToDelete().add(r4);
187 try {
188 apiDataSet.adjustRelationUploadOrder();
189 } catch (CyclicUploadDependencyException e) {
190 fail("unexpected exception:" + e);
191 }
192 List<OsmPrimitive> toDelete = apiDataSet.getPrimitivesToDelete();
193
194 assertEquals(4, toDelete.size());
195 assertTrue(toDelete.indexOf(r2) < toDelete.indexOf(r1));
196 assertTrue(toDelete.indexOf(r3) < toDelete.indexOf(r1));
197 }
198
199 @Test // for ticket #9656
200 public void deleteWay() {
201 DataSet ds = new DataSet();
202 final Way way = new Way(1, 2);
203 way.put("highway", "unclassified");
204 ds.addPrimitive(way);
205
206 final Node n1 = new Node(2);
207 ds.addPrimitive(n1);
208 way.addNode(n1);
209
210 final Node n2 = new Node(3);
211 ds.addPrimitive(n2);
212 way.addNode(n2);
213
214 Relation r1 = new Relation(4, 2);
215 ds.addPrimitive(r1);
216 r1.put("name", "r1");
217 r1.addMember(new RelationMember("foo", way));
218
219
220 r1.setDeleted(true);
221 way.setDeleted(true);
222 n1.setDeleted(true);
223 n2.setDeleted(true);
224
225 APIDataSet apiDataSet = new APIDataSet();
226 apiDataSet.init(ds);
227 try {
228 apiDataSet.adjustRelationUploadOrder();
229 } catch (CyclicUploadDependencyException e) {
230 fail("unexpected exception:" + e);
231 }
232 List<OsmPrimitive> toDelete = apiDataSet.getPrimitivesToDelete();
233
234 assertEquals(4, toDelete.size());
235 assertTrue(toDelete.indexOf(way) < toDelete.indexOf(n1));
236 assertTrue(toDelete.indexOf(way) < toDelete.indexOf(n2));
237 assertTrue(toDelete.indexOf(r1) < toDelete.indexOf(way));
238 }
239
240 @Test
241 public void oneCycle() {
242 DataSet ds = new DataSet();
243 Relation r1 = new Relation();
244 ds.addPrimitive(r1);
245 r1.put("name", "r1");
246
247 Relation r2 = new Relation();
248 ds.addPrimitive(r2);
249 r2.put("name", "r2");
250
251 Relation r3 = new Relation();
252 ds.addPrimitive(r3);
253 r3.put("name", "r3");
254
255 r1.addMember(new RelationMember("", r2));
256 r2.addMember(new RelationMember("", r3));
257 r3.addMember(new RelationMember("", r1));
258
259 APIDataSet apiDataSet = new APIDataSet();
260 apiDataSet.init(ds);
261 try {
262 apiDataSet.adjustRelationUploadOrder();
263 fail("expected cyclic upload dependency exception not thrown");
264 } catch (CyclicUploadDependencyException e) {
265 System.out.println(e);
266 }
267 }
268}
Note: See TracBrowser for help on using the repository browser.