source: josm/trunk/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeModelTest.java@ 2745

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

Fix some of the warnings found by FindBugs

File size: 7.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.conflict.tags;
3
4import static org.fest.reflect.core.Reflection.field;
5import static org.junit.Assert.assertEquals;
6import static org.junit.Assert.assertNull;
7
8import java.beans.PropertyChangeEvent;
9import java.beans.PropertyChangeListener;
10import java.util.ArrayList;
11
12import org.junit.Test;
13import org.openstreetmap.josm.data.osm.Node;
14import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
15import org.openstreetmap.josm.gui.conflict.pair.tags.TagMergeItem;
16import org.openstreetmap.josm.gui.conflict.pair.tags.TagMergeModel;
17
18public class TagMergeModelTest {
19
20 @Test
21 public void addPropertyChangeListener() {
22 TagMergeModel model = new TagMergeModel();
23 PropertyChangeListener listener = new PropertyChangeListener() {
24
25 public void propertyChange(PropertyChangeEvent evt) {
26 }
27 };
28 model.addPropertyChangeListener(listener);
29
30 ArrayList<?> list = field("listeners").ofType(ArrayList.class)
31 .in(model)
32 .get();
33
34 assertEquals(1, list.size());
35 assertEquals(listener, list.get(0));
36 }
37
38 @Test
39 public void removePropertyChangeListener() {
40 TagMergeModel model = new TagMergeModel();
41 PropertyChangeListener listener = new PropertyChangeListener() {
42
43 public void propertyChange(PropertyChangeEvent evt) {
44 }
45 };
46 model.addPropertyChangeListener(listener);
47 model.removePropertyChangeListener(listener);
48
49 ArrayList<?> list = field("listeners")
50 .ofType(ArrayList.class)
51 .in(model)
52 .get();
53
54 assertEquals(0, list.size());
55 }
56
57 @Test
58 public void populateNoConflichts() {
59 Node my = new Node(1);
60 Node their = new Node(1);
61 TagMergeModel model = new TagMergeModel();
62 model.populate(my, their);
63
64 ArrayList<TagMergeItem> list = field("tagMergeItems")
65 .ofType(ArrayList.class)
66 .in(model)
67 .get();
68
69 assertEquals(0, list.size());
70 }
71
72 @Test
73 public void populateNoConflicts1() {
74 Node my = new Node(1);
75 my.put("key", "value");
76 Node their = new Node(1);
77 their.put("key", "value");
78 TagMergeModel model = new TagMergeModel();
79 model.populate(my, their);
80
81 ArrayList<TagMergeItem> list = field("tagMergeItems")
82 .ofType(ArrayList.class)
83 .in(model)
84 .get();
85
86 assertEquals(0, list.size());
87 }
88
89 @Test
90 public void populateMissingKeyMine() {
91 Node my = new Node(1);
92 Node their = new Node(1);
93 their.put("key", "value");
94 TagMergeModel model = new TagMergeModel();
95 model.populate(my, their);
96
97 ArrayList<TagMergeItem> list = field("tagMergeItems")
98 .ofType(ArrayList.class)
99 .in(model)
100 .get();
101
102 assertEquals(1, list.size());
103 TagMergeItem item = list.get(0);
104 assertEquals(MergeDecisionType.UNDECIDED, item.getMergeDecision());
105 assertEquals("key", item.getKey());
106 assertNull(item.getMyTagValue());
107 assertEquals("value", item.getTheirTagValue());
108 }
109
110 @Test
111 public void populateMissingKeyTheir() {
112 Node my = new Node(1);
113 my.put("key", "value");
114 Node their = new Node(1);
115 TagMergeModel model = new TagMergeModel();
116 model.populate(my, their);
117
118 ArrayList<TagMergeItem> list = field("tagMergeItems")
119 .ofType(ArrayList.class)
120 .in(model)
121 .get();
122
123 assertEquals(1, list.size());
124 TagMergeItem item = list.get(0);
125 assertEquals(MergeDecisionType.UNDECIDED, item.getMergeDecision());
126 assertEquals("key", item.getKey());
127 assertNull(item.getTheirTagValue());
128 assertEquals("value", item.getMyTagValue());
129 }
130
131 @Test
132 public void populateConflictingValues() {
133 Node my = new Node(1);
134 my.put("key", "myvalue");
135 Node their = new Node(1);
136 their.put("key", "theirvalue");
137 TagMergeModel model = new TagMergeModel();
138 model.populate(my, their);
139
140 ArrayList<TagMergeItem> list = field("tagMergeItems")
141 .ofType(ArrayList.class)
142 .in(model)
143 .get();
144
145 assertEquals(1, list.size());
146 TagMergeItem item = list.get(0);
147 assertEquals(MergeDecisionType.UNDECIDED, item.getMergeDecision());
148 assertEquals("key", item.getKey());
149 assertEquals("myvalue", item.getMyTagValue());
150 assertEquals("theirvalue", item.getTheirTagValue());
151 }
152
153 @Test
154 public void addItem() {
155 TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
156 TagMergeModel model = new TagMergeModel();
157 model.addItem(item);
158
159 ArrayList<TagMergeItem> list = field("tagMergeItems")
160 .ofType(ArrayList.class)
161 .in(model)
162 .get();
163
164 assertEquals(1, list.size());
165 item = list.get(0);
166 assertEquals(MergeDecisionType.UNDECIDED, item.getMergeDecision());
167 assertEquals("key", item.getKey());
168 assertEquals("myvalue", item.getMyTagValue());
169 assertEquals("theirvalue", item.getTheirTagValue());
170 }
171
172 @Test
173 public void decide() {
174 TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
175 TagMergeModel model = new TagMergeModel();
176 model.addItem(item);
177
178 ArrayList<TagMergeItem> list = field("tagMergeItems")
179 .ofType(ArrayList.class)
180 .in(model)
181 .get();
182
183 model.decide(0, MergeDecisionType.KEEP_MINE);
184 assertEquals(1, list.size());
185 item = list.get(0);
186 assertEquals(MergeDecisionType.KEEP_MINE, item.getMergeDecision());
187
188 model.decide(0, MergeDecisionType.KEEP_THEIR);
189 assertEquals(1, list.size());
190 item = list.get(0);
191 assertEquals(MergeDecisionType.KEEP_THEIR, item.getMergeDecision());
192
193 model.decide(0, MergeDecisionType.UNDECIDED);
194 assertEquals(1, list.size());
195 item = list.get(0);
196 assertEquals(MergeDecisionType.UNDECIDED, item.getMergeDecision());
197 }
198
199 @Test
200 public void decideMultiple() {
201
202 TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
203 TagMergeModel model = new TagMergeModel();
204 for (int i=0; i < 10; i++) {
205 model.addItem(new TagMergeItem("key-" + i, "myvalue-" + i, "theirvalue-" +i));
206 }
207
208 ArrayList<TagMergeItem> list = field("tagMergeItems")
209 .ofType(ArrayList.class)
210 .in(model)
211 .get();
212
213 assertEquals(10, list.size());
214
215 model.decide(new int[] {0, 3, 5}, MergeDecisionType.KEEP_MINE);
216 for (int i = 0; i< 10; i++) {
217 item = list.get(i);
218 if (i == 0 || i == 3 || i == 5) {
219 assertEquals(MergeDecisionType.KEEP_MINE, item.getMergeDecision());
220 } else {
221 assertEquals(MergeDecisionType.UNDECIDED, item.getMergeDecision());
222 }
223 }
224 }
225}
Note: See TracBrowser for help on using the repository browser.