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

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

fix #21064 - Add JUnit 5 extension for preferences (patch by taylor.smock)

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