source: josm/trunk/test/unit/org/openstreetmap/josm/command/AddPrimitivesCommandTest.java@ 10758

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

sonar - squid:S3578 - Test methods should comply with a naming convention

File size: 9.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.command;
3
4import static org.junit.Assert.assertArrayEquals;
5import static org.junit.Assert.assertEquals;
6import static org.junit.Assert.assertFalse;
7import static org.junit.Assert.assertSame;
8import static org.junit.Assert.assertTrue;
9
10import java.util.ArrayList;
11import java.util.Arrays;
12import java.util.HashSet;
13import java.util.List;
14
15import org.junit.Rule;
16import org.junit.Test;
17import org.openstreetmap.josm.Main;
18import org.openstreetmap.josm.data.coor.LatLon;
19import org.openstreetmap.josm.data.osm.DataSet;
20import org.openstreetmap.josm.data.osm.Node;
21import org.openstreetmap.josm.data.osm.NodeData;
22import org.openstreetmap.josm.data.osm.OsmPrimitive;
23import org.openstreetmap.josm.data.osm.PrimitiveData;
24import org.openstreetmap.josm.data.osm.User;
25import org.openstreetmap.josm.data.osm.Way;
26import org.openstreetmap.josm.data.osm.WayData;
27import org.openstreetmap.josm.gui.layer.OsmDataLayer;
28import org.openstreetmap.josm.testutils.JOSMTestRules;
29
30import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
31import nl.jqno.equalsverifier.EqualsVerifier;
32import nl.jqno.equalsverifier.Warning;
33
34/**
35 * Unit tests of {@link AddPrimitivesCommand} class.
36 */
37public class AddPrimitivesCommandTest {
38
39 /**
40 * We need prefs for nodes.
41 */
42 @Rule
43 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
44 public JOSMTestRules test = new JOSMTestRules().preferences().i18n();
45
46 /**
47 * Test if the add command is executed correctly and does not set the modified flag.
48 */
49 @Test
50 public void testAdd() {
51 OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
52 Main.getLayerManager().addLayer(layer1);
53
54 List<PrimitiveData> testData = createTestData();
55 assertTrue(new AddPrimitivesCommand(testData).executeCommand());
56
57 testContainsTestData(layer1);
58 assertEquals(3, layer1.data.getAllSelected().size());
59 }
60
61 /**
62 * Test if the add command sets the selection.
63 */
64 @Test
65 public void testAddSetSelection() {
66 OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
67 Main.getLayerManager().addLayer(layer1);
68
69 List<PrimitiveData> testData = createTestData();
70 assertTrue(new AddPrimitivesCommand(testData, testData.subList(2, 3)).executeCommand());
71
72 testContainsTestData(layer1);
73
74 assertEquals(1, layer1.data.getAllSelected().size());
75 assertEquals(1, layer1.data.getSelectedWays().size());
76 }
77
78 /**
79 * Tests if the add command respects the layer.
80 */
81 @Test
82 public void testAddToLayer() {
83 OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
84 OsmDataLayer layer2 = new OsmDataLayer(new DataSet(), "l1", null);
85
86 Main.getLayerManager().addLayer(layer1);
87 Main.getLayerManager().addLayer(layer2);
88
89 List<PrimitiveData> testData = createTestData();
90 assertTrue(new AddPrimitivesCommand(testData, testData.subList(2, 3), layer1).executeCommand());
91
92 testContainsTestData(layer1);
93 assertTrue(layer2.data.allPrimitives().isEmpty());
94
95 assertEquals(1, layer1.data.getAllSelected().size());
96 assertEquals(1, layer1.data.getSelectedWays().size());
97 }
98
99 /**
100 * Tests if the add command ignores existing data
101 */
102 @Test
103 public void testAddIgnoresExisting() {
104 OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
105 Main.getLayerManager().addLayer(layer1);
106
107 List<PrimitiveData> testData = createTestData();
108 assertTrue(new AddPrimitivesCommand(testData).executeCommand());
109 assertEquals(2, layer1.data.getNodes().size());
110 assertEquals(1, layer1.data.getWays().size());
111
112 testData.set(2, createTestNode(7));
113 assertTrue(new AddPrimitivesCommand(testData).executeCommand());
114
115 assertEquals(3, layer1.data.getNodes().size());
116 assertEquals(1, layer1.data.getWays().size());
117 }
118
119 /**
120 * Test {@link AddPrimitivesCommand#getDescriptionText()}
121 */
122 @Test
123 public void testDescription() {
124 OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
125 Main.getLayerManager().addLayer(layer1);
126
127 List<PrimitiveData> testData = createTestData();
128 NodeData data2 = createTestNode(7);
129
130 AddPrimitivesCommand command1 = new AddPrimitivesCommand(testData);
131 AddPrimitivesCommand command2 = new AddPrimitivesCommand(Arrays.<PrimitiveData>asList(data2));
132
133 assertEquals("Added 3 objects", command1.getDescriptionText());
134 assertEquals("Added 1 object", command2.getDescriptionText());
135
136 // Name must be the same after execution.
137 assertTrue(command1.executeCommand());
138 assertTrue(command2.executeCommand());
139
140 assertEquals("Added 3 objects", command1.getDescriptionText());
141 assertEquals("Added 1 object", command2.getDescriptionText());
142 }
143
144 /**
145 * Test {@link AddPrimitivesCommand#undoCommand()}
146 */
147 @Test
148 public void testUndo() {
149 OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
150 Main.getLayerManager().addLayer(layer1);
151
152 List<PrimitiveData> testData = createTestData();
153
154 AddPrimitivesCommand command = new AddPrimitivesCommand(testData);
155
156 assertTrue(command.executeCommand());
157
158 assertEquals(3, layer1.data.allPrimitives().size());
159 assertEquals(1, layer1.data.getWays().size());
160 Way way = layer1.data.getWays().iterator().next();
161
162 for (int i = 0; i < 2; i++) {
163 // Needs to work multiple times.
164 command.undoCommand();
165
166 assertEquals(0, layer1.data.allPrimitives().size());
167 assertEquals(0, layer1.data.getWays().size());
168
169 // redo
170 assertTrue(command.executeCommand());
171
172 assertEquals(3, layer1.data.allPrimitives().size());
173 assertEquals(1, layer1.data.getWays().size());
174 assertSame(way, layer1.data.getWays().iterator().next());
175 }
176 }
177
178 /**
179 * Test {@link AddCommand#getParticipatingPrimitives()}
180 */
181 @Test
182 public void testParticipatingPrimitives() {
183 OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "l1", null);
184 Main.getLayerManager().addLayer(layer1);
185
186 List<PrimitiveData> testData = createTestData();
187 AddPrimitivesCommand command = new AddPrimitivesCommand(testData);
188 assertTrue(command.executeCommand());
189
190 assertEquals(3, command.getParticipatingPrimitives().size());
191 HashSet<OsmPrimitive> should = new HashSet<>(layer1.data.allPrimitives());
192 assertEquals(should, new HashSet<>(command.getParticipatingPrimitives()));
193
194 // needs to be the same after undo
195 command.undoCommand();
196 assertEquals(should, new HashSet<>(command.getParticipatingPrimitives()));
197 }
198
199 /**
200 * Tests {@link AddPrimitivesCommand#fillModifiedData(java.util.Collection, java.util.Collection, java.util.Collection)}
201 */
202 @Test
203 public void testFillModifiedData() {
204 ArrayList<OsmPrimitive> modified = new ArrayList<>();
205 ArrayList<OsmPrimitive> deleted = new ArrayList<>();
206 ArrayList<OsmPrimitive> added = new ArrayList<>();
207
208 List<PrimitiveData> testData = createTestData();
209 new AddPrimitivesCommand(testData).fillModifiedData(modified, deleted, added);
210
211 assertArrayEquals(new Object[] {}, modified.toArray());
212 assertArrayEquals(new Object[] {}, deleted.toArray());
213 assertArrayEquals(new Object[] {}, added.toArray());
214 }
215
216 private void testContainsTestData(OsmDataLayer layer1) {
217 assertEquals(3, layer1.data.allPrimitives().size());
218 assertEquals(2, layer1.data.getNodes().size());
219 assertEquals(1, layer1.data.getWays().size());
220 assertEquals(0, layer1.data.allModifiedPrimitives().size());
221 for (OsmPrimitive n : layer1.data.allPrimitives()) {
222 assertEquals("test", n.get("test"));
223 assertFalse(n.isModified());
224 }
225
226 for (Node n : layer1.data.getNodes()) {
227 assertEquals(LatLon.ZERO, n.getCoor());
228 }
229
230 for (Way w : layer1.data.getWays()) {
231 assertEquals(2, w.getNodes().size());
232 assertEquals(5, w.getNode(0).getId());
233 assertEquals(6, w.getNode(1).getId());
234 }
235 }
236
237 private List<PrimitiveData> createTestData() {
238 NodeData node1 = createTestNode(5);
239 NodeData node2 = createTestNode(6);
240 WayData way = new WayData();
241 way.put("test", "test");
242 way.setNodes(Arrays.asList(node1.getId(), node2.getId()));
243 List<PrimitiveData> testData = Arrays.<PrimitiveData>asList(node1, node2, way);
244 return testData;
245 }
246
247 private NodeData createTestNode(int id) {
248 NodeData node1 = new NodeData();
249 node1.setCoor(LatLon.ZERO);
250 node1.put("test", "test");
251 node1.setId(id);
252 return node1;
253 }
254
255 /**
256 * Unit test of methods {@link AddPrimitivesCommand#equals} and {@link AddPrimitivesCommand#hashCode}.
257 */
258 @Test
259 public void testEqualsContract() {
260 EqualsVerifier.forClass(AddPrimitivesCommand.class).usingGetClass()
261 .withPrefabValues(DataSet.class,
262 new DataSet(), new DataSet())
263 .withPrefabValues(User.class,
264 User.createOsmUser(1, "foo"), User.createOsmUser(2, "bar"))
265 .withPrefabValues(OsmDataLayer.class,
266 new OsmDataLayer(new DataSet(), "1", null), new OsmDataLayer(new DataSet(), "2", null))
267 .suppress(Warning.NONFINAL_FIELDS)
268 .verify();
269 }
270}
Note: See TracBrowser for help on using the repository browser.