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

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

GSOC core rework - LayerManager, see #12863, rename LayerManagerWithActive to MainLayerManager

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