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

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

see #11924 - reduce double precision in unit tests to avoid tiny differences with JDK9

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