// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.datatransfer.data; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Map; 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.OsmPrimitiveType; import org.openstreetmap.josm.data.osm.PrimitiveData; import org.openstreetmap.josm.data.osm.RelationData; import org.openstreetmap.josm.data.osm.TagCollection; import org.openstreetmap.josm.data.osm.WayData; import org.openstreetmap.josm.testutils.JOSMTestRules; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Test {@link PrimitiveTagTransferData} * @author Michael Zangl */ public class PrimitiveTagTransferDataTest { /** * Prefs only required because of the dependencies of OSM primitives. */ @Rule @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD") public JOSMTestRules test = new JOSMTestRules().preferences(); private static boolean isHeterogeneousSource(PrimitiveData... t) { return new PrimitiveTagTransferData(Arrays.asList(t)).isHeterogeneousSource(); } /** * Test method for {@link PrimitiveTagTransferData#PrimitiveTagTransferData(PrimitiveTransferData)}. */ @Test public void testPrimitiveTagTransferDataPrimitiveTransferData() { PrimitiveTagTransferData data = new PrimitiveTagTransferData(PrimitiveTransferData.getData(Arrays.asList(new Node(), new Node()))); assertEquals(2, data.getSourcePrimitiveCount(OsmPrimitiveType.NODE)); assertEquals(0, data.getSourcePrimitiveCount(OsmPrimitiveType.WAY)); assertEquals(0, data.getSourcePrimitiveCount(OsmPrimitiveType.RELATION)); } /** * Test method for {@link PrimitiveTagTransferData#isHeterogeneousSource()}. */ @Test public void testIsHeterogeneousSource() { // 0 item assertFalse(isHeterogeneousSource()); // 1 item assertFalse(isHeterogeneousSource(new NodeData())); assertFalse(isHeterogeneousSource(new WayData())); assertFalse(isHeterogeneousSource(new RelationData())); // 2 items of same type assertFalse(isHeterogeneousSource(new NodeData(), new NodeData())); assertFalse(isHeterogeneousSource(new WayData(), new WayData())); assertFalse(isHeterogeneousSource(new RelationData(), new RelationData())); // 2 items of different type assertTrue(isHeterogeneousSource(new NodeData(), new WayData())); assertTrue(isHeterogeneousSource(new NodeData(), new RelationData())); assertTrue(isHeterogeneousSource(new WayData(), new RelationData())); } /** * Test method for {@link PrimitiveTagTransferData#getForPrimitives(OsmPrimitiveType)}. */ @Test public void testGetForPrimitives() { PrimitiveTagTransferData data = createTestData(); TagCollection forNode = data.getForPrimitives(OsmPrimitiveType.NODE); assertEquals(1, forNode.getKeys().size()); assertEquals(2, forNode.getValues("k").size()); TagCollection forWay = data.getForPrimitives(OsmPrimitiveType.WAY); assertEquals(1, forWay.getKeys().size()); assertEquals(1, forWay.getValues("x").size()); TagCollection forRelation = data.getForPrimitives(OsmPrimitiveType.RELATION); assertEquals(0, forRelation.getKeys().size()); } private PrimitiveTagTransferData createTestData() { NodeData nd1 = new NodeData(); nd1.put("k", "v"); NodeData nd2 = new NodeData(); nd2.put("k", "v2"); WayData way = new WayData(); way.put("x", "v"); return new PrimitiveTagTransferData(Arrays.asList(nd1, nd2, way)); } /** * Test method for {@link PrimitiveTagTransferData#getSourcePrimitiveCount(OsmPrimitiveType)}. */ @Test public void testGetSourcePrimitiveCount() { PrimitiveTagTransferData data = createTestData(); assertEquals(2, data.getSourcePrimitiveCount(OsmPrimitiveType.NODE)); assertEquals(1, data.getSourcePrimitiveCount(OsmPrimitiveType.WAY)); assertEquals(0, data.getSourcePrimitiveCount(OsmPrimitiveType.RELATION)); } /** * Test method for {@link PrimitiveTagTransferData#getStatistics()}. */ @Test public void testGetStatistics() { PrimitiveTagTransferData data = createTestData(); Map<OsmPrimitiveType, Integer> stats = data.getStatistics(); assertEquals(2, (int) stats.get(OsmPrimitiveType.NODE)); assertEquals(1, (int) stats.get(OsmPrimitiveType.WAY)); assertEquals(null, stats.get(OsmPrimitiveType.RELATION)); } }