// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.conflict.properties;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Observable;
import java.util.Observer;
import org.junit.Before;
import org.junit.Test;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.data.conflict.Conflict;
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.OsmPrimitive;
import org.openstreetmap.josm.data.osm.Relation;
import org.openstreetmap.josm.data.osm.Way;
import org.openstreetmap.josm.data.projection.Epsg4326;
import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
import org.openstreetmap.josm.gui.conflict.pair.properties.PropertiesMergeModel;
public class PropertiesMergeModelTest {
static public class ObserverTest implements Observer {
public int numInvocations;
public void update(Observable o, Object arg) {
numInvocations++;
test();
}
public void test() {
}
public void assertNumInvocations(int count) {
assertEquals(count, numInvocations);
}
}
PropertiesMergeModel model;
@Before
public void setUp() {
model = new PropertiesMergeModel();
Main.proj = new Epsg4326();
}
private void populate(OsmPrimitive my, OsmPrimitive their) {
model.populate(new Conflict<OsmPrimitive>(my, their));
}
@Test
public void populate() {
DataSet d1 = new DataSet();
DataSet d2 = new DataSet();
Node n1 = new Node(1);
Node n2 = new Node(1);
d1.addPrimitive(n1);
d2.addPrimitive(n2);
populate(n1, n2);
Way w1 = new Way(1);
Way w2 = new Way(1);
d1.addPrimitive(w1);
d2.addPrimitive(w2);
populate(w2, w2);
Relation r1 = new Relation(1);
Relation r2 = new Relation(1);
d1.addPrimitive(r1);
d2.addPrimitive(r2);
populate(r1, r2);
}
@Test
public void decidingAboutCoords() {
DataSet d1 = new DataSet();
DataSet d2 = new DataSet();
Node n1 = new Node(1);
Node n2 = new Node(1);
d1.addPrimitive(n1);
d2.addPrimitive(n2);
populate(n1, n2);
assertFalse(model.hasCoordConflict());
n1.setCoor(new LatLon(1,1));
populate(n1, n2);
assertTrue(model.hasCoordConflict());
n1.cloneFrom(new Node(1));
n2.setCoor(new LatLon(2,2));
populate(n1, n2);
assertTrue(model.hasCoordConflict());
n1.setCoor(new LatLon(1,1));
n2.setCoor(new LatLon(2,2));
populate(n1, n2);
assertTrue(model.hasCoordConflict());
// decide KEEP_MINE and ensure notification via Observable
//
ObserverTest observerTest;
model.addObserver(
observerTest = new ObserverTest() {
@Override
public void test() {
assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_MINE));
}
}
);
model.decideCoordsConflict(MergeDecisionType.KEEP_MINE);
assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_MINE));
observerTest.assertNumInvocations(1);
// decide KEEP_THEIR and ensure notification via Observable
//
model.deleteObserver(observerTest);
model.addObserver(
observerTest = new ObserverTest() {
@Override
public void test() {
assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_THEIR));
}
}
);
model.decideCoordsConflict(MergeDecisionType.KEEP_THEIR);
assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_THEIR));
observerTest.assertNumInvocations(1);
model.deleteObserver(observerTest);
}
}