source: josm/trunk/test/unit/org/openstreetmap/josm/actions/OrthogonalizeActionTest.java@ 11241

Last change on this file since 11241 was 10945, checked in by Don-vip, 8 years ago

convert more unit tests to JOSMTestRules

  • Property svn:eol-style set to native
File size: 4.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.junit.Assert.assertEquals;
5
6import java.io.FileInputStream;
7import java.util.ArrayList;
8import java.util.List;
9
10import org.junit.Rule;
11import org.junit.Test;
12import org.openstreetmap.josm.TestUtils;
13import org.openstreetmap.josm.actions.search.SearchCompiler;
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.Way;
18import org.openstreetmap.josm.gui.layer.OsmDataLayer;
19import org.openstreetmap.josm.io.OsmReader;
20import org.openstreetmap.josm.testutils.JOSMTestRules;
21import org.openstreetmap.josm.tools.Geometry;
22import org.openstreetmap.josm.tools.SubclassFilteredCollection;
23
24import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
25
26/**
27 * Unit tests for class {@link OsmDataLayer}.
28 */
29public class OrthogonalizeActionTest {
30
31 /**
32 * Setup test.
33 */
34 @Rule
35 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
36 public JOSMTestRules test = new JOSMTestRules();
37
38 @Test(expected = OrthogonalizeAction.InvalidUserInputException.class)
39 public void testNoSelection() throws Exception {
40 performTest("nothing selected");
41 }
42
43 @Test
44 public void testClosedWay() throws Exception {
45 final DataSet ds = performTest("name=ClosedWay");
46 final Way way = ds.getSelectedWays().iterator().next();
47 assertEquals(new LatLon(8.5388082, 55.7297890), way.getNode(0).getCoor().getRoundedToOsmPrecision());
48 assertEquals(new LatLon(8.5396182, 55.7303980), way.getNode(1).getCoor().getRoundedToOsmPrecision());
49 assertEquals(new LatLon(8.5389933, 55.7312479), way.getNode(2).getCoor().getRoundedToOsmPrecision());
50 assertEquals(new LatLon(8.5381833, 55.7306389), way.getNode(3).getCoor().getRoundedToOsmPrecision());
51 verifyRectangleClockwise(way);
52 }
53
54 @Test
55 public void testTwoWaysFormingClosedWay() throws Exception {
56 performTest("name=TwoWaysFormingClosedWay");
57 }
58
59 @Test
60 public void testTwoRingsAtOnce() throws Exception {
61 performTest("name=ClosedWay OR name=TwoWaysFormingClosedWay");
62 }
63
64 @Test
65 public void testClosedWayWithReferenceNodes() throws Exception {
66 final DataSet ds = performTest("name=ClosedWayWithReferenceNodes");
67 final Way way = ds.getSelectedWays().iterator().next();
68 assertEquals(new LatLon(8.5347114, 55.7300067), way.getNode(0).getCoor().getRoundedToOsmPrecision());
69 assertEquals(new LatLon(8.5354772, 55.7306714), way.getNode(1).getCoor().getRoundedToOsmPrecision());
70 assertEquals(new LatLon(8.5348355, 55.7314274), way.getNode(2).getCoor().getRoundedToOsmPrecision());
71 assertEquals(new LatLon(8.5340697, 55.7307626), way.getNode(3).getCoor().getRoundedToOsmPrecision());
72 verifyRectangleClockwise(way);
73 }
74
75 @Test
76 public void testFourNodes() throws Exception {
77 final DataSet ds = performTest(
78 "name=NodeToRectify-01", "name=NodeToRectify-02", "name=NodeToRectify-03", "name=NodeToRectify-04");
79 final List<Node> nodes = new ArrayList<>(ds.getSelectedNodes());
80 assertEquals(new LatLon(8.5327354, 55.7298695), nodes.get(0).getCoor().getRoundedToOsmPrecision());
81 assertEquals(new LatLon(8.5335208, 55.7304333), nodes.get(1).getCoor().getRoundedToOsmPrecision());
82 assertEquals(new LatLon(8.5329143, 55.7312973), nodes.get(2).getCoor().getRoundedToOsmPrecision());
83 assertEquals(new LatLon(8.5320550, 55.7306805), nodes.get(3).getCoor().getRoundedToOsmPrecision());
84 }
85
86 DataSet performTest(String... search) throws Exception {
87 try (FileInputStream in = new FileInputStream(TestUtils.getTestDataRoot() + "orthogonalize.osm")) {
88 final DataSet ds = OsmReader.parseDataSet(in, null);
89 for (String s : search) {
90 ds.addSelected(SubclassFilteredCollection.filter(ds.allPrimitives(), SearchCompiler.compile(s)));
91 }
92 OrthogonalizeAction.orthogonalize(ds.getSelected()).executeCommand();
93 return ds;
94 }
95 }
96
97 void verifyRectangleClockwise(final Way way) {
98 for (int i = 1; i < way.getNodesCount() - 1; i++) {
99 assertEquals(-Math.PI / 2, Geometry.getCornerAngle(
100 way.getNode(i - 1).getEastNorth(), way.getNode(i).getEastNorth(), way.getNode(i + 1).getEastNorth()), 1e-6);
101 }
102 }
103}
Note: See TracBrowser for help on using the repository browser.