source: josm/trunk/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java@ 17360

Last change on this file since 17360 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

  • Property svn:eol-style set to native
File size: 4.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.junit.jupiter.api.Assertions.assertSame;
5import static org.junit.jupiter.api.Assertions.assertTrue;
6
7import java.util.Arrays;
8
9import org.junit.Assert;
10import org.junit.jupiter.api.Test;
11import org.junit.jupiter.api.extension.RegisterExtension;
12import org.openstreetmap.josm.TestUtils;
13import org.openstreetmap.josm.data.coor.EastNorth;
14import org.openstreetmap.josm.data.coor.LatLon;
15import org.openstreetmap.josm.data.osm.DataSet;
16import org.openstreetmap.josm.data.osm.Node;
17import org.openstreetmap.josm.data.osm.Relation;
18import org.openstreetmap.josm.data.osm.RelationMember;
19import org.openstreetmap.josm.data.osm.Way;
20import org.openstreetmap.josm.testutils.JOSMTestRules;
21
22import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
23
24/**
25 * Unit tests for class {@link SplitWayAction}.
26 */
27final class SplitWayActionTest {
28
29 /**
30 * Setup test.
31 */
32 @RegisterExtension
33 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
34 public JOSMTestRules test = new JOSMTestRules().projection();
35 private final DataSet dataSet = new DataSet();
36
37 private Node addNode(int east, int north) {
38 final Node node = new Node(new EastNorth(east, north));
39 dataSet.addPrimitive(node);
40 return node;
41 }
42
43 /**
44 * Test case: When node is share by multiple ways, split selected way.
45 * see #11184
46 */
47 @Test
48 void testTicket11184() {
49 Node n1 = addNode(0, 0);
50 Node n2 = addNode(-1, 1);
51 Node n3 = addNode(1, 1);
52 Node n4 = addNode(-1, -1);
53 Node n5 = addNode(1, -1);
54 Node n6 = addNode(-1, 0);
55 Node n7 = addNode(1, 0);
56
57 Way w1 = new Way();
58 Node[] w1NodesArray = new Node[] {n6, n1, n7};
59 w1.setNodes(Arrays.asList(w1NodesArray));
60 Way w2 = new Way();
61 w2.setNodes(Arrays.asList(new Node[] {n1, n2, n3, n1, n4, n5, n1}));
62 dataSet.addPrimitive(w1);
63 dataSet.addPrimitive(w2);
64
65 dataSet.addSelected(n1);
66 dataSet.addSelected(w2);
67
68 SplitWayAction.runOn(dataSet);
69
70 // Ensures 3 ways.
71 assertSame(3, dataSet.getWays().size(), String.format("Found %d ways after split action instead of 3.", dataSet.getWays().size()));
72
73 // Ensures way w1 is unchanged.
74 assertTrue(dataSet.getWays().contains(w1), "Unselected ways disappear during split action.");
75 assertSame(3, w1.getNodesCount(), "Unselected way seems to have change during split action.");
76 for (int i = 0; i < 3; i++) {
77 assertSame(w1.getNode(i), w1NodesArray[i], "Node change in unselected way during split action.");
78 }
79 }
80
81 /**
82 * Test case: when a way is split with a turn restriction relation,
83 * the relation should not be broken.
84 * see #17810
85 */
86 @Test
87 void testTicket17810() {
88 DataSet dataSet = new DataSet();
89 Way from = TestUtils.newWay("highway=residential", new Node(new LatLon(0.0, 0.0)),
90 new Node(new LatLon(0.00033, 0.00033)), new Node(new LatLon(0.00066, 0.00066)),
91 new Node(new LatLon(0.001, 0.001)));
92 from.getNodes().forEach(dataSet::addPrimitive);
93 dataSet.addPrimitive(from);
94 Node via = from.lastNode();
95 Way to = TestUtils.newWay("highway=residential", new Node(new LatLon(0.002, 0.001)), via);
96 to.getNodes().forEach(node -> {
97 if (!dataSet.containsNode(node)) {
98 dataSet.addPrimitive(node);
99 }
100 });
101 dataSet.addPrimitive(to);
102 Relation restriction = TestUtils.newRelation("type=restriction restriction=no_left_turn",
103 new RelationMember("from", from), new RelationMember("to", to),
104 new RelationMember("via", via));
105 dataSet.addPrimitive(restriction);
106 dataSet.clearSelection();
107 dataSet.addSelected(from.getNode(2), from);
108 SplitWayAction.runOn(dataSet);
109 for (RelationMember member : restriction.getMembers()) {
110 if ("from".equals(member.getRole())) {
111 Assert.assertTrue(member.getWay().containsNode(via));
112 }
113 }
114 }
115
116 /**
117 * Test case: smart way selection
118 * see #18477
119 */
120 @Test
121 void testTicket18477() {
122 final Node n10 = addNode(1, 0);
123 final Node n21 = addNode(2, 1);
124 final Way highway = TestUtils.newWay("highway=residential",
125 addNode(0, 0), n10, n21, addNode(3, 1));
126 final Way bridge = TestUtils.newWay("man_made=bridge",
127 n10, addNode(2, 0), n21, addNode(1, 1), n10);
128 dataSet.addPrimitive(highway);
129 dataSet.addPrimitive(bridge);
130 dataSet.setSelected(n10, n21);
131 SplitWayAction.runOn(dataSet);
132 assertSame(4, dataSet.getWays().size(), String.format("Found %d ways after split action instead of 4.", dataSet.getWays().size()));
133 }
134}
Note: See TracBrowser for help on using the repository browser.