// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.conflict.pair.tags;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import org.junit.Rule;
import org.junit.Test;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.data.osm.Node;
import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
import org.openstreetmap.josm.testutils.JOSMTestRules;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
/**
* Unit tests of {@link TagMergeItem} class.
*/
public class TagMergeItemTest {
/**
* Setup test.
*/
@Rule
@SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public JOSMTestRules test = new JOSMTestRules();
@Test
public void testTagMergeItem() {
TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
assertEquals("key", item.getKey());
assertEquals("myvalue", item.getMyTagValue());
assertEquals("theirvalue", item.getTheirTagValue());
assertEquals(MergeDecisionType.UNDECIDED, item.getMergeDecision());
}
@Test
public void testTagMergeItem2() {
Node n1 = new Node(1);
Node n2 = new Node(1);
n1.put("key", "myvalue");
n2.put("key", "theirvalue");
TagMergeItem item = new TagMergeItem("key", n1, n2);
assertEquals("key", item.getKey());
assertEquals("myvalue", item.getMyTagValue());
assertEquals("theirvalue", item.getTheirTagValue());
assertEquals(MergeDecisionType.UNDECIDED, item.getMergeDecision());
}
@Test
public void testTagMergeItem3() {
Node n1 = new Node(1);
Node n2 = new Node(1);
n1.put("key", "myvalue");
// n2 does not have this key
TagMergeItem item = new TagMergeItem("key", n1, n2);
assertEquals("key", item.getKey());
assertEquals("myvalue", item.getMyTagValue());
assertNull(item.getTheirTagValue());
assertEquals(MergeDecisionType.UNDECIDED, item.getMergeDecision());
}
@Test
public void testTagMergeItem4() {
Node n1 = new Node(1);
Node n2 = new Node(1);
// n1 does not have this key
// n1.put("key", "myvalue");
n2.put("key", "theirvalue");
TagMergeItem item = new TagMergeItem("key", n1, n2);
assertEquals("key", item.getKey());
assertNull(item.getMyTagValue());
assertEquals("theirvalue", item.getTheirTagValue());
assertEquals(MergeDecisionType.UNDECIDED, item.getMergeDecision());
}
@Test
public void testDecide() {
TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
item.decide(MergeDecisionType.KEEP_MINE);
assertEquals(MergeDecisionType.KEEP_MINE, item.getMergeDecision());
}
@Test
public void testDecide1() {
TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
try {
item.decide(null);
fail("expected IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
// OK
Main.trace(e);
}
}
@Test
public void testApplyToMyPrimitive() {
TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
item.decide(MergeDecisionType.KEEP_MINE);
Node n1 = new Node(1);
n1.put("key", "oldvalue");
item.applyToMyPrimitive(n1);
assertEquals("myvalue", n1.get("key"));
n1 = new Node(1);
item.applyToMyPrimitive(n1);
assertEquals("myvalue", n1.get("key"));
}
@Test
public void testApplyToMyPrimitive2() {
TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
item.decide(MergeDecisionType.KEEP_THEIR);
Node n1 = new Node(1);
n1.put("key", "oldvalue");
item.applyToMyPrimitive(n1);
assertEquals("theirvalue", n1.get("key"));
n1 = new Node(1);
item.applyToMyPrimitive(n1);
assertEquals("theirvalue", n1.get("key"));
}
@Test
public void testApplyToMyPrimitive3() {
TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
// item is undecided
// item.decide(MergeDecisionType.KEEP_THEIR);
Node n1 = new Node(1);
n1.put("key", "oldvalue");
try {
item.applyToMyPrimitive(n1);
fail("expected IllegalStateException");
} catch (IllegalStateException e) {
// OK
Main.trace(e);
}
}
@Test
public void testApplyToMyPrimitive4() {
TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
try {
item.applyToMyPrimitive(null);
fail("expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// OK
Main.trace(e);
}
}
}