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

Last change on this file since 8871 was 8857, checked in by Don-vip, 9 years ago

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