// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.actions;
import static org.junit.Assert.assertFalse;
import java.util.Arrays;
import org.junit.Rule;
import org.junit.Test;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.data.coor.EastNorth;
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;
import org.openstreetmap.josm.testutils.JOSMTestRules;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
/**
* Unit tests for class {@link UnJoinNodeWayAction}.
*/
public final class UnJoinNodeWayActionTest {
/**
* Prepare the class for the test. The notification system must be disabled.
*/
public static class UnJoinNodeWayActionTestClass extends UnJoinNodeWayAction {
/**
* Disable notification.
*/
@Override
public void notify(String msg, int messageType) {
return;
}
}
/**
* Setup test.
*/
@Rule
@SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public JOSMTestRules test = new JOSMTestRules().platform();
/**
* Test case: Ignore irrelevant nodes
* We create a three node way, then try to remove central node while another
* node outside is selected.
* see #10396
*/
@Test
public void testTicket10396() {
DataSet dataSet = new DataSet();
OsmDataLayer layer = new OsmDataLayer(dataSet, OsmDataLayer.createNewName(), null);
Node n1 = new Node(new EastNorth(-1, -1));
Node n2 = new Node(new EastNorth(0, 0));
Node n3 = new Node(new EastNorth(1, -1));
Node n4 = new Node(new EastNorth(0, 1));
dataSet.addPrimitive(n1);
dataSet.addPrimitive(n2);
dataSet.addPrimitive(n3);
dataSet.addPrimitive(n4);
Way w = new Way();
w.setNodes(Arrays.asList(new Node[] {n1, n2, n3}));
dataSet.addPrimitive(w);
dataSet.addSelected(n2);
dataSet.addSelected(n4);
dataSet.addSelected(w);
UnJoinNodeWayActionTestClass action = new UnJoinNodeWayActionTestClass();
action.setEnabled(true);
try {
Main.getLayerManager().addLayer(layer);
action.actionPerformed(null);
} finally {
// Ensure we clean the place before leaving, even if test fails.
Main.getLayerManager().removeLayer(layer);
}
// Ensures node n2 remove from w
assertFalse("Node n2 wasn't removed from way w.", w.containsNode(n2));
}
}