source: josm/trunk/test/unit/org/openstreetmap/josm/command/ChangeNodesCommandTest.java@ 13079

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

see #15560 - EqualsVerifier does not work with newer Java versions -> disable tests automatically in this case
Workaround to https://github.com/jqno/equalsverifier/issues/177 / https://github.com/raphw/byte-buddy/issues/370
Inspired by https://issues.apache.org/jira/browse/SOLR-11606

File size: 4.9 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.assertTrue;
8
9import java.util.ArrayList;
10import java.util.Arrays;
11import java.util.Collections;
12import java.util.List;
13
14import org.junit.Before;
15import org.junit.Rule;
16import org.junit.Test;
17import org.openstreetmap.josm.TestUtils;
18import org.openstreetmap.josm.command.CommandTest.CommandTestData;
19import org.openstreetmap.josm.data.coor.LatLon;
20import org.openstreetmap.josm.data.osm.DataSet;
21import org.openstreetmap.josm.data.osm.Node;
22import org.openstreetmap.josm.data.osm.OsmPrimitive;
23import org.openstreetmap.josm.data.osm.User;
24import org.openstreetmap.josm.data.osm.Way;
25import org.openstreetmap.josm.gui.layer.OsmDataLayer;
26import org.openstreetmap.josm.testutils.JOSMTestRules;
27
28import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
29import nl.jqno.equalsverifier.EqualsVerifier;
30import nl.jqno.equalsverifier.Warning;
31
32/**
33 * Unit tests of {@link ChangeNodesCommand} class.
34 */
35public class ChangeNodesCommandTest {
36
37 /**
38 * We need prefs for nodes.
39 */
40 @Rule
41 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
42 public JOSMTestRules test = new JOSMTestRules().preferences().i18n();
43 private CommandTestData testData;
44
45 /**
46 * Set up the test data.
47 */
48 @Before
49 public void createTestData() {
50 testData = new CommandTestData();
51 }
52
53 /**
54 * Test that empty ways are prevented.
55 */
56 @Test(expected = IllegalArgumentException.class)
57 public void testPreventEmptyWays() {
58 new ChangeNodesCommand(testData.existingWay, Collections.<Node>emptyList());
59 }
60
61 /**
62 * Test {@link ChangeNodesCommand#executeCommand()}
63 */
64 @Test
65 public void testChange() {
66 List<Node> newNodes = testData.existingWay.getNodes();
67 Collections.reverse(newNodes);
68
69 new ChangeNodesCommand(testData.existingWay, newNodes).executeCommand();
70 assertArrayEquals(newNodes.toArray(), testData.existingWay.getNodes().toArray());
71
72 // tags are unchanged
73 assertEquals("existing", testData.existingWay.get("existing"));
74 assertTrue(testData.existingWay.isModified());
75 }
76
77 /**
78 * Test {@link ChangeCommand#undoCommand()}
79 */
80 @Test
81 public void testUndo() {
82 List<Node> newNodes = testData.existingWay.getNodes();
83 Collections.reverse(newNodes);
84
85 ChangeNodesCommand command = new ChangeNodesCommand(testData.existingWay, newNodes);
86 command.executeCommand();
87 command.undoCommand();
88 Collections.reverse(newNodes);
89 assertArrayEquals(newNodes.toArray(), testData.existingWay.getNodes().toArray());
90 assertFalse(testData.existingWay.isModified());
91 }
92
93 /**
94 * Tests {@link ChangeNodesCommand#fillModifiedData(java.util.Collection, java.util.Collection, java.util.Collection)}
95 */
96 @Test
97 public void testFillModifiedData() {
98 ArrayList<OsmPrimitive> modified = new ArrayList<>();
99 ArrayList<OsmPrimitive> deleted = new ArrayList<>();
100 ArrayList<OsmPrimitive> added = new ArrayList<>();
101 new ChangeNodesCommand(testData.existingWay, Arrays.asList(testData.existingNode)).fillModifiedData(modified,
102 deleted, added);
103 assertArrayEquals(new Object[] {testData.existingWay}, modified.toArray());
104 assertArrayEquals(new Object[] {}, deleted.toArray());
105 assertArrayEquals(new Object[] {}, added.toArray());
106 }
107
108 /**
109 * Test {@link ChangeNodesCommand#getDescriptionText()}
110 */
111 @Test
112 public void testDescription() {
113 Node node = new Node(LatLon.ZERO);
114 node.put("name", "xy");
115 Way way = new Way();
116 way.addNode(node);
117 way.put("name", "xy");
118 DataSet ds = new DataSet(node, way);
119 assertTrue(
120 new ChangeNodesCommand(ds, way, Arrays.asList(node)).getDescriptionText().matches("Change nodes of.*xy.*"));
121 }
122
123 /**
124 * Unit test of methods {@link ChangeNodesCommand#equals} and {@link ChangeNodesCommand#hashCode}.
125 */
126 @Test
127 public void testEqualsContract() {
128 TestUtils.assumeWorkingEqualsVerifier();
129 EqualsVerifier.forClass(ChangeNodesCommand.class).usingGetClass()
130 .withPrefabValues(Way.class,
131 new Way(1), new Way(2))
132 .withPrefabValues(DataSet.class,
133 new DataSet(), new DataSet())
134 .withPrefabValues(User.class,
135 User.createOsmUser(1, "foo"), User.createOsmUser(2, "bar"))
136 .withPrefabValues(OsmDataLayer.class,
137 new OsmDataLayer(new DataSet(), "1", null), new OsmDataLayer(new DataSet(), "2", null))
138 .suppress(Warning.NONFINAL_FIELDS)
139 .verify();
140 }
141}
Note: See TracBrowser for help on using the repository browser.