// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.actions; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.junit.BeforeClass; import org.junit.Test; import org.openstreetmap.josm.JOSMFixture; import org.openstreetmap.josm.Main; 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.Way; import org.openstreetmap.josm.gui.layer.OsmDataLayer; /** * Unit tests for class {@link UnGlueAction}. */ public final class UnGlueActionTest { /** Class under test. */ private static UnGlueAction action; /** * Setup test. */ @BeforeClass public static void setUp() { JOSMFixture.createUnitTestFixture().init(true); action = Main.main.menu.unglueNodes; action.setEnabled(true); } /** * Test without any selection. */ @Test public void testSelectionEmpty() { DataSet ds = new DataSet(); OsmDataLayer layer = new OsmDataLayer(ds, "", null); try { Main.getLayerManager().addLayer(layer); assertTrue(ds.getSelected().isEmpty()); assertTrue(ds.allPrimitives().isEmpty()); action.actionPerformed(null); assertTrue(ds.allPrimitives().isEmpty()); } finally { Main.getLayerManager().removeLayer(layer); } } /** * Test with a single node, that doesn't belong to a way. */ @Test public void testSingleNodeNotInWay() { DataSet ds = new DataSet(); Node n = new Node(LatLon.ZERO); ds.addPrimitive(n); OsmDataLayer layer = new OsmDataLayer(ds, "", null); ds.setSelected(n); try { Main.getLayerManager().addLayer(layer); assertEquals(1, ds.getSelected().size()); assertEquals(1, ds.allPrimitives().size()); action.actionPerformed(null); assertEquals(1, ds.allPrimitives().size()); } finally { Main.getLayerManager().removeLayer(layer); } } /** * Test with a single node, that belongs to a single way. */ @Test public void testSingleNodeInSingleWay() { DataSet ds = new DataSet(); Node n1 = new Node(LatLon.ZERO); ds.addPrimitive(n1); Node n2 = new Node(new LatLon(1.0, 1.0)); ds.addPrimitive(n2); Way w = new Way(); w.addNode(n1); w.addNode(n2); ds.addPrimitive(w); OsmDataLayer layer = new OsmDataLayer(ds, "", null); ds.setSelected(n1); try { Main.getLayerManager().addLayer(layer); assertEquals(1, ds.getSelected().size()); assertEquals(3, ds.allPrimitives().size()); action.actionPerformed(null); assertEquals(3, ds.allPrimitives().size()); } finally { Main.getLayerManager().removeLayer(layer); } } /** * Test with a single node, that belongs to two ways. */ @Test public void testSingleNodeInTwoWays() { DataSet ds = new DataSet(); Node n1 = new Node(LatLon.ZERO); ds.addPrimitive(n1); Node n2 = new Node(new LatLon(1.0, 1.0)); ds.addPrimitive(n2); Way w1 = new Way(); w1.addNode(n1); w1.addNode(n2); ds.addPrimitive(w1); Node n3 = new Node(new LatLon(-1.0, -1.0)); ds.addPrimitive(n3); Way w2 = new Way(); w2.addNode(n1); w2.addNode(n3); ds.addPrimitive(w2); OsmDataLayer layer = new OsmDataLayer(ds, "", null); ds.setSelected(n1); try { Main.getLayerManager().addLayer(layer); assertEquals(1, ds.getSelected().size()); assertEquals(5, ds.allPrimitives().size()); action.actionPerformed(null); assertEquals(6, ds.allPrimitives().size()); } finally { Main.getLayerManager().removeLayer(layer); } } }