source: josm/trunk/test/unit/org/openstreetmap/josm/data/ImageDataTest.java@ 16802

Last change on this file since 16802 was 15352, checked in by Don-vip, 5 years ago

fix #18130 - Select next image after remove (patch by francois2)

  • Property svn:eol-style set to native
File size: 14.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data;
3
4import static org.junit.Assert.assertEquals;
5import static org.junit.Assert.assertFalse;
6import static org.junit.Assert.assertNull;
7import static org.junit.Assert.assertTrue;
8
9import java.io.File;
10import java.util.ArrayList;
11import java.util.Collections;
12import java.util.List;
13
14import org.junit.Test;
15import org.openstreetmap.josm.data.ImageData.ImageDataUpdateListener;
16import org.openstreetmap.josm.data.coor.LatLon;
17import org.openstreetmap.josm.gui.layer.geoimage.ImageEntry;
18
19import mockit.Expectations;
20import mockit.Mock;
21import mockit.MockUp;
22
23/**
24 * Unit tests for class {@link ImageData}.
25 */
26public class ImageDataTest {
27
28 private static List<ImageEntry> getOneImage() {
29 ArrayList<ImageEntry> list = new ArrayList<>();
30 list.add(new ImageEntry(new File("test")));
31 return list;
32 }
33
34 @Test
35 public void testWithNullData() {
36 ImageData data = new ImageData();
37 assertEquals(0, data.getImages().size());
38 assertNull(data.getSelectedImage());
39 data.selectFirstImage();
40 assertNull(data.getSelectedImage());
41 data.selectLastImage();
42 assertNull(data.getSelectedImage());
43 data.selectFirstImage();
44 assertNull(data.getSelectedImage());
45 data.selectPreviousImage();
46 assertNull(data.getSelectedImage());
47 assertFalse(data.hasNextImage());
48 assertFalse(data.hasPreviousImage());
49 data.removeSelectedImage();
50 }
51
52 @Test
53 public void testImageEntryWithImages() {
54 assertEquals(1, new ImageData(getOneImage()).getImages().size());
55 }
56
57 @Test
58 public void testSortData() {
59 List<ImageEntry> list = getOneImage();
60
61 new Expectations(Collections.class) {{
62 Collections.sort(list);
63 }};
64
65 new ImageData(list);
66 }
67
68 @Test
69 public void testIsModifiedFalse() {
70 assertFalse(new ImageData(getOneImage()).isModified());
71 }
72
73 @Test
74 public void testIsModifiedTrue() {
75 List<ImageEntry> list = getOneImage();
76
77 new Expectations(list.get(0)) {{
78 list.get(0).hasNewGpsData(); result = true;
79 }};
80
81 assertTrue(new ImageData(list).isModified());
82 }
83
84 @Test
85 public void testSelectFirstImage() {
86 List<ImageEntry> list = getOneImage();
87
88 ImageData data = new ImageData(list);
89 data.selectFirstImage();
90 assertEquals(1, data.getSelectedImages().size());
91 assertEquals(list.get(0), data.getSelectedImages().get(0));
92 }
93
94 @Test
95 public void testSelectLastImage() {
96 List<ImageEntry> list = getOneImage();
97 list.add(new ImageEntry());
98
99 ImageData data = new ImageData(list);
100 data.selectLastImage();
101 assertEquals(1, data.getSelectedImages().size());
102 assertEquals(list.get(1), data.getSelectedImages().get(0));
103 }
104
105 @Test
106 public void testSelectNextImage() {
107 List<ImageEntry> list = getOneImage();
108
109 ImageData data = new ImageData(list);
110 assertTrue(data.hasNextImage());
111 data.selectNextImage();
112 assertEquals(1, data.getSelectedImages().size());
113 assertEquals(list.get(0), data.getSelectedImages().get(0));
114 assertFalse(data.hasNextImage());
115 data.selectNextImage();
116 assertEquals(list.get(0), data.getSelectedImages().get(0));
117 }
118
119 @Test
120 public void testSelectPreviousImage() {
121 List<ImageEntry> list = getOneImage();
122 list.add(new ImageEntry());
123
124 ImageData data = new ImageData(list);
125 assertFalse(data.hasPreviousImage());
126 data.selectLastImage();
127 assertTrue(data.hasPreviousImage());
128 data.selectPreviousImage();
129 assertEquals(1, data.getSelectedImages().size());
130 assertEquals(list.get(0), data.getSelectedImages().get(0));
131 data.selectPreviousImage();
132 assertEquals(list.get(0), data.getSelectedImages().get(0));
133 }
134
135 @Test
136 public void testSetSelectedImage() {
137 List<ImageEntry> list = getOneImage();
138
139 ImageData data = new ImageData(list);
140 data.setSelectedImage(list.get(0));
141 assertEquals(1, data.getSelectedImages().size());
142 assertEquals(list.get(0), data.getSelectedImages().get(0));
143 }
144
145 @Test
146 public void testClearSelectedImages() {
147 List<ImageEntry> list = getOneImage();
148
149 ImageData data = new ImageData(list);
150 data.setSelectedImage(list.get(0));
151 data.clearSelectedImage();
152 assertTrue(data.getSelectedImages().isEmpty());
153 }
154
155 @Test
156 public void testSelectionListener() {
157 List<ImageEntry> list = getOneImage();
158 ImageData data = new ImageData(list);
159 ImageDataUpdateListener listener = new ImageDataUpdateListener() {
160 @Override
161 public void selectedImageChanged(ImageData data) {}
162
163 @Override
164 public void imageDataUpdated(ImageData data) {}
165 };
166 new Expectations(listener) {{
167 listener.selectedImageChanged(data); times = 1;
168 }};
169 data.addImageDataUpdateListener(listener);
170 data.selectFirstImage();
171 data.selectFirstImage();
172 }
173
174 @Test
175 public void testRemoveSelectedImage() {
176 List<ImageEntry> list = getOneImage();
177 ImageData data = new ImageData(list);
178 data.selectFirstImage();
179 data.removeSelectedImage();
180 assertEquals(0, data.getImages().size());
181 assertEquals(0, data.getSelectedImages().size());
182 }
183
184 @Test
185 public void testRemoveSelectedImages() {
186 List<ImageEntry> list = getOneImage();
187 list.add(new ImageEntry());
188
189 ImageData data = new ImageData(list);
190 data.selectFirstImage();
191 data.addImageToSelection(list.get(1));
192 data.removeSelectedImages();
193 assertEquals(0, data.getImages().size());
194 assertEquals(0, data.getSelectedImages().size());
195 }
196
197 @Test
198 public void testSelectImageAfterRemove() {
199 List<ImageEntry> list = getOneImage();
200 list.add(new ImageEntry());
201
202 ImageData data = new ImageData(list);
203 data.selectFirstImage();
204 data.removeSelectedImages();
205 assertEquals(1, data.getImages().size());
206 assertEquals(1, data.getSelectedImages().size());
207 assertEquals(list.get(0), data.getSelectedImages().get(0));
208 }
209
210 @Test
211 public void testSelectImageAfterRemoveWhenTheLastIsSelected() {
212 List<ImageEntry> list = getOneImage();
213 list.add(new ImageEntry());
214
215 ImageData data = new ImageData(list);
216 data.selectLastImage();
217 data.removeSelectedImages();
218 assertEquals(1, data.getImages().size());
219 assertEquals(1, data.getSelectedImages().size());
220 assertEquals(list.get(0), data.getSelectedImages().get(0));
221 }
222
223 @Test
224 public void testRemoveSelectedImageTriggerListener() {
225 List<ImageEntry> list = getOneImage();
226 list.add(new ImageEntry());
227 ImageData data = new ImageData(list);
228 ImageDataUpdateListener listener = new ImageDataUpdateListener() {
229 @Override
230 public void selectedImageChanged(ImageData data) {}
231
232 @Override
233 public void imageDataUpdated(ImageData data) {}
234 };
235 new Expectations(listener) {{
236 listener.selectedImageChanged(data); times = 2;
237 }};
238 data.addImageDataUpdateListener(listener);
239 data.selectFirstImage();
240 data.removeSelectedImage();
241 }
242
243 @Test
244 public void testRemoveSelectedImagesTriggerListener() {
245 List<ImageEntry> list = getOneImage();
246 list.add(new ImageEntry());
247 ImageData data = new ImageData(list);
248 ImageDataUpdateListener listener = new ImageDataUpdateListener() {
249 @Override
250 public void selectedImageChanged(ImageData data) {}
251
252 @Override
253 public void imageDataUpdated(ImageData data) {}
254 };
255 new Expectations(listener) {{
256 listener.selectedImageChanged(data); times = 2;
257 }};
258 data.addImageDataUpdateListener(listener);
259 data.selectFirstImage();
260 data.removeSelectedImages();
261 }
262
263 @Test
264 public void testRemoveImageAndTriggerListener() {
265 List<ImageEntry> list = getOneImage();
266 ImageData data = new ImageData(list);
267 ImageDataUpdateListener listener = new ImageDataUpdateListener() {
268 @Override
269 public void selectedImageChanged(ImageData data) {}
270
271 @Override
272 public void imageDataUpdated(ImageData data) {}
273 };
274 new Expectations(listener) {{
275 listener.imageDataUpdated(data); times = 1;
276 }};
277 data.addImageDataUpdateListener(listener);
278 data.removeImage(list.get(0));
279 assertEquals(0, data.getImages().size());
280 }
281
282 @Test
283 public void testMergeFrom() {
284 ImageEntry image = new ImageEntry(new File("test2"));
285 List<ImageEntry> list1 = getOneImage();
286 list1.add(image);
287 List<ImageEntry> list2 = getOneImage();
288 list2.add(new ImageEntry(new File("test3")));
289
290 ImageData data = new ImageData(list1);
291 data.setSelectedImage(list1.get(0));
292 ImageData data2 = new ImageData(list2);
293
294 new MockUp<Collections>() {
295 @Mock
296 public void sort(List<ImageEntry> o) {
297 list1.remove(image);
298 list1.add(image);
299 }
300 };
301
302 data.mergeFrom(data2);
303 assertEquals(3, data.getImages().size());
304 assertEquals(1, data.getSelectedImages().size());
305 assertEquals(list1.get(0), data.getSelectedImages().get(0));
306 }
307
308 @Test
309 public void testMergeFromSelectedImage() {
310 ImageEntry image = new ImageEntry(new File("test2"));
311 List<ImageEntry> list1 = getOneImage();
312 list1.add(image);
313 List<ImageEntry> list2 = getOneImage();
314
315 ImageData data = new ImageData(list1);
316 ImageData data2 = new ImageData(list2);
317 data2.setSelectedImage(list2.get(0));
318
319 data.mergeFrom(data2);
320 assertEquals(3, data.getImages().size());
321 assertEquals(1, data.getSelectedImages().size());
322 assertEquals(list2.get(0), data.getSelectedImages().get(0));
323 }
324
325 @Test
326 public void testAddImageToSelection() {
327 List<ImageEntry> list = getOneImage();
328 list.add(new ImageEntry(new File("test2")));
329
330 ImageData data = new ImageData(list);
331 data.addImageToSelection(list.get(0));
332 data.addImageToSelection(list.get(0));
333 assertEquals(1, data.getSelectedImages().size());
334 data.addImageToSelection(list.get(1));
335 assertEquals(2, data.getSelectedImages().size());
336 }
337
338 @Test
339 public void testRemoveImageToSelection() {
340 List<ImageEntry> list = getOneImage();
341 list.add(new ImageEntry());
342
343 ImageData data = new ImageData(list);
344 data.selectLastImage();
345 data.removeImageToSelection(list.get(1));
346 assertEquals(0, data.getSelectedImages().size());
347 data.selectFirstImage();
348 assertEquals(1, data.getSelectedImages().size());
349
350 }
351
352 @Test
353 public void testIsSelected() {
354 List<ImageEntry> list = getOneImage();
355 list.add(new ImageEntry(new File("test2")));
356
357 ImageData data = new ImageData(list);
358 assertFalse(data.isImageSelected(list.get(0)));
359 data.selectFirstImage();
360 assertTrue(data.isImageSelected(list.get(0)));
361 data.addImageToSelection(list.get(1));
362 assertTrue(data.isImageSelected(list.get(0)));
363 assertTrue(data.isImageSelected(list.get(1)));
364 assertFalse(data.isImageSelected(new ImageEntry()));
365 }
366
367 @Test
368 public void testActionsWithMultipleImagesSelected() {
369 List<ImageEntry> list = getOneImage();
370 list.add(new ImageEntry(new File("test2")));
371 list.add(new ImageEntry(new File("test3")));
372 list.add(new ImageEntry(new File("test3")));
373
374 ImageData data = new ImageData(list);
375 data.addImageToSelection(list.get(1));
376 data.addImageToSelection(list.get(2));
377
378 assertFalse(data.hasNextImage());
379 assertFalse(data.hasPreviousImage());
380
381 data.clearSelectedImage();
382 assertEquals(0, data.getSelectedImages().size());
383 data.addImageToSelection(list.get(1));
384 data.selectFirstImage();
385 assertEquals(1, data.getSelectedImages().size());
386 }
387
388 @Test
389 public void testTriggerListenerWhenNewImageIsSelectedAndRemoved() {
390 List<ImageEntry> list = getOneImage();
391 list.add(new ImageEntry());
392 ImageData data = new ImageData(list);
393 ImageDataUpdateListener listener = new ImageDataUpdateListener() {
394 @Override
395 public void selectedImageChanged(ImageData data) {}
396
397 @Override
398 public void imageDataUpdated(ImageData data) {}
399 };
400 new Expectations(listener) {{
401 listener.selectedImageChanged(data); times = 3;
402 }};
403 data.addImageDataUpdateListener(listener);
404 data.selectFirstImage();
405 data.addImageToSelection(list.get(1));
406 data.removeImageToSelection(list.get(0));
407 }
408
409 @Test
410 public void testUpdatePosition() {
411 List<ImageEntry> list = getOneImage();
412 ImageData data = new ImageData(list);
413
414 new Expectations(list.get(0)) {{
415 list.get(0).setPos((LatLon) any);
416 list.get(0).flagNewGpsData();
417 }};
418 data.updateImagePosition(list.get(0), new LatLon(0, 0));
419 }
420
421 @Test
422 public void testUpdateDirection() {
423 List<ImageEntry> list = getOneImage();
424 ImageData data = new ImageData(list);
425
426 new Expectations(list.get(0)) {{
427 list.get(0).setExifImgDir(0.0);
428 list.get(0).flagNewGpsData();
429 }};
430 data.updateImageDirection(list.get(0), 0);
431 }
432
433 @Test
434 public void testTriggerListenerOnUpdate() {
435 List<ImageEntry> list = getOneImage();
436 ImageData data = new ImageData(list);
437
438 ImageDataUpdateListener listener = new ImageDataUpdateListener() {
439 @Override
440 public void selectedImageChanged(ImageData data) {}
441
442 @Override
443 public void imageDataUpdated(ImageData data) {}
444 };
445 new Expectations(listener) {{
446 listener.imageDataUpdated(data); times = 1;
447 }};
448
449 data.addImageDataUpdateListener(listener);
450 data.updateImageDirection(list.get(0), 0);
451 }
452
453 @Test
454 public void testManuallyTriggerUpdateListener() {
455 List<ImageEntry> list = getOneImage();
456 ImageData data = new ImageData(list);
457
458 ImageDataUpdateListener listener = new ImageDataUpdateListener() {
459 @Override
460 public void selectedImageChanged(ImageData data) {}
461
462 @Override
463 public void imageDataUpdated(ImageData data) {}
464 };
465 new Expectations(listener) {{
466 listener.imageDataUpdated(data); times = 1;
467 }};
468
469 data.addImageDataUpdateListener(listener);
470 data.notifyImageUpdate();
471 }
472}
Note: See TracBrowser for help on using the repository browser.