source: josm/trunk/test/unit/org/openstreetmap/josm/gui/MapViewStateTest.java

Last change on this file was 18870, checked in by taylor.smock, 6 months ago

See #16567: Update to JUnit 5

This converts most tests to use @Annotations. There are also some performance
improvements as it relates to tests.

  • Property svn:eol-style set to native
File size: 8.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui;
3
4import static org.junit.jupiter.api.Assertions.assertEquals;
5
6import java.awt.geom.AffineTransform;
7import java.awt.geom.Point2D;
8import java.util.Arrays;
9import java.util.function.Function;
10
11import org.junit.jupiter.api.BeforeEach;
12import org.junit.jupiter.api.Test;
13import org.openstreetmap.josm.data.coor.EastNorth;
14import org.openstreetmap.josm.data.coor.LatLon;
15import org.openstreetmap.josm.data.projection.ProjectionRegistry;
16import org.openstreetmap.josm.gui.MapViewState.MapViewPoint;
17import org.openstreetmap.josm.gui.MapViewState.MapViewRectangle;
18import org.openstreetmap.josm.testutils.annotations.Projection;
19
20/**
21 * Test {@link MapViewState}
22 * @author Michael Zangl
23 */
24@Projection
25class MapViewStateTest {
26
27 private static final int WIDTH = 301;
28 private static final int HEIGHT = 200;
29 private MapViewState state;
30
31 /**
32 * Create the default state.
33 */
34 @BeforeEach
35 public void setUp() {
36 state = MapViewState.createDefaultState(WIDTH, HEIGHT);
37 }
38
39 private void doTestGetCenter(Function<MapViewState, MapViewPoint> getter, Function<Integer, Double> divider) {
40 MapViewPoint center = getter.apply(state);
41 assertHasViewCoords(divider.apply(WIDTH), divider.apply(HEIGHT), center);
42
43 MapViewState newState = state.movedTo(center, new EastNorth(3, 4));
44
45 // state should not change, but new state should.
46 center = getter.apply(state);
47 assertHasViewCoords(divider.apply(WIDTH), divider.apply(HEIGHT), center);
48
49 center = getter.apply(newState);
50 assertEquals(3, center.getEastNorth().east(), 0.01, "east");
51 assertEquals(4, center.getEastNorth().north(), 0.01, "north");
52 }
53
54 /**
55 * Test {@link MapViewState#getCenter()} returns map view center.
56 */
57 @Test
58 void testGetCenter() {
59 doTestGetCenter(MapViewState::getCenter, t -> t / 2d);
60 }
61
62 private static void assertHasViewCoords(double x, double y, MapViewPoint center) {
63 assertEquals(x, center.getInViewX(), 0.01, "x");
64 assertEquals(y, center.getInViewY(), 0.01, "y");
65 assertEquals(x, center.getInView().getX(), 0.01, "x");
66 assertEquals(y, center.getInView().getY(), 0.01, "y");
67 }
68
69 /**
70 * Test {@link MapViewState#getForView(double, double)}
71 */
72 @Test
73 void testGetForView() {
74 MapViewPoint corner = state.getForView(0, 0);
75 assertHasViewCoords(0, 0, corner);
76
77 MapViewPoint middle = state.getForView(120, 130);
78 assertHasViewCoords(120, 130, middle);
79
80 MapViewPoint fraction = state.getForView(0.12, 0.7);
81 assertHasViewCoords(0.12, 0.7, fraction);
82
83 MapViewPoint negative = state.getForView(-17, -30);
84 assertHasViewCoords(-17, -30, negative);
85 }
86
87 /**
88 * Test {@link MapViewState#getViewWidth()} and {@link MapViewState#getViewHeight()}
89 */
90 @Test
91 void testGetViewSize() {
92 assertEquals(WIDTH, state.getViewWidth(), 0.01);
93 assertEquals(HEIGHT, state.getViewHeight(), 0.01);
94 }
95
96 /**
97 * Tests that all coordinate conversions for the point work.
98 */
99 @Test
100 void testPointConversions() {
101 MapViewPoint p = state.getForView(WIDTH / 2d, HEIGHT / 2d);
102 assertHasViewCoords(WIDTH / 2d, HEIGHT / 2d, p);
103
104 EastNorth eastnorth = p.getEastNorth();
105 LatLon shouldLatLon = ProjectionRegistry.getProjection().getWorldBoundsLatLon().getCenter();
106 EastNorth shouldEastNorth = ProjectionRegistry.getProjection().latlon2eastNorth(shouldLatLon);
107 assertEquals(shouldEastNorth.east(), eastnorth.east(), 0.01, "east");
108 assertEquals(shouldEastNorth.north(), eastnorth.north(), 0.01, "north");
109 MapViewPoint reversed = state.getPointFor(shouldEastNorth);
110 assertHasViewCoords(WIDTH / 2d, HEIGHT / 2d, reversed);
111
112 LatLon latlon = p.getLatLon();
113 assertEquals(shouldLatLon.lat(), latlon.lat(), 0.01, "lat");
114 assertEquals(shouldLatLon.lon(), latlon.lon(), 0.01, "lon");
115
116 MapViewPoint p2 = state.getPointFor(new EastNorth(2, 3));
117 assertEquals(2, p2.getEastNorth().east(), 0.01, "east");
118 assertEquals(3, p2.getEastNorth().north(), 0.01, "north");
119 }
120
121 /**
122 * Test {@link MapViewState#getAffineTransform()}
123 */
124 @Test
125 void testGetAffineTransform() {
126 for (EastNorth en : Arrays.asList(new EastNorth(100, 100), new EastNorth(0, 0), new EastNorth(300, 200),
127 new EastNorth(-1, -2.5))) {
128 MapViewPoint should = state.getPointFor(en);
129 AffineTransform transform = state.getAffineTransform();
130 Point2D result = transform.transform(new Point2D.Double(en.getX(), en.getY()), null);
131
132 assertEquals(should.getInViewX(), result.getX(), 0.01, "x");
133 assertEquals(should.getInViewY(), result.getY(), 0.01, "y");
134 }
135 }
136
137 /**
138 * Test {@link MapViewState#OUTSIDE_BOTTOM} and similar constants.
139 */
140 @Test
141 void testOutsideFlags() {
142 assertEquals(1, Integer.bitCount(MapViewState.OUTSIDE_BOTTOM));
143 assertEquals(1, Integer.bitCount(MapViewState.OUTSIDE_TOP));
144 assertEquals(1, Integer.bitCount(MapViewState.OUTSIDE_LEFT));
145 assertEquals(1, Integer.bitCount(MapViewState.OUTSIDE_RIGHT));
146 assertEquals(4, Integer.bitCount(MapViewState.OUTSIDE_BOTTOM | MapViewState.OUTSIDE_TOP
147 | MapViewState.OUTSIDE_LEFT | MapViewState.OUTSIDE_RIGHT));
148 }
149
150 /**
151 * Test {@link MapViewPoint#getOutsideRectangleFlags(MapViewRectangle)}
152 */
153 @Test
154 void testPointGetOutsideRectangleFlags() {
155 MapViewRectangle rect = state.getForView(0, 0).rectTo(state.getForView(10, 10));
156 assertEquals(0, state.getForView(1, 1).getOutsideRectangleFlags(rect));
157 assertEquals(0, state.getForView(1, 5).getOutsideRectangleFlags(rect));
158 assertEquals(0, state.getForView(9, 1).getOutsideRectangleFlags(rect));
159 assertEquals(0, state.getForView(10 - 1e-10, 1e-10).getOutsideRectangleFlags(rect));
160 assertEquals(0, state.getForView(10 - 1e-10, 10 - 1e-10).getOutsideRectangleFlags(rect));
161
162
163 assertEquals(MapViewState.OUTSIDE_TOP, state.getForView(1, -11).getOutsideRectangleFlags(rect));
164 assertEquals(MapViewState.OUTSIDE_TOP, state.getForView(1, -1e20).getOutsideRectangleFlags(rect));
165
166 assertEquals(MapViewState.OUTSIDE_BOTTOM, state.getForView(1, 11).getOutsideRectangleFlags(rect));
167 assertEquals(MapViewState.OUTSIDE_BOTTOM, state.getForView(1, 1e20).getOutsideRectangleFlags(rect));
168
169 assertEquals(MapViewState.OUTSIDE_LEFT, state.getForView(-11, 1).getOutsideRectangleFlags(rect));
170 assertEquals(MapViewState.OUTSIDE_LEFT, state.getForView(-1e20, 1).getOutsideRectangleFlags(rect));
171 assertEquals(MapViewState.OUTSIDE_RIGHT, state.getForView(11, 1).getOutsideRectangleFlags(rect));
172 assertEquals(MapViewState.OUTSIDE_RIGHT, state.getForView(1e20, 1).getOutsideRectangleFlags(rect));
173
174 assertEquals(MapViewState.OUTSIDE_RIGHT | MapViewState.OUTSIDE_TOP, state.getForView(11, -11).getOutsideRectangleFlags(rect));
175 assertEquals(MapViewState.OUTSIDE_RIGHT | MapViewState.OUTSIDE_BOTTOM, state.getForView(11, 11).getOutsideRectangleFlags(rect));
176 assertEquals(MapViewState.OUTSIDE_LEFT | MapViewState.OUTSIDE_TOP, state.getForView(-11, -11).getOutsideRectangleFlags(rect));
177 assertEquals(MapViewState.OUTSIDE_LEFT | MapViewState.OUTSIDE_BOTTOM, state.getForView(-11, 11).getOutsideRectangleFlags(rect));
178 }
179
180 /**
181 * Test {@link MapViewPoint#oneNormInView(MapViewPoint)}
182 */
183 @Test
184 void testPointOneNormInView() {
185 MapViewPoint p = state.getForView(5, 15);
186 assertEquals(0, p.oneNormInView(p), 1e-10);
187 assertEquals(6, p.oneNormInView(state.getForView(-1, 15)), 1e-10);
188 assertEquals(5, p.oneNormInView(state.getForView(5, 20)), 1e-10);
189 assertEquals(22, p.oneNormInView(state.getForView(-1, -1)), 1e-10);
190 assertEquals(40, p.oneNormInView(state.getForView(30, 30)), 1e-10);
191 }
192
193 /**
194 * Test {@link MapViewState.MapViewViewPoint#toString()} and {@link MapViewState.MapViewEastNorthPoint#toString()}
195 */
196 @Test
197 void testToString() {
198 assertEquals("MapViewViewPoint [x=1.0, y=2.0]",
199 state.getForView(1, 2).toString());
200 assertEquals("MapViewEastNorthPoint [eastNorth=EastNorth[e=0.0, n=0.0]]",
201 state.getPointFor(new EastNorth(0, 0)).toString());
202 }
203}
Note: See TracBrowser for help on using the repository browser.