summaryrefslogtreecommitdiffstats
path: root/tests/src/com/android/gallery3d/exif
diff options
context:
space:
mode:
authorEarl Ou <shunhsingou@google.com>2012-08-07 14:43:53 +0800
committerEarl Ou <shunhsingou@google.com>2012-08-07 17:41:36 +0800
commitc61cc7c10e6b4f9453314a51e39296bbd40b3cc5 (patch)
treec2a4d6cf242edd9539c42977df1f9b9832d3461f /tests/src/com/android/gallery3d/exif
parentfd3a9b84992ec78ea431d346fdc7870f54d3e1cc (diff)
downloadandroid_packages_apps_Snap-c61cc7c10e6b4f9453314a51e39296bbd40b3cc5.tar.gz
android_packages_apps_Snap-c61cc7c10e6b4f9453314a51e39296bbd40b3cc5.tar.bz2
android_packages_apps_Snap-c61cc7c10e6b4f9453314a51e39296bbd40b3cc5.zip
1. add interoperability ifd in exif test and 2. add some log
Change-Id: I888d856a17e59754d5a43b10ec8c4d30b582c503
Diffstat (limited to 'tests/src/com/android/gallery3d/exif')
-rw-r--r--tests/src/com/android/gallery3d/exif/ExifParserTest.java56
1 files changed, 52 insertions, 4 deletions
diff --git a/tests/src/com/android/gallery3d/exif/ExifParserTest.java b/tests/src/com/android/gallery3d/exif/ExifParserTest.java
index 6c9d74d51..34bbbda5f 100644
--- a/tests/src/com/android/gallery3d/exif/ExifParserTest.java
+++ b/tests/src/com/android/gallery3d/exif/ExifParserTest.java
@@ -38,6 +38,7 @@ public class ExifParserTest extends InstrumentationTestCase {
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 InputStream mImageInputStream;
@@ -48,6 +49,7 @@ public class ExifParserTest extends InstrumentationTestCase {
private static final String XML_IFD0 = "ifd0";
private static final String XML_IFD1 = "ifd1";
private static final String XML_EXIF_IFD = "exif-ifd";
+ private static final String XML_INTEROPERABILITY_IFD = "interoperability-ifd";
private static final String XML_TAG_ID = "id";
public ExifParserTest(int imageResourceId, int xmlResourceId) {
@@ -94,6 +96,8 @@ public class ExifParserTest extends InstrumentationTestCase {
ifdData = mIfd1Value;
} else if (XML_EXIF_IFD.equals(name)) {
ifdData = mExifIfdValue;
+ } else if (XML_INTEROPERABILITY_IFD.equals(name)) {
+ ifdData = mInteroperabilityIfdValue;
} else {
throw new RuntimeException("Unknown IFD name in xml file: " + name);
}
@@ -196,7 +200,8 @@ public class ExifParserTest extends InstrumentationTestCase {
switch (type) {
case IfdParser.TYPE_NEW_TAG:
ExifTag tag = ifdParser.readTag();
- if (tag.getDataSize() > 4) {
+ if (tag.getDataSize() > 4
+ || tag.getTagId() == ExifTag.EXIF_TAG.TAG_INTEROPERABILITY_IFD) {
long offset = ifdParser.readUnsignedInt();
assertTrue(offset <= Integer.MAX_VALUE);
ifdParser.waitValueOfTag(tag, offset);
@@ -209,18 +214,61 @@ public class ExifParserTest extends InstrumentationTestCase {
fail("Find a ifd after exif ifd");
break;
case IfdParser.TYPE_VALUE_OF_PREV_TAG:
- checkTag(ifdParser.getCorrespodingExifTag(), ifdParser, mExifIfdValue);
- tagNumber++;
+ tag = ifdParser.getCorrespodingExifTag();
+ if (tag.getTagId() == ExifTag.EXIF_TAG.TAG_INTEROPERABILITY_IFD) {
+ parseInteroperabilityIfd(ifdParser.parseIfdBlock());
+ } else {
+ checkTag(ifdParser.getCorrespodingExifTag(), ifdParser, mExifIfdValue);
+ tagNumber++;
+ }
break;
}
type = ifdParser.next();
}
assertEquals(mExifIfdValue.size(), tagNumber);
}
+ private void parseInteroperabilityIfd(IfdParser ifdParser) throws IOException,
+ ExifInvalidFormatException {
+ int type = ifdParser.next();
+ int tagNumber = 0;
+ while (type != IfdParser.TYPE_END) {
+ switch (type) {
+ case IfdParser.TYPE_NEW_TAG:
+ ExifTag tag = ifdParser.readTag();
+ if (tag.getDataSize() > 4) {
+ long offset = ifdParser.readUnsignedInt();
+ assertTrue(offset <= Integer.MAX_VALUE);
+ ifdParser.waitValueOfTag(tag, offset);
+ } else {
+ checkTag(tag, ifdParser, mInteroperabilityIfdValue);
+ tagNumber++;
+ }
+ break;
+ case IfdParser.TYPE_NEXT_IFD:
+ fail("Find a ifd after exif ifd");
+ break;
+ case IfdParser.TYPE_VALUE_OF_PREV_TAG:
+ checkTag(ifdParser.getCorrespodingExifTag(), ifdParser
+ , mInteroperabilityIfdValue);
+ tagNumber++;
+ break;
+ }
+ type = ifdParser.next();
+ }
+ assertEquals(mInteroperabilityIfdValue.size(), tagNumber);
+ }
private void checkTag(ExifTag tag, IfdParser ifdParser, HashMap<Short, String> truth)
throws IOException {
- assertEquals(truth.get(tag.getTagId()), readValueToString(tag, ifdParser));
+ String truthString = truth.get(tag.getTagId());
+ if (truthString == null) {
+ fail(String.format("Unknown Tag %02x", tag.getTagId()));
+ }
+ String dataString = readValueToString(tag, ifdParser);
+ if (!truthString.equals(dataString)) {
+ fail(String.format("Tag %02x: expect %s but %s",
+ tag.getTagId(), truthString, dataString));
+ }
}
private String readValueToString(ExifTag tag, IfdParser parser) throws IOException {