source: josm/trunk/test/unit/org/openstreetmap/josm/testutils/MapModeUtils.java

Last change on this file was 19270, checked in by stoecker, 7 weeks ago

prevent CI test failures on Windows java 11, where 500ms are only 497ms sometimes

File size: 4.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.testutils;
3
4import static org.junit.jupiter.api.Assertions.assertEquals;
5
6import java.awt.event.MouseEvent;
7import java.util.concurrent.TimeUnit;
8
9import org.awaitility.Awaitility;
10import org.awaitility.Durations;
11import org.openstreetmap.josm.data.coor.ILatLon;
12import org.openstreetmap.josm.data.coor.LatLon;
13import org.openstreetmap.josm.gui.MainApplication;
14import org.openstreetmap.josm.gui.util.GuiHelper;
15
16/**
17 * Utils for doing stuff in the {@link org.openstreetmap.josm.actions.mapmode.MapMode}
18 */
19public final class MapModeUtils {
20 private MapModeUtils() {
21 // Hide the constructor
22 }
23
24 /**
25 * Click at a specified lat/lon
26 * Note that we use {@link org.openstreetmap.josm.actions.mapmode.MapMode} from {@link org.openstreetmap.josm.gui.MapFrame}
27 * from {@link MainApplication#getMap()}.
28 * @param coordinates The coordinates to click at (lat, lon, lat, lon, ...)
29 */
30 public static void clickAt(double... coordinates) {
31 assertEquals(0, coordinates.length % 2, "coordinates must be a multiple of 2");
32 for (int i = 0; i < coordinates.length; i += 2) {
33 clickAt(new LatLon(coordinates[i], coordinates[i + 1]));
34 }
35 }
36
37 /**
38 * Click at a specified lat/lon
39 * Note that we use {@link org.openstreetmap.josm.actions.mapmode.MapMode} from {@link org.openstreetmap.josm.gui.MapFrame}
40 * from {@link MainApplication#getMap()}.
41 * @param coordinates The coordinates to click at
42 */
43 public static void clickAt(ILatLon... coordinates) {
44 assertEquals(0, coordinates.length % 2, "coordinates must be a multiple of 2");
45 for (ILatLon coordinate : coordinates) {
46 clickAt(coordinate);
47 }
48 }
49
50 /**
51 * Click at a specified lat/lon
52 * Note that we use {@link org.openstreetmap.josm.actions.mapmode.MapMode} from {@link org.openstreetmap.josm.gui.MapFrame}
53 * from {@link MainApplication#getMap()}.
54 * @param location The location to click at
55 */
56 public static void clickAt(ILatLon location) {
57 clickAt(1, location);
58 }
59
60 /**
61 * Click at a specified lat/lon
62 * Note that we use {@link org.openstreetmap.josm.actions.mapmode.MapMode} from {@link org.openstreetmap.josm.gui.MapFrame}
63 * from {@link MainApplication#getMap()}.
64 * @param location The location to click at
65 * @param times The number of times to click
66 */
67 public static void clickAt(int times, ILatLon location) {
68 for (int i = 0; i < times; i++) {
69 final var click = mouseClickAt(location);
70 MainApplication.getMap().mapMode.mousePressed(click);
71 MainApplication.getMap().mapMode.mouseReleased(click);
72 GuiHelper.runInEDTAndWait(() -> { /* Sync UI thread */ });
73 }
74 }
75
76 /**
77 * Perform a click-n-drag operation
78 * @param from The originating point
79 * @param to The end point
80 */
81 public static void dragFromTo(ILatLon from, ILatLon to) {
82 MainApplication.getMap().mapMode.mousePressed(mouseClickAt(from));
83 // Some actions wait a period of time to avoid accidental dragging.
84 Awaitility.await().pollDelay(Durations.FIVE_HUNDRED_MILLISECONDS).atLeast(490, TimeUnit.MILLISECONDS).until(() -> true);
85 MainApplication.getMap().mapMode.mouseDragged(mouseClickAt(from));
86 MainApplication.getMap().mapMode.mouseDragged(mouseClickAt(to));
87 MainApplication.getMap().mapMode.mouseReleased(mouseClickAt(to));
88 GuiHelper.runInEDTAndWait(() -> { /* Sync UI thread */ });
89 }
90
91 /**
92 * Create the click event
93 * @param location The location for the click event
94 * @return The click event
95 */
96 public static MouseEvent mouseClickAt(ILatLon location) {
97 final var mapView = MainApplication.getMap().mapView;
98 mapView.zoomTo(mapView.getCenter(), 0.005);
99 mapView.zoomTo(location);
100 final var point = mapView.getPoint(location);
101 return new MouseEvent(MainApplication.getMap(), Long.hashCode(System.currentTimeMillis()),
102 System.currentTimeMillis(), 0, point.x, point.y, 1, false, MouseEvent.BUTTON1);
103 }
104}
Note: See TracBrowser for help on using the repository browser.