summaryrefslogtreecommitdiffstats
path: root/tests/src/com/android/gallery3d/exif/ExifParserTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/gallery3d/exif/ExifParserTest.java')
-rw-r--r--tests/src/com/android/gallery3d/exif/ExifParserTest.java61
1 files changed, 21 insertions, 40 deletions
diff --git a/tests/src/com/android/gallery3d/exif/ExifParserTest.java b/tests/src/com/android/gallery3d/exif/ExifParserTest.java
index c1ad8341b..8d4bc3db3 100644
--- a/tests/src/com/android/gallery3d/exif/ExifParserTest.java
+++ b/tests/src/com/android/gallery3d/exif/ExifParserTest.java
@@ -16,21 +16,18 @@
package com.android.gallery3d.exif;
-import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import java.io.IOException;
import java.io.InputStream;
-import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
public class ExifParserTest extends ExifXmlDataTestCase {
private static final String TAG = "ExifParserTest";
- private HashMap<Short, String> mIfd0Value = new HashMap<Short, String>();
- private HashMap<Short, String> mIfd1Value = new HashMap<Short, String>();
- private HashMap<Short, String> mExifIfdValue = new HashMap<Short, String>();
- private HashMap<Short, String> mInteroperabilityIfdValue = new HashMap<Short, String>();
+ private List<Map<Short, String>> mGroundTruth;
private InputStream mImageInputStream;
@@ -43,12 +40,7 @@ public class ExifParserTest extends ExifXmlDataTestCase {
mImageInputStream = getInstrumentation()
.getContext().getResources().openRawResource(mImageResourceId);
- XmlResourceParser parser =
- getInstrumentation().getContext().getResources().getXml(mXmlResourceId);
-
- ExifXmlReader.readXml(parser, mIfd0Value, mIfd1Value, mExifIfdValue
- , mInteroperabilityIfdValue);
- parser.close();
+ mGroundTruth = ExifXmlReader.readXml(getInstrumentation().getContext(), mXmlResourceId);
}
public void testParse() throws IOException, ExifInvalidFormatException {
@@ -80,33 +72,25 @@ public class ExifParserTest extends ExifXmlDataTestCase {
}
}
+
private void checkTag(ExifTag tag) {
- HashMap<Short, String> truth = null;
- switch (tag.getIfd()) {
- case IfdId.TYPE_IFD_0:
- truth = mIfd0Value;
- break;
- case IfdId.TYPE_IFD_1:
- truth = mIfd1Value;
- break;
- case IfdId.TYPE_IFD_EXIF:
- truth = mExifIfdValue;
- break;
- case IfdId.TYPE_IFD_INTEROPERABILITY:
- truth = mInteroperabilityIfdValue;
- break;
- }
+ // Ignore offset tags since the ground-truth from exiftool doesn't have it.
+ // We can verify it by examining the sub-IFD or thumbnail itself.
+ if (ExifTag.isSubIfdOffsetTag(tag.getTagId())) return;
+
+ String truthString = mGroundTruth.get(tag.getIfd()).get(tag.getTagId());
- String truthString = truth.get(tag.getTagId());
- String dataString = tag.valueToString().trim();
if (truthString == null) {
fail(String.format("Unknown Tag %02x", tag.getTagId()));
}
+
+ String dataString = tag.valueToString().trim();
assertEquals(String.format("Tag %02x", tag.getTagId()), truthString, dataString);
}
- private void parseOneIfd(int ifd, int options, HashMap<Short, String> expectedResult)
+ private void parseOneIfd(int ifd, int options)
throws IOException, ExifInvalidFormatException {
+ Map<Short, String> expectedResult = mGroundTruth.get(ifd);
int numOfTag = 0;
ExifParser parser = ExifParser.parse(mImageInputStream, options);
int event = parser.next();
@@ -116,8 +100,8 @@ public class ExifParserTest extends ExifXmlDataTestCase {
assertEquals(ifd, parser.getCurrentIfd());
break;
case ExifParser.EVENT_NEW_TAG:
- numOfTag++;
ExifTag tag = parser.getTag();
+ if (!ExifTag.isSubIfdOffsetTag(tag.getTagId())) numOfTag++;
if (tag.hasValue()) {
checkTag(tag);
} else {
@@ -144,20 +128,19 @@ public class ExifParserTest extends ExifXmlDataTestCase {
}
public void testOnlyExifIfd() throws IOException, ExifInvalidFormatException {
- parseOneIfd(IfdId.TYPE_IFD_EXIF, ExifParser.OPTION_IFD_EXIF, mExifIfdValue);
+ parseOneIfd(IfdId.TYPE_IFD_EXIF, ExifParser.OPTION_IFD_EXIF);
}
public void testOnlyIfd0() throws IOException, ExifInvalidFormatException {
- parseOneIfd(IfdId.TYPE_IFD_0, ExifParser.OPTION_IFD_0, mIfd0Value);
+ parseOneIfd(IfdId.TYPE_IFD_0, ExifParser.OPTION_IFD_0);
}
public void testOnlyIfd1() throws IOException, ExifInvalidFormatException {
- parseOneIfd(IfdId.TYPE_IFD_1, ExifParser.OPTION_IFD_1, mIfd1Value);
+ parseOneIfd(IfdId.TYPE_IFD_1, ExifParser.OPTION_IFD_1);
}
public void testOnlyInteroperabilityIfd() throws IOException, ExifInvalidFormatException {
- parseOneIfd(IfdId.TYPE_IFD_INTEROPERABILITY, ExifParser.OPTION_IFD_INTEROPERABILITY
- , mInteroperabilityIfdValue);
+ parseOneIfd(IfdId.TYPE_IFD_INTEROPERABILITY, ExifParser.OPTION_IFD_INTEROPERABILITY);
}
public void testOnlyReadSomeTag() throws IOException, ExifInvalidFormatException {
@@ -227,8 +210,6 @@ public class ExifParserTest extends ExifXmlDataTestCase {
@Override
protected void tearDown() throws IOException {
mImageInputStream.close();
- mIfd0Value.clear();
- mIfd1Value.clear();
- mExifIfdValue.clear();
+ mGroundTruth.clear();
}
-} \ No newline at end of file
+}