// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.datatransfer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.openstreetmap.josm.data.osm.Node;
import org.openstreetmap.josm.data.osm.NodeData;
import org.openstreetmap.josm.data.osm.PrimitiveData;
import org.openstreetmap.josm.gui.datatransfer.data.PrimitiveTransferData;
import org.openstreetmap.josm.gui.datatransfer.data.TagTransferData;
import org.openstreetmap.josm.testutils.JOSMTestRules;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
/**
* Unit tests of {@link PrimitiveTransferable} class.
*/
public class PrimitiveTransferableTest {
/**
* Prefs to use OSM primitives
*/
@Rule
@SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public JOSMTestRules test = new JOSMTestRules().preferences();
/**
* Test of {@link PrimitiveTransferable#getTransferDataFlavors()} method response order
*/
@Test
public void testGetTransferDataFlavors() {
List<DataFlavor> flavors = Arrays.asList(new PrimitiveTransferable(null).getTransferDataFlavors());
int ptd = flavors.indexOf(PrimitiveTransferData.DATA_FLAVOR);
int tags = flavors.indexOf(TagTransferData.FLAVOR);
int string = flavors.indexOf(DataFlavor.stringFlavor);
assertTrue(ptd >= 0);
assertTrue(tags >= 0);
assertTrue(string >= 0);
assertTrue(ptd < tags);
assertTrue(tags < string);
}
/**
* Test of {@link PrimitiveTransferable#isDataFlavorSupported} method.
*/
@Test
public void testIsDataFlavorSupported() {
assertTrue(new PrimitiveTransferable(null).isDataFlavorSupported(PrimitiveTransferData.DATA_FLAVOR));
assertFalse(new PrimitiveTransferable(null).isDataFlavorSupported(DataFlavor.imageFlavor));
}
/**
* Test of {@link PrimitiveTransferable#getTransferData} method - nominal case.
* @throws UnsupportedFlavorException never
*/
@Test
public void testGetTransferDataNominal() throws UnsupportedFlavorException {
PrimitiveTransferData data = PrimitiveTransferData.getData(Collections.singleton(new Node(1)));
PrimitiveTransferable pt = new PrimitiveTransferable(data);
assertEquals("node 1", pt.getTransferData(DataFlavor.stringFlavor));
Collection<PrimitiveData> td = ((PrimitiveTransferData) pt.getTransferData(PrimitiveTransferData.DATA_FLAVOR)).getAll();
assertEquals(1, td.size());
assertTrue(td.iterator().next() instanceof NodeData);
data = PrimitiveTransferData.getData(Arrays.asList(new Node(1), new Node(2)));
pt = new PrimitiveTransferable(data);
assertEquals("node 1\nnode 2", pt.getTransferData(DataFlavor.stringFlavor));
}
/**
* Test of {@link PrimitiveTransferable#getTransferData} method - error case.
* @throws UnsupportedFlavorException always
*/
@Test(expected = UnsupportedFlavorException.class)
public void testGetTransferDataError() throws UnsupportedFlavorException {
PrimitiveTransferData data = PrimitiveTransferData.getData(Collections.singleton(new Node(1)));
new PrimitiveTransferable(data).getTransferData(DataFlavor.imageFlavor);
}
}