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

Last change on this file was 18893, checked in by taylor.smock, 8 months ago

Fix #16567: Upgrade to JUnit 5

JOSMTestRules and JOSMTestFixture can reset the default JOSM profile, which can
be unexpected for new contributors. This updates all tests to use JUnit 5 and
the new JUnit 5 annotations.

This also renames MapCSSStyleSourceFilterTest to MapCSSStyleSourceFilterPerformanceTest
to match the naming convention for performance tests and fixes some lint issues.

This was tested by running all tests individually and together.

File size: 11.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.layer;
3
4import static org.junit.jupiter.api.Assertions.assertEquals;
5import static org.junit.jupiter.api.Assertions.assertNull;
6import static org.junit.jupiter.api.Assertions.assertSame;
7import static org.junit.jupiter.api.Assertions.assertTrue;
8
9import java.util.ArrayList;
10import java.util.Arrays;
11import java.util.List;
12import java.util.logging.Handler;
13import java.util.logging.LogRecord;
14
15import org.junit.jupiter.api.BeforeEach;
16import org.junit.jupiter.api.Test;
17import org.openstreetmap.josm.data.osm.DataSet;
18import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
19import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
20import org.openstreetmap.josm.gui.util.GuiHelper;
21import org.openstreetmap.josm.tools.Logging;
22
23/**
24 * Tests {@link MainLayerManager}.
25 * @author Michael Zangl
26 */
27class MainLayerManagerTest extends LayerManagerTest {
28
29 private MainLayerManager layerManagerWithActive;
30
31 private class CapturingActiveLayerChangeListener implements ActiveLayerChangeListener {
32 private ActiveLayerChangeEvent lastEvent;
33
34 @Override
35 public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
36 assertSame(layerManager, e.getSource());
37 lastEvent = e;
38 }
39 }
40
41 private final class CapturingThreadCheckingActiveLayerChangeListener extends CapturingActiveLayerChangeListener {
42 @Override
43 public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
44 GuiHelper.assertCallFromEdt();
45 super.activeOrEditLayerChanged(e);
46 }
47 }
48
49 protected static class AbstractTestOsmLayer extends OsmDataLayer {
50 public AbstractTestOsmLayer() {
51 super(new DataSet(), "OSM layer", null);
52 }
53
54 @Override
55 public LayerPositionStrategy getDefaultLayerPosition() {
56 return LayerPositionStrategy.afterLast(o -> true);
57 }
58 }
59
60 protected static class LoggingHandler extends Handler {
61
62 private final List<LogRecord> records = new ArrayList<>();
63
64 @Override
65 public void publish(LogRecord record) {
66 records.add(record);
67 }
68
69 @Override
70 public void flush() {}
71
72 @Override
73 public void close() throws SecurityException {}
74
75 public List<LogRecord> getRecords() {
76 return records;
77 }
78
79 }
80
81 @Override
82 @BeforeEach
83 public void setUp() {
84 layerManager = layerManagerWithActive = new MainLayerManager();
85 }
86
87 @Test
88 void testAddLayerSetsActiveLayer() {
89 TestLayer layer1 = new TestLayer();
90 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
91 TestLayer layer3 = new TestLayer();
92 assertNull(layerManagerWithActive.getActiveLayer());
93 assertNull(layerManagerWithActive.getEditLayer());
94 layerManagerWithActive.addLayer(layer1);
95 assertSame(layer1, layerManagerWithActive.getActiveLayer());
96 assertNull(layerManagerWithActive.getEditLayer());
97 layerManagerWithActive.addLayer(layer2);
98 assertSame(layer2, layerManagerWithActive.getActiveLayer());
99 assertSame(layer2, layerManagerWithActive.getEditLayer());
100 layerManagerWithActive.addLayer(layer3);
101 assertSame(layer2, layerManagerWithActive.getActiveLayer());
102 assertSame(layer2, layerManagerWithActive.getEditLayer());
103 }
104
105 @Test
106 void testRemoveLayerUnsetsActiveLayer() {
107 TestLayer layer1 = new TestLayer();
108 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
109 TestLayer layer3 = new TestLayer();
110 AbstractTestOsmLayer layer4 = new AbstractTestOsmLayer();
111 layerManagerWithActive.addLayer(layer1);
112 layerManagerWithActive.addLayer(layer2);
113 layerManagerWithActive.addLayer(layer3);
114 layerManagerWithActive.addLayer(layer4);
115 assertSame(layer4, layerManagerWithActive.getActiveLayer());
116 assertSame(layer4, layerManagerWithActive.getEditLayer());
117 layerManagerWithActive.removeLayer(layer4);
118 //prefer osm layers
119 assertSame(layer2, layerManagerWithActive.getActiveLayer());
120 assertSame(layer2, layerManagerWithActive.getEditLayer());
121 layerManagerWithActive.removeLayer(layer2);
122 assertSame(layer1, layerManagerWithActive.getActiveLayer());
123 assertNull(layerManagerWithActive.getEditLayer());
124
125 layerManagerWithActive.removeLayer(layer1);
126 layerManagerWithActive.removeLayer(layer3);
127 assertNull(layerManagerWithActive.getActiveLayer());
128 assertNull(layerManagerWithActive.getEditLayer());
129 }
130
131 /**
132 * Test {@link MainLayerManager#addActiveLayerChangeListener(ActiveLayerChangeListener)} and
133 * {@link MainLayerManager#addAndFireActiveLayerChangeListener(ActiveLayerChangeListener)}
134 */
135 @Test
136 void testAddActiveLayerChangeListener() {
137 TestLayer layer1 = new TestLayer();
138 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
139 layerManagerWithActive.addLayer(layer1);
140 layerManagerWithActive.addLayer(layer2);
141
142 CapturingActiveLayerChangeListener listener = new CapturingThreadCheckingActiveLayerChangeListener();
143 layerManagerWithActive.addActiveLayerChangeListener(listener);
144 assertNull(listener.lastEvent);
145
146 CapturingActiveLayerChangeListener listener2 = new CapturingActiveLayerChangeListener();
147 layerManagerWithActive.addAndFireActiveLayerChangeListener(listener2);
148 assertNull(listener2.lastEvent.getPreviousActiveLayer());
149 assertNull(listener2.lastEvent.getPreviousDataLayer());
150
151 layerManagerWithActive.setActiveLayer(layer1);
152 assertSame(listener2.lastEvent.getPreviousActiveLayer(), layer2);
153 assertSame(listener2.lastEvent.getPreviousDataLayer(), layer2);
154
155 layerManagerWithActive.setActiveLayer(layer2);
156 assertSame(listener2.lastEvent.getPreviousActiveLayer(), layer1);
157 assertSame(listener2.lastEvent.getPreviousDataLayer(), layer2);
158 }
159
160 /**
161 * Test if {@link MainLayerManager#addActiveLayerChangeListener(ActiveLayerChangeListener)} prevents listener from being added twice.
162 */
163 @Test
164 void testAddActiveLayerChangeListenerTwice() {
165 CapturingActiveLayerChangeListener listener = new CapturingActiveLayerChangeListener();
166 LoggingHandler handler = new LoggingHandler();
167 Logging.getLogger().addHandler(handler);
168
169 layerManagerWithActive.addActiveLayerChangeListener(listener);
170 assertTrue(handler.getRecords().isEmpty());
171
172 layerManagerWithActive.addActiveLayerChangeListener(listener);
173 assertTrue(handler.getRecords().get(1).getMessage().startsWith("Attempted to add listener that was already in list"));
174
175 Logging.getLogger().removeHandler(handler);
176 }
177
178 /**
179 * Test if {@link MainLayerManager#removeActiveLayerChangeListener(ActiveLayerChangeListener)} works.
180 */
181 @Test
182 void testRemoveActiveLayerChangeListener() {
183 TestLayer layer1 = new TestLayer();
184 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
185 layerManagerWithActive.addLayer(layer1);
186 layerManagerWithActive.addLayer(layer2);
187
188 CapturingActiveLayerChangeListener listener = new CapturingActiveLayerChangeListener();
189 layerManagerWithActive.addActiveLayerChangeListener(listener);
190 layerManagerWithActive.removeActiveLayerChangeListener(listener);
191
192 layerManagerWithActive.setActiveLayer(layer2);
193 assertNull(listener.lastEvent);
194 }
195
196 /**
197 * Test if {@link MainLayerManager#removeActiveLayerChangeListener(ActiveLayerChangeListener)} checks if listener is in list.
198 */
199 @Test
200 void testRemoveActiveLayerChangeListenerNotInList() {
201 LoggingHandler handler = new LoggingHandler();
202 Logging.getLogger().addHandler(handler);
203
204 layerManagerWithActive.removeActiveLayerChangeListener(new CapturingActiveLayerChangeListener());
205 assertTrue(handler.getRecords().get(1).getMessage().startsWith("Attempted to remove listener that was not in list"));
206
207 Logging.getLogger().removeHandler(handler);
208 }
209
210 /**
211 * Tests {@link MainLayerManager#setActiveLayer(Layer)} and {@link MainLayerManager#getActiveLayer()}.
212 * <p>
213 * Edit and active layer getters are also tested in {@link #testAddLayerSetsActiveLayer()}
214 */
215 @Test
216 void testSetGetActiveLayer() {
217 TestLayer layer1 = new TestLayer();
218 TestLayer layer2 = new TestLayer();
219 layerManagerWithActive.addLayer(layer1);
220 layerManagerWithActive.addLayer(layer2);
221
222 layerManagerWithActive.setActiveLayer(layer1);
223 assertSame(layer1, layerManagerWithActive.getActiveLayer());
224
225 layerManagerWithActive.setActiveLayer(layer2);
226 assertSame(layer2, layerManagerWithActive.getActiveLayer());
227 }
228
229 /**
230 * Tests {@link MainLayerManager#getEditDataSet()}
231 */
232 @Test
233 void testGetEditDataSet() {
234 assertNull(layerManagerWithActive.getEditDataSet());
235 TestLayer layer0 = new TestLayer();
236 layerManagerWithActive.addLayer(layer0);
237 assertNull(layerManagerWithActive.getEditDataSet());
238
239 AbstractTestOsmLayer layer1 = new AbstractTestOsmLayer();
240 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
241 layerManagerWithActive.addLayer(layer1);
242 layerManagerWithActive.addLayer(layer2);
243
244 layerManagerWithActive.setActiveLayer(layer1);
245 assertSame(layer1.data, layerManagerWithActive.getEditDataSet());
246
247 layerManagerWithActive.setActiveLayer(layer2);
248 assertSame(layer2.data, layerManagerWithActive.getEditDataSet());
249 }
250
251 /**
252 * Tests {@link MainLayerManager#getVisibleLayersInZOrder()}
253 */
254 @Test
255 void testGetVisibleLayersInZOrder() {
256 AbstractTestOsmLayer layer1 = new AbstractTestOsmLayer();
257 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
258 TestLayer layer3 = new TestLayer();
259 layer3.setVisible(false);
260 AbstractTestOsmLayer layer4 = new AbstractTestOsmLayer();
261 TestLayer layer5 = new TestLayer();
262 AbstractTestOsmLayer layer6 = new AbstractTestOsmLayer();
263 AbstractTestOsmLayer layer7 = new AbstractTestOsmLayer();
264 layerManagerWithActive.addLayer(layer1);
265 layerManagerWithActive.addLayer(layer2);
266 layerManagerWithActive.addLayer(layer3);
267 layerManagerWithActive.addLayer(layer4);
268 layerManagerWithActive.addLayer(layer5);
269 layerManagerWithActive.addLayer(layer6);
270 layerManagerWithActive.addLayer(layer7);
271
272 layerManagerWithActive.setActiveLayer(layer1);
273 assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
274 layerManagerWithActive.getVisibleLayersInZOrder());
275 layerManagerWithActive.setActiveLayer(layer4);
276 assertEquals(Arrays.asList(layer7, layer6, layer5, layer2, layer1, layer4),
277 layerManagerWithActive.getVisibleLayersInZOrder());
278
279 // should not be moved ouside edit layer block
280 layerManagerWithActive.setActiveLayer(layer6);
281 assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
282 layerManagerWithActive.getVisibleLayersInZOrder());
283 layerManagerWithActive.setActiveLayer(layer7);
284 assertEquals(Arrays.asList(layer6, layer7, layer5, layer4, layer2, layer1),
285 layerManagerWithActive.getVisibleLayersInZOrder());
286
287 // ignored
288 layerManagerWithActive.setActiveLayer(layer3);
289 assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
290 layerManagerWithActive.getVisibleLayersInZOrder());
291 layerManagerWithActive.setActiveLayer(layer5);
292 assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
293 layerManagerWithActive.getVisibleLayersInZOrder());
294
295 }
296
297}
Note: See TracBrowser for help on using the repository browser.