source: josm/trunk/test/unit/org/openstreetmap/josm/gui/dialogs/layer/DeleteLayerActionTest.java@ 18839

Last change on this file since 18839 was 18839, checked in by taylor.smock, 9 months ago

Fix #23179: Include changeset in note comment if feasible (patch by qeef, modified)

Modifications are as follows:

  • Unit tests
  • Better note matching
  • Find multiple changesets referring the same note
File size: 5.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.layer;
3
4import static org.junit.jupiter.api.Assertions.assertAll;
5import static org.junit.jupiter.api.Assertions.assertEquals;
6import static org.junit.jupiter.api.Assertions.assertFalse;
7import static org.junit.jupiter.api.Assertions.assertInstanceOf;
8import static org.junit.jupiter.api.Assertions.assertNotNull;
9import static org.junit.jupiter.api.Assertions.assertNotSame;
10import static org.junit.jupiter.api.Assertions.assertSame;
11import static org.junit.jupiter.api.Assertions.assertTrue;
12
13import java.util.Objects;
14import java.util.concurrent.atomic.AtomicInteger;
15import java.util.function.Supplier;
16
17import org.junit.jupiter.api.BeforeEach;
18import org.junit.jupiter.api.Test;
19import org.openstreetmap.josm.data.osm.DataSet;
20import org.openstreetmap.josm.gui.MainApplication;
21import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
22import org.openstreetmap.josm.gui.layer.Layer;
23import org.openstreetmap.josm.gui.layer.OsmDataLayer;
24import org.openstreetmap.josm.testutils.annotations.Main;
25import org.openstreetmap.josm.testutils.annotations.Projection;
26
27/**
28 * Test class for {@link DeleteLayerAction}
29 */
30@Main
31@Projection
32class 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}
Note: See TracBrowser for help on using the repository browser.