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

Last change on this file since 10962 was 10962, checked in by Don-vip, 8 years ago

improve unit tests

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