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

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

see #12890 - remove calls to deprecated predicates in unit tests

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