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

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

see #16567 - rewrite ImageDataTest to get rid of problematic JMockit annotation

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