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

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

sonar - squid:S3658 - Unit tests should throw exceptions

  • Property svn:eol-style set to native
File size: 7.3 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 testOneNewRelationOnly() throws CyclicUploadDependencyException {
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 apiDataSet.adjustRelationUploadOrder();
39 List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
40
41 assertEquals(1, toAdd.size());
42 assertEquals(r, toAdd.get(0));
43 }
44
45 @Test
46 public void testNewParentChildPair() throws CyclicUploadDependencyException {
47 DataSet ds = new DataSet();
48 Relation r1 = new Relation();
49 ds.addPrimitive(r1);
50 r1.put("name", "r1");
51
52 Relation r2 = new Relation();
53 ds.addPrimitive(r2);
54 r2.put("name", "r2");
55
56 r1.addMember(new RelationMember("", r2));
57
58 APIDataSet apiDataSet = new APIDataSet();
59 apiDataSet.init(ds);
60 apiDataSet.adjustRelationUploadOrder();
61 List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
62
63 assertEquals(2, toAdd.size());
64 assertEquals(r2, toAdd.get(0)); // child first
65 assertEquals(r1, toAdd.get(1)); // ... then the parent
66 }
67
68 @Test
69 public void testOneExistingAndThreNewInAChain() throws CyclicUploadDependencyException {
70 DataSet ds = new DataSet();
71
72 Relation r1 = new Relation();
73 ds.addPrimitive(r1);
74 r1.put("name", "r1");
75
76 Relation r2 = new Relation();
77 ds.addPrimitive(r2);
78 r2.put("name", "r2");
79
80 Relation r3 = new Relation();
81 ds.addPrimitive(r3);
82 r3.put("name", "r3");
83
84 Relation r4 = new Relation(1, 1);
85 ds.addPrimitive(r4);
86 r4.put("name", "r4");
87 r4.setModified(true);
88
89 r1.addMember(new RelationMember("", r2));
90 r2.addMember(new RelationMember("", r3));
91
92 APIDataSet apiDataSet = new APIDataSet();
93 apiDataSet.init(ds);
94 apiDataSet.adjustRelationUploadOrder();
95 List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
96
97 assertEquals(3, toAdd.size());
98 assertEquals(r3, toAdd.get(0));
99 assertEquals(r2, toAdd.get(1));
100 assertEquals(r1, toAdd.get(2));
101
102 List<OsmPrimitive> toUpdate = apiDataSet.getPrimitivesToUpdate();
103 assertEquals(1, toUpdate.size());
104 assertEquals(r4, toUpdate.get(0));
105 }
106
107 @Test
108 public void testOneParentTwoNewChildren() throws CyclicUploadDependencyException {
109 DataSet ds = new DataSet();
110 Relation r1 = new Relation();
111 ds.addPrimitive(r1);
112 r1.put("name", "r1");
113
114 Relation r2 = new Relation();
115 ds.addPrimitive(r2);
116 r2.put("name", "r2");
117
118 Relation r3 = new Relation();
119 ds.addPrimitive(r3);
120 r3.put("name", "r3");
121
122 r1.addMember(new RelationMember("", r2));
123 r1.addMember(new RelationMember("", r3));
124
125
126 APIDataSet apiDataSet = new APIDataSet();
127 apiDataSet.init(ds);
128 apiDataSet.adjustRelationUploadOrder();
129 List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
130
131 assertEquals(3, toAdd.size());
132 assertTrue(toAdd.indexOf(r2) < toAdd.indexOf(r1));
133 assertTrue(toAdd.indexOf(r3) < toAdd.indexOf(r1));
134 }
135
136 @Test // for ticket #9624
137 public void testDeleteOneParentTwoNewChildren() throws CyclicUploadDependencyException {
138 DataSet ds = new DataSet();
139 Relation r1 = new Relation(1);
140 ds.addPrimitive(r1);
141 r1.put("name", "r1");
142
143 Relation r2 = new Relation(2);
144 ds.addPrimitive(r2);
145 r2.put("name", "r2");
146
147 Relation r3 = new Relation(3);
148 ds.addPrimitive(r3);
149 r3.put("name", "r3");
150
151 Relation r4 = new Relation(4);
152 ds.addPrimitive(r4);
153 r4.put("name", "unrelated");
154
155
156 r1.addMember(new RelationMember("", r2));
157 r1.addMember(new RelationMember("", r3));
158
159 r1.setDeleted(true);
160 r2.setDeleted(true);
161 r3.setDeleted(true);
162 r4.setDeleted(true);
163
164
165 APIDataSet apiDataSet = new APIDataSet();
166 // add r1 first to test functionality of APIDataSet#adjustRelationUploadOrder()
167 apiDataSet.getPrimitivesToDelete().add(r1);
168 apiDataSet.getPrimitivesToDelete().add(r2);
169 apiDataSet.getPrimitivesToDelete().add(r3);
170 apiDataSet.getPrimitivesToDelete().add(r4);
171 apiDataSet.adjustRelationUploadOrder();
172 List<OsmPrimitive> toDelete = apiDataSet.getPrimitivesToDelete();
173
174 assertEquals(4, toDelete.size());
175 assertTrue(toDelete.indexOf(r2) < toDelete.indexOf(r1));
176 assertTrue(toDelete.indexOf(r3) < toDelete.indexOf(r1));
177 }
178
179 @Test // for ticket #9656
180 public void testDeleteWay() throws CyclicUploadDependencyException {
181 DataSet ds = new DataSet();
182 final Way way = new Way(1, 2);
183 way.put("highway", "unclassified");
184 ds.addPrimitive(way);
185
186 final Node n1 = new Node(2);
187 ds.addPrimitive(n1);
188 way.addNode(n1);
189
190 final Node n2 = new Node(3);
191 ds.addPrimitive(n2);
192 way.addNode(n2);
193
194 Relation r1 = new Relation(4, 2);
195 ds.addPrimitive(r1);
196 r1.put("name", "r1");
197 r1.addMember(new RelationMember("foo", way));
198
199
200 r1.setDeleted(true);
201 way.setDeleted(true);
202 n1.setDeleted(true);
203 n2.setDeleted(true);
204
205 APIDataSet apiDataSet = new APIDataSet();
206 apiDataSet.init(ds);
207 apiDataSet.adjustRelationUploadOrder();
208 List<OsmPrimitive> toDelete = apiDataSet.getPrimitivesToDelete();
209
210 assertEquals(4, toDelete.size());
211 assertTrue(toDelete.indexOf(way) < toDelete.indexOf(n1));
212 assertTrue(toDelete.indexOf(way) < toDelete.indexOf(n2));
213 assertTrue(toDelete.indexOf(r1) < toDelete.indexOf(way));
214 }
215
216 @Test
217 public void testOneCycle() {
218 DataSet ds = new DataSet();
219 Relation r1 = new Relation();
220 ds.addPrimitive(r1);
221 r1.put("name", "r1");
222
223 Relation r2 = new Relation();
224 ds.addPrimitive(r2);
225 r2.put("name", "r2");
226
227 Relation r3 = new Relation();
228 ds.addPrimitive(r3);
229 r3.put("name", "r3");
230
231 r1.addMember(new RelationMember("", r2));
232 r2.addMember(new RelationMember("", r3));
233 r3.addMember(new RelationMember("", r1));
234
235 APIDataSet apiDataSet = new APIDataSet();
236 apiDataSet.init(ds);
237 try {
238 apiDataSet.adjustRelationUploadOrder();
239 fail("expected cyclic upload dependency exception not thrown");
240 } catch (CyclicUploadDependencyException e) {
241 System.out.println(e);
242 }
243 }
244}
Note: See TracBrowser for help on using the repository browser.