diff options
Diffstat (limited to 'tests/src/com/android/gallery3d/exif/ExifReaderTest.java')
-rw-r--r-- | tests/src/com/android/gallery3d/exif/ExifReaderTest.java | 90 |
1 files changed, 42 insertions, 48 deletions
diff --git a/tests/src/com/android/gallery3d/exif/ExifReaderTest.java b/tests/src/com/android/gallery3d/exif/ExifReaderTest.java index 269120870..40d269ef6 100644 --- a/tests/src/com/android/gallery3d/exif/ExifReaderTest.java +++ b/tests/src/com/android/gallery3d/exif/ExifReaderTest.java @@ -16,49 +16,35 @@ package com.android.gallery3d.exif; -import android.content.res.XmlResourceParser; import android.graphics.BitmapFactory; -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; public class ExifReaderTest extends ExifXmlDataTestCase { private static final String TAG = "ExifReaderTest"; - private final HashMap<Short, String> mIfd0Value = new HashMap<Short, String>(); - private final HashMap<Short, String> mIfd1Value = new HashMap<Short, String>(); - private final HashMap<Short, String> mExifIfdValue = new HashMap<Short, String>(); - private final HashMap<Short, String> mInteroperabilityIfdValue = new HashMap<Short, String>(); - - private InputStream mImageInputStream; - - public ExifReaderTest(int imageResourceId, int xmlResourceId) { - super(imageResourceId, xmlResourceId); + public ExifReaderTest(int imgRes, int xmlRes) { + super(imgRes, xmlRes); } - @Override - public void setUp() throws Exception { - mImageInputStream = getInstrumentation() - .getContext().getResources().openRawResource(mImageResourceId); - - XmlResourceParser parser = - getInstrumentation().getContext().getResources().getXml(mXmlResourceId); - - ExifXmlReader.readXml(parser, mIfd0Value, mIfd1Value, mExifIfdValue - , mInteroperabilityIfdValue); - parser.close(); + public ExifReaderTest(String imgPath, String xmlPath) { + super(imgPath, xmlPath); } - public void testRead() throws ExifInvalidFormatException, IOException { - ExifReader reader = new ExifReader(); - ExifData exifData = reader.read(mImageInputStream); - checkIfd(exifData.getIfdData(IfdId.TYPE_IFD_0), mIfd0Value); - checkIfd(exifData.getIfdData(IfdId.TYPE_IFD_1), mIfd1Value); - checkIfd(exifData.getIfdData(IfdId.TYPE_IFD_EXIF), mExifIfdValue); - checkIfd(exifData.getIfdData(IfdId.TYPE_IFD_INTEROPERABILITY), - mInteroperabilityIfdValue); - checkThumbnail(exifData); + public void testRead() throws Exception { + try { + ExifReader reader = new ExifReader(); + ExifData exifData = reader.read(getImageInputStream()); + List<Map<Short, Set<String>>> groundTruth = ExifXmlReader.readXml(getXmlParser()); + for (int i = 0; i < IfdId.TYPE_IFD_COUNT; i++) { + checkIfd(exifData.getIfdData(i), groundTruth.get(i)); + } + checkThumbnail(exifData); + } catch (Exception e) { + throw new Exception(getImageTitle(), e); + } } private void checkThumbnail(ExifData exifData) { @@ -66,9 +52,10 @@ public class ExifReaderTest extends ExifXmlDataTestCase { if (ifd1 != null) { if (ifd1.getTag(ExifTag.TAG_COMPRESSION).getUnsignedShort(0) == ExifTag.Compression.JPEG) { - assertTrue(exifData.hasCompressedThumbnail()); + assertTrue(getImageTitle(), exifData.hasCompressedThumbnail()); byte[] thumbnail = exifData.getCompressedThumbnail(); - assertTrue(BitmapFactory.decodeByteArray(thumbnail, 0, thumbnail.length) != null); + assertTrue(getImageTitle(), + BitmapFactory.decodeByteArray(thumbnail, 0, thumbnail.length) != null); } else { // Try to check the strip count with the formula provided by EXIF spec. int planarType = ExifTag.PlanarConfiguration.CHUNKY; @@ -86,20 +73,23 @@ public class ExifReaderTest extends ExifXmlDataTestCase { ExifTag.TAG_STRIP_OFFSETS).getComponentCount(); if (planarType == ExifTag.PlanarConfiguration.CHUNKY) { - assertTrue(stripCount == (imageLength + rowsPerStrip - 1) / rowsPerStrip); + assertTrue(getImageTitle(), + stripCount == (imageLength + rowsPerStrip - 1) / rowsPerStrip); } else { ExifTag samplePerPixelTag = ifd1.getTag(ExifTag.TAG_SAMPLES_PER_PIXEL); int samplePerPixel = samplePerPixelTag.getUnsignedShort(0); - assertTrue(stripCount == + assertTrue(getImageTitle(), + stripCount == (imageLength + rowsPerStrip - 1) / rowsPerStrip * samplePerPixel); } for (int i = 0; i < stripCount; i++) { ExifTag byteCountTag = ifd1.getTag(ExifTag.TAG_STRIP_BYTE_COUNTS); if (byteCountTag.getDataType() == ExifTag.TYPE_UNSIGNED_SHORT) { - assertEquals(byteCountTag.getUnsignedShort(i), exifData.getStrip(i).length); + assertEquals(getImageTitle(), + byteCountTag.getUnsignedShort(i), exifData.getStrip(i).length); } else { - assertEquals( + assertEquals(getImageTitle(), byteCountTag.getUnsignedLong(i), exifData.getStrip(i).length); } } @@ -115,20 +105,24 @@ public class ExifReaderTest extends ExifXmlDataTestCase { } } - private void checkIfd(IfdData ifd, HashMap<Short, String> ifdValue) { + private void checkIfd(IfdData ifd, Map<Short, Set<String>> ifdValue) { if (ifd == null) { - assertEquals(0 ,ifdValue.size()); + assertEquals(getImageTitle(), 0 ,ifdValue.size()); return; } ExifTag[] tags = ifd.getAllTags(); + int size = 0; for (ExifTag tag : tags) { - assertEquals(ifdValue.get(tag.getTagId()), tag.valueToString().trim()); + if (ExifTag.isSubIfdOffsetTag(tag.getTagId()) + || tag.getTagId() == ExifTag.TAG_MAKER_NOTE) continue; + if (tag.getTagId() != ExifTag.TAG_USER_COMMENT) { + Set<String> truth = ifdValue.get(tag.getTagId()); + assertNotNull(String.format("Tag %x, ", tag.getTagId()) + getImageTitle(), truth); + assertTrue(String.format("Tag %x, ", tag.getTagId()) + getImageTitle(), + truth.contains(tag.valueToString().trim())); + } + size++; } - assertEquals(ifdValue.size(), tags.length); - } - - @Override - public void tearDown() throws Exception { - mImageInputStream.close(); + assertEquals(getImageTitle(), ifdValue.size(), size); } } |