1 | // License: GPL. For details, see LICENSE file.
|
---|
2 | package org.openstreetmap.josm.gui.dialogs.layer;
|
---|
3 |
|
---|
4 | import static org.junit.jupiter.api.Assertions.assertAll;
|
---|
5 | import static org.junit.jupiter.api.Assertions.assertEquals;
|
---|
6 | import static org.junit.jupiter.api.Assertions.assertFalse;
|
---|
7 | import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
---|
8 | import static org.junit.jupiter.api.Assertions.assertNotNull;
|
---|
9 | import static org.junit.jupiter.api.Assertions.assertNotSame;
|
---|
10 | import static org.junit.jupiter.api.Assertions.assertSame;
|
---|
11 | import static org.junit.jupiter.api.Assertions.assertTrue;
|
---|
12 |
|
---|
13 | import java.util.Objects;
|
---|
14 | import java.util.concurrent.atomic.AtomicInteger;
|
---|
15 | import java.util.function.Supplier;
|
---|
16 |
|
---|
17 | import org.junit.jupiter.api.BeforeEach;
|
---|
18 | import org.junit.jupiter.api.Test;
|
---|
19 | import org.openstreetmap.josm.data.osm.DataSet;
|
---|
20 | import org.openstreetmap.josm.gui.MainApplication;
|
---|
21 | import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
|
---|
22 | import org.openstreetmap.josm.gui.layer.Layer;
|
---|
23 | import org.openstreetmap.josm.gui.layer.OsmDataLayer;
|
---|
24 | import org.openstreetmap.josm.testutils.annotations.Main;
|
---|
25 | import org.openstreetmap.josm.testutils.annotations.Projection;
|
---|
26 |
|
---|
27 | /**
|
---|
28 | * Test class for {@link DeleteLayerAction}
|
---|
29 | */
|
---|
30 | @Main
|
---|
31 | @Projection
|
---|
32 | class DeleteLayerActionTest {
|
---|
33 | private LayerListDialog.LayerListModel model;
|
---|
34 | private DeleteLayerAction deleteLayerAction;
|
---|
35 | private ShowHideLayerAction showHideLayerAction;
|
---|
36 |
|
---|
37 | @BeforeEach
|
---|
38 | void setup() {
|
---|
39 | final AtomicInteger counter = new AtomicInteger();
|
---|
40 | final Supplier<OsmDataLayer> layerSupplier = () -> new OsmDataLayer(new DataSet(), "testActiveLayer" + counter.getAndIncrement(), null);
|
---|
41 | for (int i = 0; i < 10; i++) {
|
---|
42 | MainApplication.getLayerManager().addLayer(layerSupplier.get());
|
---|
43 | }
|
---|
44 | final LayerListDialog layerListDialog = LayerListDialog.getInstance();
|
---|
45 | this.model = layerListDialog.getModel();
|
---|
46 | this.deleteLayerAction = layerListDialog.createDeleteLayerAction();
|
---|
47 | this.showHideLayerAction = layerListDialog.createShowHideLayerAction();
|
---|
48 | }
|
---|
49 |
|
---|
50 | @Test
|
---|
51 | void testSetActiveLayerOnlyOneVisible0to8() {
|
---|
52 | hideRange(0, 8);
|
---|
53 | assertEquals(9, model.getSelectedLayers().size());
|
---|
54 | assertEquals(1, model.getLayers().stream().filter(Layer::isVisible).count());
|
---|
55 | deleteLayerAction.actionPerformed(null);
|
---|
56 | assertEquals(1, model.getSelectedLayers().size());
|
---|
57 | final Layer layer = assertInstanceOf(OsmDataLayer.class, model.getLayer(0));
|
---|
58 | assertNotNull(layer);
|
---|
59 | assertTrue(layer.isVisible());
|
---|
60 | assertSame(layer, model.getLayerManager().getActiveLayer());
|
---|
61 | assertEquals("testActiveLayer0", layer.getName());
|
---|
62 | }
|
---|
63 |
|
---|
64 | @Test
|
---|
65 | void testSetActiveLayerOnlyOneVisible1to9() {
|
---|
66 | hideRange(1, 9);
|
---|
67 | assertEquals(9, model.getSelectedLayers().size());
|
---|
68 | assertEquals(1, model.getLayers().stream().filter(Layer::isVisible).count());
|
---|
69 | deleteLayerAction.actionPerformed(null);
|
---|
70 | assertEquals(1, model.getSelectedLayers().size());
|
---|
71 | final Layer layer = assertInstanceOf(OsmDataLayer.class, model.getLayer(0));
|
---|
72 | assertNotNull(layer);
|
---|
73 | assertTrue(layer.isVisible());
|
---|
74 | assertSame(layer, model.getLayerManager().getActiveLayer());
|
---|
75 | assertEquals("testActiveLayer9", layer.getName());
|
---|
76 | }
|
---|
77 |
|
---|
78 | @Test
|
---|
79 | void testRemoveMiddleActiveWithSurroundingHiddenLayers() {
|
---|
80 | hideRange(3, 3);
|
---|
81 | hideRange(5, 5);
|
---|
82 | final Layer toRemove = model.getLayer(4);
|
---|
83 | assertNotNull(toRemove);
|
---|
84 | assertTrue(toRemove.isVisible());
|
---|
85 | assertFalse(Objects.requireNonNull(model.getLayer(3)).isVisible());
|
---|
86 | assertFalse(Objects.requireNonNull(model.getLayer(5)).isVisible());
|
---|
87 | model.getLayerManager().setActiveLayer(toRemove);
|
---|
88 | model.setSelectedLayer(toRemove);
|
---|
89 | deleteLayerAction.actionPerformed(null);
|
---|
90 | assertSame(model.getLayerManager().getActiveLayer(), model.getLayer(5));
|
---|
91 | assertEquals("testActiveLayer3", Objects.requireNonNull(model.getLayer(5)).getName());
|
---|
92 | assertAll(model.getLayers().stream().map(layer -> () -> assertNotSame(toRemove, layer)));
|
---|
93 | }
|
---|
94 |
|
---|
95 | @Test
|
---|
96 | void testRemoveTopActiveWithSurroundingHiddenLayers() {
|
---|
97 | hideRange(1, 1);
|
---|
98 | final Layer toRemove = model.getLayer(0);
|
---|
99 | assertNotNull(toRemove);
|
---|
100 | assertTrue(toRemove.isVisible());
|
---|
101 | assertFalse(Objects.requireNonNull(model.getLayer(1)).isVisible());
|
---|
102 | model.getLayerManager().setActiveLayer(toRemove);
|
---|
103 | model.setSelectedLayer(toRemove);
|
---|
104 | deleteLayerAction.actionPerformed(null);
|
---|
105 | assertSame(model.getLayerManager().getActiveLayer(), model.getLayer(1));
|
---|
106 | assertEquals("testActiveLayer7", Objects.requireNonNull(model.getLayer(1)).getName());
|
---|
107 | assertAll(model.getLayers().stream().map(layer -> () -> assertNotSame(toRemove, layer)));
|
---|
108 | }
|
---|
109 |
|
---|
110 | @Test
|
---|
111 | void testRemoveBottomActiveWithSurroundingHiddenLayers() {
|
---|
112 | hideRange(8, 8);
|
---|
113 | final Layer toRemove = model.getLayer(9);
|
---|
114 | assertNotNull(toRemove);
|
---|
115 | assertTrue(toRemove.isVisible());
|
---|
116 | assertFalse(Objects.requireNonNull(model.getLayer(8)).isVisible());
|
---|
117 | model.getLayerManager().setActiveLayer(toRemove);
|
---|
118 | model.setSelectedLayer(toRemove);
|
---|
119 | deleteLayerAction.actionPerformed(null);
|
---|
120 | assertSame(model.getLayerManager().getActiveLayer(), model.getLayer(7));
|
---|
121 | assertEquals("testActiveLayer2", Objects.requireNonNull(model.getLayer(7)).getName());
|
---|
122 | assertAll(model.getLayers().stream().map(layer -> () -> assertNotSame(toRemove, layer)));
|
---|
123 | }
|
---|
124 |
|
---|
125 | private void hideRange(int start, int end) {
|
---|
126 | model.getSelectionModel().setSelectionInterval(start, end);
|
---|
127 | showHideLayerAction.actionPerformed(null);
|
---|
128 | }
|
---|
129 | }
|
---|