1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.imaging.formats.jpeg.exif;
19
20 import java.io.File;
21 import java.io.IOException;
22 import java.util.List;
23 import java.util.stream.Stream;
24
25 import org.apache.commons.imaging.Imaging;
26 import org.apache.commons.imaging.ImagingException;
27 import org.apache.commons.imaging.common.ImageMetadata;
28 import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
29 import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
30 import org.apache.commons.imaging.formats.tiff.TiffField;
31 import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
32 import org.junit.jupiter.params.ParameterizedTest;
33 import org.junit.jupiter.params.provider.MethodSource;
34
35 public abstract class AbstractSpecificExifTagTest extends AbstractExifTest {
36
37 public static Stream<File> data() throws Exception {
38 return getImagesWithExifData().stream();
39 }
40
41 protected abstract void checkField(File imageFile, TiffField field) throws IOException, ImagingException, ImagingException;
42
43 private void checkImage(final File imageFile) throws IOException, ImagingException, ImagingException {
44
45
46 final JpegImagingParameters params = new JpegImagingParameters();
47
48
49 final ImageMetadata metadata = Imaging.getMetadata(imageFile);
50 if (null == metadata) {
51 return;
52 }
53 final JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
54
55
56 final TiffImageMetadata exif = jpegMetadata.getExif();
57 if (null == exif) {
58 return;
59 }
60
61 final List<TiffField> fields = exif.getAllFields();
62 for (final TiffField field : fields) {
63 checkField(imageFile, field);
64 }
65
66 }
67
68 @ParameterizedTest
69 @MethodSource("data")
70 public void testAllImages(final File imageFile) throws Exception {
71 if (imageFile.getParentFile().getName().toLowerCase().equals("@broken")) {
72 return;
73 }
74 checkImage(imageFile);
75 }
76
77 }