source: josm/trunk/test/unit/org/openstreetmap/josm/gui/layer/OsmDataLayerTest.java@ 11261

Last change on this file since 11261 was 11261, checked in by simon04, 7 years ago

fix #13985 - Freezes when creating a layer named "Data Layer "

  • Property svn:eol-style set to native
File size: 8.6 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.assertFalse;
6import static org.junit.Assert.assertNotNull;
7import static org.junit.Assert.assertTrue;
8
9import java.io.File;
10
11import org.junit.BeforeClass;
12import org.junit.Test;
13import org.openstreetmap.josm.JOSMFixture;
14import org.openstreetmap.josm.Main;
15import org.openstreetmap.josm.TestUtils;
16import org.openstreetmap.josm.actions.ExpertToggleAction;
17import org.openstreetmap.josm.data.Bounds;
18import org.openstreetmap.josm.data.coor.LatLon;
19import org.openstreetmap.josm.data.osm.DataSet;
20import org.openstreetmap.josm.data.osm.Node;
21import org.openstreetmap.josm.data.osm.OsmPrimitive;
22import org.openstreetmap.josm.data.osm.Relation;
23import org.openstreetmap.josm.data.osm.Way;
24
25/**
26 * Unit tests of {@link OsmDataLayer} class.
27 */
28public class OsmDataLayerTest {
29
30 /**
31 * Setup tests
32 */
33 @BeforeClass
34 public static void setUpBeforeClass() {
35 JOSMFixture.createUnitTestFixture().init(true);
36 }
37
38 /**
39 * Unit test of {@link OsmDataLayer#setRecentRelation} and {@link OsmDataLayer#getRecentRelations}.
40 */
41 @Test
42 public void testRecentRelation() {
43 DataSet ds = new DataSet();
44 OsmDataLayer layer = new OsmDataLayer(ds, "", null);
45 try {
46 Main.getLayerManager().addLayer(layer);
47 int n = OsmDataLayer.PROPERTY_RECENT_RELATIONS_NUMBER.get();
48 assertTrue(n > 0);
49 for (int i = 0; i < 2*n; i++) {
50 Relation r = new Relation(i, 1);
51 ds.addPrimitive(r);
52 layer.setRecentRelation(r);
53 }
54 assertEquals(n, layer.getRecentRelations().size());
55 for (OsmPrimitive r : ds.allPrimitives()) {
56 if (r instanceof Relation) {
57 layer.removeRecentRelation((Relation) r);
58 }
59 }
60 assertTrue(layer.getRecentRelations().isEmpty());
61 } finally {
62 Main.getLayerManager().removeLayer(layer);
63 }
64 }
65
66 /**
67 * Unit test of {@link OsmDataLayer#getInfoComponent}.
68 */
69 @Test
70 public void testGetInfoComponent() {
71 DataSet ds = new DataSet();
72 OsmDataLayer layer = new OsmDataLayer(ds, "", null);
73 assertNotNull(layer.getInfoComponent());
74
75 layer.setUploadDiscouraged(true);
76
77 fillDataSet(ds);
78
79 assertNotNull(layer.getInfoComponent());
80 }
81
82 private void fillDataSet(DataSet ds) {
83 Node n = new Node(1, 2);
84 n.setCoor(LatLon.ZERO);
85 n.setDeleted(true);
86 n.setVisible(false);
87 ds.addPrimitive(n);
88 n = new Node(2, 2);
89 n.setCoor(LatLon.ZERO);
90 ds.addPrimitive(n);
91
92 Way w = new Way(1, 2);
93 w.setDeleted(true);
94 w.setVisible(false);
95 ds.addPrimitive(w);
96 ds.addPrimitive(new Way(2, 2));
97
98 Relation r = new Relation(1, 2);
99 r.setDeleted(true);
100 r.setVisible(false);
101 ds.addPrimitive(r);
102 ds.addPrimitive(new Relation(2, 2));
103 }
104
105 /**
106 * Unit test of {@link OsmDataLayer#addLayerStateChangeListener}.
107 */
108 @Test
109 public void testLayerStateChangeListenerNull() {
110 DataSet ds = new DataSet();
111 OsmDataLayer layer = new OsmDataLayer(ds, "", null);
112 layer.addLayerStateChangeListener(null);
113 }
114
115 /**
116 * Unit test of {@link OsmDataLayer#getIcon}.
117 */
118 @Test
119 public void testGetIcon() {
120 DataSet ds = new DataSet();
121 OsmDataLayer layer = new OsmDataLayer(ds, "", null);
122 assertNotNull(layer.getIcon());
123 layer.setUploadDiscouraged(true);
124 assertNotNull(layer.getIcon());
125 }
126
127 /**
128 * Unit test of {@link OsmDataLayer#paint}.
129 */
130 @Test
131 public void testPaint() {
132 DataSet ds = new DataSet();
133 fillDataSet(ds);
134 OsmDataLayer layer = new OsmDataLayer(ds, "", null);
135 try {
136 Main.getLayerManager().addLayer(layer);
137 assertTrue(layer.getMenuEntries().length > 0);
138 layer.paint(TestUtils.newGraphics(), Main.map.mapView, new Bounds(LatLon.ZERO));
139 } finally {
140 Main.getLayerManager().removeLayer(layer);
141 }
142 }
143
144 /**
145 * Unit test of {@link OsmDataLayer#getToolTipText}.
146 */
147 @Test
148 public void testGetToolTipText() {
149 DataSet ds = new DataSet();
150 assertEquals("0 nodes, 0 ways, 0 relations", new OsmDataLayer(ds, "", null).getToolTipText());
151 fillDataSet(ds);
152 assertEquals("1 node, 1 way, 1 relation", new OsmDataLayer(ds, "", null).getToolTipText());
153 assertEquals("<html>1 node, 1 way, 1 relation<br>data.osm</html>", new OsmDataLayer(ds, "", new File("data.osm")).getToolTipText());
154 }
155
156 /**
157 * Unit test of {@link OsmDataLayer#mergeFrom}.
158 */
159 @Test
160 public void testMergeFrom() {
161 DataSet ds = new DataSet();
162 fillDataSet(ds);
163 OsmDataLayer layer1 = new OsmDataLayer(ds, "", null);
164 OsmDataLayer layer2 = new OsmDataLayer(new DataSet(), "", null);
165 assertTrue(layer2.data.allPrimitives().isEmpty());
166 assertTrue(layer2.isMergable(layer1));
167 layer2.mergeFrom(layer1);
168 assertEquals(6, layer2.data.allPrimitives().size());
169 layer1.setUploadDiscouraged(true);
170 layer2.mergeFrom(layer1);
171 assertTrue(layer2.isUploadDiscouraged());
172 }
173
174 /**
175 * Unit test of {@link OsmDataLayer#cleanupAfterUpload}.
176 */
177 @Test
178 public void testCleanupAfterUpload() {
179 DataSet ds = new DataSet();
180 fillDataSet(ds);
181 OsmDataLayer layer = new OsmDataLayer(ds, "", null);
182 assertEquals(6, layer.data.allPrimitives().size());
183 layer.cleanupAfterUpload(ds.allPrimitives());
184 assertEquals(3, layer.data.allPrimitives().size());
185 }
186
187 /**
188 * Unit test of {@link OsmDataLayer#getMenuEntries}.
189 */
190 @Test
191 public void testGetMenuEntries() {
192 OsmDataLayer layer = new OsmDataLayer(new DataSet(), "", null);
193 ExpertToggleAction.getInstance().setExpert(true);
194 assertEquals(16, layer.getMenuEntries().length);
195
196 ExpertToggleAction.getInstance().setExpert(false);
197 assertEquals(13, layer.getMenuEntries().length);
198 }
199
200 /**
201 * Unit test of {@link OsmDataLayer#toGpxData}.
202 */
203 @Test
204 public void testToGpxData() {
205 DataSet ds = new DataSet();
206 fillDataSet(ds);
207 OsmDataLayer layer = new OsmDataLayer(ds, "", null);
208 assertNotNull(layer.toGpxData());
209 }
210
211 /**
212 * Unit test of {@link OsmDataLayer#containsPoint}.
213 */
214 @Test
215 public void testContainsPoint() {
216 DataSet ds = new DataSet();
217 fillDataSet(ds);
218 OsmDataLayer layer = new OsmDataLayer(ds, "", null);
219 assertTrue(layer.containsPoint(LatLon.ZERO));
220 }
221
222 /**
223 * Unit test of {@link OsmDataLayer#isModified}.
224 */
225 @Test
226 public void testIsModified() {
227 DataSet ds = new DataSet();
228 OsmDataLayer layer = new OsmDataLayer(ds, "", null);
229 assertFalse(layer.isModified());
230 fillDataSet(ds);
231 assertTrue(layer.isModified());
232 }
233
234 /**
235 * Unit test of {@link OsmDataLayer#projectionChanged}.
236 */
237 @Test
238 public void testProjectionChanged() {
239 new OsmDataLayer(new DataSet(), "", null).projectionChanged(null, null);
240 }
241
242 /**
243 * Unit test of {@link OsmDataLayer#checkSaveConditions}.
244 */
245 @Test
246 public void testCheckSaveConditions() {
247 DataSet ds = new DataSet();
248 OsmDataLayer layer = new OsmDataLayer(ds, "", null);
249 assertFalse(layer.checkSaveConditions());
250 fillDataSet(ds);
251 assertTrue(layer.checkSaveConditions());
252 }
253
254 @Test
255 public void testLayerNameIncreases() throws Exception {
256 final OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), OsmDataLayer.createLayerName(147), null);
257 final OsmDataLayer layer2 = new OsmDataLayer(new DataSet(), OsmDataLayer.createNewName(), null);
258 assertEquals("Data Layer 147", layer1.getName());
259 assertEquals("Data Layer 148", layer2.getName());
260 }
261
262 @Test
263 public void testLayerUnnumberedName() {
264 final OsmDataLayer layer = new OsmDataLayer(new DataSet(), "Data Layer ", null);
265 assertEquals("Data Layer ", layer.getName());
266 }
267
268 /**
269 * Non-regression test for ticket #13985
270 */
271 @Test
272 public void testLayerNameDoesFinish() {
273 final OsmDataLayer layer = new OsmDataLayer(new DataSet(), "Data Layer from GeoJSON: foo.geojson", null);
274 assertEquals("Data Layer from GeoJSON: foo.geojson", layer.getName());
275 }
276}
Note: See TracBrowser for help on using the repository browser.