source: josm/trunk/test/unit/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModelTest.java@ 3034

Last change on this file since 3034 was 3034, checked in by jttt, 14 years ago

Fix #4467 Don't silently drop locally deleted member primitives from downloaded ways and relation (fix the issue when deleted primitive is referenced)

File size: 4.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.conflict.properties;
3
4import static org.junit.Assert.assertEquals;
5import static org.junit.Assert.assertFalse;
6import static org.junit.Assert.assertTrue;
7
8import java.util.Observable;
9import java.util.Observer;
10
11import org.junit.Before;
12import org.junit.Test;
13import org.openstreetmap.josm.Main;
14import org.openstreetmap.josm.data.conflict.Conflict;
15import org.openstreetmap.josm.data.coor.LatLon;
16import org.openstreetmap.josm.data.osm.DataSet;
17import org.openstreetmap.josm.data.osm.Node;
18import org.openstreetmap.josm.data.osm.OsmPrimitive;
19import org.openstreetmap.josm.data.osm.Relation;
20import org.openstreetmap.josm.data.osm.Way;
21import org.openstreetmap.josm.data.projection.Epsg4326;
22import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
23import org.openstreetmap.josm.gui.conflict.pair.properties.PropertiesMergeModel;
24
25public class PropertiesMergeModelTest {
26
27 static public class ObserverTest implements Observer {
28 public int numInvocations;
29
30 public void update(Observable o, Object arg) {
31 numInvocations++;
32 test();
33 }
34
35 public void test() {
36 }
37
38 public void assertNumInvocations(int count) {
39 assertEquals(count, numInvocations);
40 }
41 }
42
43 PropertiesMergeModel model;
44
45 @Before
46 public void setUp() {
47 model = new PropertiesMergeModel();
48 Main.proj = new Epsg4326();
49 }
50
51 private void populate(OsmPrimitive my, OsmPrimitive their) {
52 model.populate(new Conflict<OsmPrimitive>(my, their));
53 }
54
55 @Test
56 public void populate() {
57 DataSet d1 = new DataSet();
58 DataSet d2 = new DataSet();
59 Node n1 = new Node(1);
60 Node n2 = new Node(1);
61 d1.addPrimitive(n1);
62 d2.addPrimitive(n2);
63 populate(n1, n2);
64
65 Way w1 = new Way(1);
66 Way w2 = new Way(1);
67 d1.addPrimitive(w1);
68 d2.addPrimitive(w2);
69 populate(w2, w2);
70
71 Relation r1 = new Relation(1);
72 Relation r2 = new Relation(1);
73 d1.addPrimitive(r1);
74 d2.addPrimitive(r2);
75 populate(r1, r2);
76 }
77
78 @Test
79 public void decidingAboutCoords() {
80 DataSet d1 = new DataSet();
81 DataSet d2 = new DataSet();
82
83 Node n1 = new Node(1);
84 Node n2 = new Node(1);
85 d1.addPrimitive(n1);
86 d2.addPrimitive(n2);
87 populate(n1, n2);
88 assertFalse(model.hasCoordConflict());
89
90 n1.setCoor(new LatLon(1,1));
91 populate(n1, n2);
92 assertTrue(model.hasCoordConflict());
93
94
95 n1.cloneFrom(new Node(1));
96 n2.setCoor(new LatLon(2,2));
97 populate(n1, n2);
98 assertTrue(model.hasCoordConflict());
99
100 n1.setCoor(new LatLon(1,1));
101 n2.setCoor(new LatLon(2,2));
102 populate(n1, n2);
103 assertTrue(model.hasCoordConflict());
104
105 // decide KEEP_MINE and ensure notification via Observable
106 //
107 ObserverTest observerTest;
108 model.addObserver(
109 observerTest = new ObserverTest() {
110 @Override
111 public void test() {
112 assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_MINE));
113 }
114 }
115 );
116 model.decideCoordsConflict(MergeDecisionType.KEEP_MINE);
117 assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_MINE));
118 observerTest.assertNumInvocations(1);
119
120 // decide KEEP_THEIR and ensure notification via Observable
121 //
122 model.deleteObserver(observerTest);
123 model.addObserver(
124 observerTest = new ObserverTest() {
125 @Override
126 public void test() {
127 assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_THEIR));
128 }
129 }
130 );
131 model.decideCoordsConflict(MergeDecisionType.KEEP_THEIR);
132 assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_THEIR));
133 observerTest.assertNumInvocations(1);
134 model.deleteObserver(observerTest);
135 }
136
137
138}
Note: See TracBrowser for help on using the repository browser.