source: josm/trunk/test/unit/org/openstreetmap/josm/command/ChangePropertyKeyCommandTest.java@ 17275

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

see #16567 - upgrade almost all tests to JUnit 5, except those depending on WiremockRule

See https://github.com/tomakehurst/wiremock/issues/684

File size: 5.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.command;
3
4import static org.junit.jupiter.api.Assertions.assertEquals;
5import static org.junit.jupiter.api.Assertions.assertFalse;
6import static org.junit.jupiter.api.Assertions.assertNull;
7import static org.junit.jupiter.api.Assertions.assertTrue;
8
9import java.util.ArrayList;
10import java.util.Arrays;
11import java.util.Collection;
12
13import org.junit.jupiter.api.BeforeEach;
14import org.junit.jupiter.api.Test;
15import org.junit.jupiter.api.extension.RegisterExtension;
16import org.openstreetmap.josm.TestUtils;
17import org.openstreetmap.josm.command.CommandTest.CommandTestData;
18import org.openstreetmap.josm.data.osm.DataSet;
19import org.openstreetmap.josm.data.osm.Node;
20import org.openstreetmap.josm.data.osm.OsmPrimitive;
21import org.openstreetmap.josm.data.osm.User;
22import org.openstreetmap.josm.gui.layer.OsmDataLayer;
23import org.openstreetmap.josm.testutils.JOSMTestRules;
24
25import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
26import nl.jqno.equalsverifier.EqualsVerifier;
27import nl.jqno.equalsverifier.Warning;
28
29/**
30 * Unit tests of {@link ChangePropertyKeyCommand} class.
31 */
32class ChangePropertyKeyCommandTest {
33
34 /**
35 * We need prefs for nodes.
36 */
37 @RegisterExtension
38 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
39 public JOSMTestRules test = new JOSMTestRules().preferences().i18n();
40 private CommandTestData testData;
41
42 /**
43 * Set up the test data.
44 */
45 @BeforeEach
46 public void createTestData() {
47 testData = new CommandTestData();
48 }
49
50 /**
51 * Tests that a key is changed.
52 */
53 @Test
54 void testChangeKeySingle() {
55 assertTrue(new ChangePropertyKeyCommand(testData.existingNode, "existing", "newKey").executeCommand());
56
57 assertNull(testData.existingNode.get("existing"));
58 assertEquals("existing", testData.existingNode.get("newKey"));
59 assertTrue(testData.existingNode.isModified());
60 }
61
62 /**
63 * Tests that a key is changed.
64 */
65 @Test
66 void testChangeKey() {
67 assertTrue(new ChangePropertyKeyCommand(Arrays.asList(testData.existingNode, testData.existingWay), "existing",
68 "newKey").executeCommand());
69
70 assertNull(testData.existingNode.get("existing"));
71 assertEquals("existing", testData.existingNode.get("newKey"));
72 assertTrue(testData.existingNode.isModified());
73 assertNull(testData.existingWay.get("existing"));
74 assertEquals("existing", testData.existingWay.get("newKey"));
75 assertTrue(testData.existingWay.isModified());
76 }
77
78 /**
79 * Tests that nop operations are ignored.
80 */
81 @Test
82 void testChangeKeyIgnored() {
83 Node node1 = testData.createNode(15);
84 node1.removeAll();
85 Node node2 = testData.createNode(16);
86 Node node3 = testData.createNode(17);
87
88 assertTrue(new ChangePropertyKeyCommand(Arrays.asList(node1, node2), "nonexisting", "newKey").executeCommand());
89
90 assertFalse(node1.isModified());
91 assertFalse(node2.isModified());
92
93 assertTrue(new ChangePropertyKeyCommand(Arrays.asList(node1, node2), "existing", "newKey").executeCommand());
94
95 assertFalse(node1.isModified());
96 assertTrue(node2.isModified());
97
98 // removes existing
99 assertTrue(new ChangePropertyKeyCommand(Arrays.asList(node1, node3), "newKey", "existing").executeCommand());
100
101 assertFalse(node1.isModified());
102 assertTrue(node3.isModified());
103 assertNull(node3.get("newKey"));
104 assertNull(node3.get("existing"));
105 }
106
107 /**
108 * Test {@link ChangePropertyKeyCommand#getDescriptionText()}
109 */
110 @Test
111 void testDescription() {
112 Node node1 = testData.createNode(15);
113 node1.put("name", "xy");
114
115 assertTrue(new ChangePropertyKeyCommand(node1, "a", "b").getDescriptionText()
116 .matches("Replace \"a\" by \"b\" for.*xy.*"));
117 assertTrue(new ChangePropertyKeyCommand(Arrays.asList(node1, testData.existingNode), "a", "b")
118 .getDescriptionText().matches("Replace \"a\" by \"b\" for 2 objects"));
119 }
120
121 /**
122 * Test {@link ChangePropertyCommand#getChildren()}
123 */
124 @Test
125 void testChildren() {
126 Node node1 = testData.createNode(15);
127 Node node2 = testData.createNode(16);
128 node1.put("name", "node1");
129 node2.put("name", "node2");
130
131 ArrayList<Node> nodesToExpect = new ArrayList<>(Arrays.asList(node1, node2));
132
133 assertNull(new ChangePropertyKeyCommand(node1, "a", "b").getChildren());
134 Collection<PseudoCommand> children = new ChangePropertyKeyCommand(Arrays.asList(node1, node2), "a", "b").getChildren();
135 assertEquals(2, children.size());
136 for (PseudoCommand c : children) {
137 assertNull(c.getChildren());
138 Collection<? extends OsmPrimitive> part = c.getParticipatingPrimitives();
139 assertEquals(1, part.size());
140 OsmPrimitive node = part.iterator().next();
141 assertTrue(nodesToExpect.remove(node));
142
143 assertTrue(c.getDescriptionText().contains(node.getName()));
144 }
145 }
146
147 /**
148 * Unit test of methods {@link ChangePropertyKeyCommand#equals} and {@link ChangePropertyKeyCommand#hashCode}.
149 */
150 @Test
151 void testEqualsContract() {
152 TestUtils.assumeWorkingEqualsVerifier();
153 EqualsVerifier.forClass(ChangePropertyKeyCommand.class).usingGetClass()
154 .withPrefabValues(DataSet.class,
155 new DataSet(), new DataSet())
156 .withPrefabValues(User.class,
157 User.createOsmUser(1, "foo"), User.createOsmUser(2, "bar"))
158 .withPrefabValues(OsmDataLayer.class,
159 new OsmDataLayer(new DataSet(), "1", null), new OsmDataLayer(new DataSet(), "2", null))
160 .suppress(Warning.NONFINAL_FIELDS)
161 .verify();
162 }
163}
Note: See TracBrowser for help on using the repository browser.