// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.dialogs.layer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.io.InputStream;
import org.junit.Rule;
import org.junit.Test;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.TestUtils;
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
import org.openstreetmap.josm.io.OsmReader;
import org.openstreetmap.josm.testutils.JOSMTestRules;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
/**
* Unit tests of {@link DuplicateAction} class.
*/
public class DuplicateActionTest {
/**
* TMS layer needs prefs. Platform for LayerListDialog shortcuts.
*/
@Rule
@SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public JOSMTestRules test = new JOSMTestRules().preferences();
/**
* Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/4539">#4539</a>.
* @throws Exception if an error occurs
*/
@Test
public void testTicket4539() throws Exception {
try (InputStream is = TestUtils.getRegressionDataStream(4539, "josm_error_#4539.osm.zip")) {
OsmDataLayer layer = new OsmDataLayer(OsmReader.parseDataSet(is, null), null, null);
OsmDataLayer editLayer = Main.getLayerManager().getEditLayer();
assertNull(editLayer);
try {
new DuplicateAction(layer, null).actionPerformed(null);
editLayer = Main.getLayerManager().getEditLayer();
assertNotNull(editLayer);
assertFalse(layer.equals(editLayer));
assertEquals(layer.data.getNodes().size(), editLayer.data.getNodes().size());
assertEquals(layer.data.getWays().size(), editLayer.data.getWays().size());
assertEquals(layer.data.getRelations().size(), editLayer.data.getRelations().size());
} finally {
// Ensure we clean the place before leaving, even if test fails.
if (editLayer != null) {
Main.getLayerManager().removeLayer(editLayer);
}
}
}
}
}