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

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

fix #13037 - Small fixes for unit tests (patch by michael2402) - gsoc-core

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 TestLayer layer1 = new TestLayer();
71 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
72 TestLayer layer3 = new TestLayer();
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 TestLayer layer1 = new TestLayer();
89 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
90 TestLayer layer3 = new TestLayer();
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 /**
113 * Test {@link MainLayerManager#addActiveLayerChangeListener(ActiveLayerChangeListener)} and
114 * {@link MainLayerManager#addAndFireActiveLayerChangeListener(ActiveLayerChangeListener)}
115 */
116 @Test
117 public void testAddActiveLayerChangeListener() {
118 TestLayer layer1 = new TestLayer();
119 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
120 layerManagerWithActive.addLayer(layer1);
121 layerManagerWithActive.addLayer(layer2);
122
123 CapturingActiveLayerChangeListener listener = new CapturingThreadCheckingActiveLayerChangeListener();
124 layerManagerWithActive.addActiveLayerChangeListener(listener);
125 assertNull(listener.lastEvent);
126
127 CapturingActiveLayerChangeListener listener2 = new CapturingActiveLayerChangeListener();
128 layerManagerWithActive.addAndFireActiveLayerChangeListener(listener2);
129 assertSame(listener2.lastEvent.getPreviousActiveLayer(), null);
130 assertSame(listener2.lastEvent.getPreviousEditLayer(), null);
131
132 layerManagerWithActive.setActiveLayer(layer1);
133 assertSame(listener2.lastEvent.getPreviousActiveLayer(), layer2);
134 assertSame(listener2.lastEvent.getPreviousEditLayer(), layer2);
135
136 layerManagerWithActive.setActiveLayer(layer2);
137 assertSame(listener2.lastEvent.getPreviousActiveLayer(), layer1);
138 assertSame(listener2.lastEvent.getPreviousEditLayer(), layer2);
139 }
140
141 /**
142 * Test if {@link MainLayerManager#addActiveLayerChangeListener(ActiveLayerChangeListener)} prevents listener from beeing added twice.
143 */
144 @Test(expected = IllegalArgumentException.class)
145 public void testAddActiveLayerChangeListenerTwice() {
146 CapturingActiveLayerChangeListener listener = new CapturingActiveLayerChangeListener();
147 layerManagerWithActive.addActiveLayerChangeListener(listener);
148 layerManagerWithActive.addActiveLayerChangeListener(listener);
149 }
150
151 /**
152 * Test if {@link MainLayerManager#removeActiveLayerChangeListener(ActiveLayerChangeListener)} works.
153 */
154 @Test
155 public void testRemoveActiveLayerChangeListener() {
156 TestLayer layer1 = new TestLayer();
157 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
158 layerManagerWithActive.addLayer(layer1);
159 layerManagerWithActive.addLayer(layer2);
160
161 CapturingActiveLayerChangeListener listener = new CapturingActiveLayerChangeListener();
162 layerManagerWithActive.addActiveLayerChangeListener(listener);
163 layerManagerWithActive.removeActiveLayerChangeListener(listener);
164
165 layerManagerWithActive.setActiveLayer(layer2);
166 assertNull(listener.lastEvent);
167 }
168
169 /**
170 * Test if {@link MainLayerManager#removeActiveLayerChangeListener(ActiveLayerChangeListener)} checks if listener is in list.
171 */
172 @Test(expected = IllegalArgumentException.class)
173 public void testRemoveActiveLayerChangeListenerNotInList() {
174 layerManagerWithActive.removeActiveLayerChangeListener(new CapturingActiveLayerChangeListener());
175 }
176
177 /**
178 * Tests {@link MainLayerManager#setActiveLayer(Layer)} and {@link MainLayerManager#getActiveLayer()}.
179 * <p>
180 * Edit and active layer getters are also tested in {@link #testAddLayerSetsActiveLayer()}
181 */
182 @Test
183 public void testSetGetActiveLayer() {
184 TestLayer layer1 = new TestLayer();
185 TestLayer layer2 = new TestLayer();
186 layerManagerWithActive.addLayer(layer1);
187 layerManagerWithActive.addLayer(layer2);
188
189 layerManagerWithActive.setActiveLayer(layer1);
190 assertSame(layer1, layerManagerWithActive.getActiveLayer());
191
192 layerManagerWithActive.setActiveLayer(layer2);
193 assertSame(layer2, layerManagerWithActive.getActiveLayer());
194 }
195
196 /**
197 * Tests {@link MainLayerManager#getEditDataSet()}
198 */
199 @Test
200 public void testGetEditDataSet() {
201 assertNull(layerManagerWithActive.getEditDataSet());
202 TestLayer layer0 = new TestLayer();
203 layerManagerWithActive.addLayer(layer0);
204 assertNull(layerManagerWithActive.getEditDataSet());
205
206 AbstractTestOsmLayer layer1 = new AbstractTestOsmLayer();
207 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
208 layerManagerWithActive.addLayer(layer1);
209 layerManagerWithActive.addLayer(layer2);
210
211 layerManagerWithActive.setActiveLayer(layer1);
212 assertSame(layer1.data, layerManagerWithActive.getEditDataSet());
213
214 layerManagerWithActive.setActiveLayer(layer2);
215 assertSame(layer2.data, layerManagerWithActive.getEditDataSet());
216 }
217
218 /**
219 * Tests {@link MainLayerManager#getVisibleLayersInZOrder()}
220 */
221 @Test
222 public void testGetVisibleLayersInZOrder() {
223 AbstractTestOsmLayer layer1 = new AbstractTestOsmLayer();
224 AbstractTestOsmLayer layer2 = new AbstractTestOsmLayer();
225 TestLayer layer3 = new TestLayer();
226 layer3.setVisible(false);
227 AbstractTestOsmLayer layer4 = new AbstractTestOsmLayer();
228 TestLayer layer5 = new TestLayer();
229 AbstractTestOsmLayer layer6 = new AbstractTestOsmLayer();
230 AbstractTestOsmLayer layer7 = new AbstractTestOsmLayer();
231 layerManagerWithActive.addLayer(layer1);
232 layerManagerWithActive.addLayer(layer2);
233 layerManagerWithActive.addLayer(layer3);
234 layerManagerWithActive.addLayer(layer4);
235 layerManagerWithActive.addLayer(layer5);
236 layerManagerWithActive.addLayer(layer6);
237 layerManagerWithActive.addLayer(layer7);
238
239 layerManagerWithActive.setActiveLayer(layer1);
240 assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
241 layerManagerWithActive.getVisibleLayersInZOrder());
242 layerManagerWithActive.setActiveLayer(layer4);
243 assertEquals(Arrays.asList(layer7, layer6, layer5, layer2, layer1, layer4),
244 layerManagerWithActive.getVisibleLayersInZOrder());
245
246 // should not be moved ouside edit layer block
247 layerManagerWithActive.setActiveLayer(layer6);
248 assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
249 layerManagerWithActive.getVisibleLayersInZOrder());
250 layerManagerWithActive.setActiveLayer(layer7);
251 assertEquals(Arrays.asList(layer6, layer7, layer5, layer4, layer2, layer1),
252 layerManagerWithActive.getVisibleLayersInZOrder());
253
254 // ignored
255 layerManagerWithActive.setActiveLayer(layer3);
256 assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
257 layerManagerWithActive.getVisibleLayersInZOrder());
258 layerManagerWithActive.setActiveLayer(layer5);
259 assertEquals(Arrays.asList(layer7, layer6, layer5, layer4, layer2, layer1),
260 layerManagerWithActive.getVisibleLayersInZOrder());
261
262 }
263
264}
Note: See TracBrowser for help on using the repository browser.