// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.conflict.tags; 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.Collections; import java.util.List; import org.junit.Rule; import org.junit.Test; 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.Relation; import org.openstreetmap.josm.data.osm.RelationMember; import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.testutils.JOSMTestRules; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Unit tests of {@link RelationMemberConflictResolverModel} class. */ public class RelationMemberConflictResolverModelTest { /** * Setup test. */ @Rule @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD") public JOSMTestRules test = new JOSMTestRules(); List<Way> buildTestDataSet() { final DataSet ds = new DataSet(); final Node n1 = new Node(new LatLon(1, 1)); final Node n2 = new Node(new LatLon(2, 2)); final Node n3 = new Node(new LatLon(3, 3)); final Way w1 = new Way(); final Way w2 = new Way(); final Way w3 = new Way(); ds.addPrimitive(n1); ds.addPrimitive(n2); ds.addPrimitive(n3); ds.addPrimitive(w1); ds.addPrimitive(w2); ds.addPrimitive(w3); w1.addNode(n1); w1.addNode(n2); w2.addNode(n2); w2.addNode(n3); w3.addNode(n3); w3.addNode(n1); return Arrays.asList(w1, w2, w3); } @Test public void testSameRoles() throws Exception { final List<Way> ways = buildTestDataSet(); final Relation r = new Relation(); r.addMember(new RelationMember("foo", ways.get(0))); r.addMember(new RelationMember("foo", ways.get(1))); final RelationMemberConflictResolverModel model = new RelationMemberConflictResolverModel(); model.populate(Collections.singleton(r), ways.subList(0, 2)); model.prepareDefaultRelationDecisions(); assertTrue(model.isResolvedCompletely()); assertEquals(RelationMemberConflictDecisionType.KEEP, model.getDecision(0).getDecision()); assertEquals(ways.get(0), model.getDecision(0).getOriginalPrimitive()); assertEquals("foo", model.getDecision(0).getRole()); assertEquals(RelationMemberConflictDecisionType.REMOVE, model.getDecision(1).getDecision()); assertEquals(ways.get(1), model.getDecision(1).getOriginalPrimitive()); } @Test public void testDifferentRoles() throws Exception { final List<Way> ways = buildTestDataSet(); final Relation r = new Relation(); r.addMember(new RelationMember("foo", ways.get(0))); r.addMember(new RelationMember("bar", ways.get(1))); final RelationMemberConflictResolverModel model = new RelationMemberConflictResolverModel(); model.populate(Collections.singleton(r), ways.subList(0, 2)); model.prepareDefaultRelationDecisions(); assertFalse(model.isResolvedCompletely()); } @Test public void testDifferentPresence() throws Exception { final List<Way> ways = buildTestDataSet(); final Relation r = new Relation(); r.addMember(new RelationMember("foo", ways.get(0))); final RelationMemberConflictResolverModel model = new RelationMemberConflictResolverModel(); model.populate(Collections.singleton(r), ways.subList(0, 2)); model.prepareDefaultRelationDecisions(); assertFalse(model.isResolvedCompletely()); } @Test public void testEveryMemberIsPresentTwice() throws Exception { final List<Way> ways = buildTestDataSet(); final Relation r = new Relation(); r.addMember(new RelationMember("foo", ways.get(0))); r.addMember(new RelationMember("foo", ways.get(1))); r.addMember(new RelationMember("xoo", ways.get(2))); r.addMember(new RelationMember("bar", ways.get(0))); r.addMember(new RelationMember("bar", ways.get(1))); r.addMember(new RelationMember("xoo", ways.get(2))); final RelationMemberConflictResolverModel model = new RelationMemberConflictResolverModel(); model.populate(Collections.singleton(r), ways.subList(0, 2)); model.prepareDefaultRelationDecisions(); assertTrue(model.isResolvedCompletely()); assertEquals(RelationMemberConflictDecisionType.KEEP, model.getDecision(0).getDecision()); assertEquals(ways.get(0), model.getDecision(0).getOriginalPrimitive()); assertEquals("foo", model.getDecision(0).getRole()); assertEquals(RelationMemberConflictDecisionType.KEEP, model.getDecision(1).getDecision()); assertEquals(ways.get(0), model.getDecision(1).getOriginalPrimitive()); assertEquals("bar", model.getDecision(1).getRole()); assertEquals(RelationMemberConflictDecisionType.REMOVE, model.getDecision(2).getDecision()); assertEquals(RelationMemberConflictDecisionType.REMOVE, model.getDecision(3).getDecision()); } }