// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.layer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; import org.junit.BeforeClass; import org.junit.Test; import org.openstreetmap.josm.JOSMFixture; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.TestUtils; import org.openstreetmap.josm.actions.ExpertToggleAction; import org.openstreetmap.josm.data.Bounds; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Relation; import org.openstreetmap.josm.data.osm.Way; /** * Unit tests of {@link OsmDataLayer} class. */ public class OsmDataLayerTest { /** * Setup tests */ @BeforeClass public static void setUpBeforeClass() { JOSMFixture.createUnitTestFixture().init(true); } /** * Unit test of {@link OsmDataLayer#setRecentRelation} and {@link OsmDataLayer#getRecentRelations}. */ @Test public void testRecentRelation() { DataSet ds = new DataSet(); OsmDataLayer layer = new OsmDataLayer(ds, "", null); try { Main.getLayerManager().addLayer(layer); int n = OsmDataLayer.PROPERTY_RECENT_RELATIONS_NUMBER.get(); assertTrue(n > 0); for (int i = 0; i < 2*n; i++) { Relation r = new Relation(i, 1); ds.addPrimitive(r); layer.setRecentRelation(r); } assertEquals(n, layer.getRecentRelations().size()); for (OsmPrimitive r : ds.allPrimitives()) { if (r instanceof Relation) { layer.removeRecentRelation((Relation) r); } } assertTrue(layer.getRecentRelations().isEmpty()); } finally { Main.getLayerManager().removeLayer(layer); } } /** * Unit test of {@link OsmDataLayer#getInfoComponent}. */ @Test public void testGetInfoComponent() { DataSet ds = new DataSet(); OsmDataLayer layer = new OsmDataLayer(ds, "", null); assertNotNull(layer.getInfoComponent()); layer.setUploadDiscouraged(true); fillDataSet(ds); assertNotNull(layer.getInfoComponent()); } private void fillDataSet(DataSet ds) { Node n = new Node(1, 2); n.setCoor(LatLon.ZERO); n.setDeleted(true); n.setVisible(false); ds.addPrimitive(n); n = new Node(2, 2); n.setCoor(LatLon.ZERO); ds.addPrimitive(n); Way w = new Way(1, 2); w.setDeleted(true); w.setVisible(false); ds.addPrimitive(w); ds.addPrimitive(new Way(2, 2)); Relation r = new Relation(1, 2); r.setDeleted(true); r.setVisible(false); ds.addPrimitive(r); ds.addPrimitive(new Relation(2, 2)); } /** * Unit test of {@link OsmDataLayer#addLayerStateChangeListener}. */ @Test public void testLayerStateChangeListenerNull() { DataSet ds = new DataSet(); OsmDataLayer layer = new OsmDataLayer(ds, "", null); layer.addLayerStateChangeListener(null); } /** * Unit test of {@link OsmDataLayer#getIcon}. */ @Test public void testGetIcon() { DataSet ds = new DataSet(); OsmDataLayer layer = new OsmDataLayer(ds, "", null); assertNotNull(layer.getIcon()); layer.setUploadDiscouraged(true); assertNotNull(layer.getIcon()); } /** * Unit test of {@link OsmDataLayer#paint}. */ @Test public void testPaint() { DataSet ds = new DataSet(); fillDataSet(ds); OsmDataLayer layer = new OsmDataLayer(ds, "", null); try { Main.getLayerManager().addLayer(layer); assertTrue(layer.getMenuEntries().length > 0); layer.paint(TestUtils.newGraphics(), Main.map.mapView, new Bounds(LatLon.ZERO)); } finally { Main.getLayerManager().removeLayer(layer); } } /** * Unit test of {@link OsmDataLayer#getToolTipText}. */ @Test public void testGetToolTipText() { DataSet ds = new DataSet(); assertEquals("0 nodes, 0 ways, 0 relations", new OsmDataLayer(ds, "", null).getToolTipText()); fillDataSet(ds); assertEquals("1 node, 1 way, 1 relation", new OsmDataLayer(ds, "", null).getToolTipText()); assertEquals("<html>1 node, 1 way, 1 relation<br>data.osm</html>", new OsmDataLayer(ds, "", new File("data.osm")).getToolTipText()); } /** * Unit test of {@link OsmDataLayer#mergeFrom}. */ @Test public void testMergeFrom() { DataSet ds = new DataSet(); fillDataSet(ds); OsmDataLayer layer1 = new OsmDataLayer(ds, "", null); OsmDataLayer layer2 = new OsmDataLayer(new DataSet(), "", null); assertTrue(layer2.data.allPrimitives().isEmpty()); assertTrue(layer2.isMergable(layer1)); layer2.mergeFrom(layer1); assertEquals(6, layer2.data.allPrimitives().size()); layer1.setUploadDiscouraged(true); layer2.mergeFrom(layer1); assertTrue(layer2.isUploadDiscouraged()); } /** * Unit test of {@link OsmDataLayer#cleanupAfterUpload}. */ @Test public void testCleanupAfterUpload() { DataSet ds = new DataSet(); fillDataSet(ds); OsmDataLayer layer = new OsmDataLayer(ds, "", null); assertEquals(6, layer.data.allPrimitives().size()); layer.cleanupAfterUpload(ds.allPrimitives()); assertEquals(3, layer.data.allPrimitives().size()); } /** * Unit test of {@link OsmDataLayer#getMenuEntries}. */ @Test public void testGetMenuEntries() { OsmDataLayer layer = new OsmDataLayer(new DataSet(), "", null); ExpertToggleAction.getInstance().setExpert(true); assertEquals(16, layer.getMenuEntries().length); ExpertToggleAction.getInstance().setExpert(false); assertEquals(13, layer.getMenuEntries().length); } /** * Unit test of {@link OsmDataLayer#toGpxData}. */ @Test public void testToGpxData() { DataSet ds = new DataSet(); fillDataSet(ds); OsmDataLayer layer = new OsmDataLayer(ds, "", null); assertNotNull(layer.toGpxData()); } /** * Unit test of {@link OsmDataLayer#containsPoint}. */ @Test public void testContainsPoint() { DataSet ds = new DataSet(); fillDataSet(ds); OsmDataLayer layer = new OsmDataLayer(ds, "", null); assertTrue(layer.containsPoint(LatLon.ZERO)); } /** * Unit test of {@link OsmDataLayer#isModified}. */ @Test public void testIsModified() { DataSet ds = new DataSet(); OsmDataLayer layer = new OsmDataLayer(ds, "", null); assertFalse(layer.isModified()); fillDataSet(ds); assertTrue(layer.isModified()); } /** * Unit test of {@link OsmDataLayer#projectionChanged}. */ @Test public void testProjectionChanged() { new OsmDataLayer(new DataSet(), "", null).projectionChanged(null, null); } /** * Unit test of {@link OsmDataLayer#checkSaveConditions}. */ @Test public void testCheckSaveConditions() { DataSet ds = new DataSet(); OsmDataLayer layer = new OsmDataLayer(ds, "", null); assertFalse(layer.checkSaveConditions()); fillDataSet(ds); assertTrue(layer.checkSaveConditions()); } @Test public void testLayerNameIncreases() throws Exception { final OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), OsmDataLayer.createLayerName(147), null); final OsmDataLayer layer2 = new OsmDataLayer(new DataSet(), OsmDataLayer.createNewName(), null); assertEquals("Data Layer 147", layer1.getName()); assertEquals("Data Layer 148", layer2.getName()); } @Test public void testLayerUnnumberedName() { final OsmDataLayer layer = new OsmDataLayer(new DataSet(), "Data Layer ", null); assertEquals("Data Layer ", layer.getName()); } /** * Non-regression test for ticket #13985 */ @Test public void testLayerNameDoesFinish() { final OsmDataLayer layer = new OsmDataLayer(new DataSet(), "Data Layer from GeoJSON: foo.geojson", null); assertEquals("Data Layer from GeoJSON: foo.geojson", layer.getName()); } }