From 3c9c7dc34721aaf7d83f037dd1af974bc064929f Mon Sep 17 00:00:00 2001 From: Earl Ou Date: Thu, 18 Oct 2012 15:08:56 +0800 Subject: Handle duplicated tags in the Exif test Change-Id: If9bd9712de1eaa71c8e355c5268f9cc29247bd2e --- .../src/com/android/gallery3d/exif/ExifParserTest.java | 14 ++++++++------ .../src/com/android/gallery3d/exif/ExifReaderTest.java | 11 +++++++---- tests/src/com/android/gallery3d/exif/ExifXmlReader.java | 17 ++++++++++++----- 3 files changed, 27 insertions(+), 15 deletions(-) (limited to 'tests') diff --git a/tests/src/com/android/gallery3d/exif/ExifParserTest.java b/tests/src/com/android/gallery3d/exif/ExifParserTest.java index 38b1f2fc3..c93e09a4c 100644 --- a/tests/src/com/android/gallery3d/exif/ExifParserTest.java +++ b/tests/src/com/android/gallery3d/exif/ExifParserTest.java @@ -21,6 +21,7 @@ import android.graphics.BitmapFactory; import java.util.List; import java.util.Map; +import java.util.Set; public class ExifParserTest extends ExifXmlDataTestCase { private static final String TAG = "ExifParserTest"; @@ -33,7 +34,7 @@ public class ExifParserTest extends ExifXmlDataTestCase { super(imgPath, xmlPath); } - private List> mGroundTruth; + private List>> mGroundTruth; @Override public void setUp() throws Exception { @@ -83,20 +84,21 @@ public class ExifParserTest extends ExifXmlDataTestCase { if (tag.getTagId() == ExifTag.TAG_MAKER_NOTE || tag.getTagId() == ExifTag.TAG_USER_COMMENT) return; - String truthString = mGroundTruth.get(tag.getIfd()).get(tag.getTagId()); + Set truth = mGroundTruth.get(tag.getIfd()).get(tag.getTagId()); - if (truthString == null) { + if (truth == null) { fail(String.format("Unknown Tag %02x", tag.getTagId()) + ", " + getImageTitle()); } String dataString = tag.valueToString().trim(); - assertEquals(String.format("Tag %02x", tag.getTagId()) + ", " + getImageTitle(), - truthString.trim(), dataString); + assertTrue(String.format("Tag %02x", tag.getTagId()) + ", " + getImageTitle() + + ": " + dataString, + truth.contains(dataString)); } private void parseOneIfd(int ifd, int options) throws Exception { try { - Map expectedResult = mGroundTruth.get(ifd); + Map> expectedResult = mGroundTruth.get(ifd); int numOfTag = 0; ExifParser parser = ExifParser.parse(getImageInputStream(), options); int event = parser.next(); diff --git a/tests/src/com/android/gallery3d/exif/ExifReaderTest.java b/tests/src/com/android/gallery3d/exif/ExifReaderTest.java index 6a884eace..40d269ef6 100644 --- a/tests/src/com/android/gallery3d/exif/ExifReaderTest.java +++ b/tests/src/com/android/gallery3d/exif/ExifReaderTest.java @@ -20,6 +20,7 @@ import android.graphics.BitmapFactory; import java.util.List; import java.util.Map; +import java.util.Set; public class ExifReaderTest extends ExifXmlDataTestCase { private static final String TAG = "ExifReaderTest"; @@ -36,7 +37,7 @@ public class ExifReaderTest extends ExifXmlDataTestCase { try { ExifReader reader = new ExifReader(); ExifData exifData = reader.read(getImageInputStream()); - List> groundTruth = ExifXmlReader.readXml(getXmlParser()); + List>> groundTruth = ExifXmlReader.readXml(getXmlParser()); for (int i = 0; i < IfdId.TYPE_IFD_COUNT; i++) { checkIfd(exifData.getIfdData(i), groundTruth.get(i)); } @@ -104,7 +105,7 @@ public class ExifReaderTest extends ExifXmlDataTestCase { } } - private void checkIfd(IfdData ifd, Map ifdValue) { + private void checkIfd(IfdData ifd, Map> ifdValue) { if (ifd == null) { assertEquals(getImageTitle(), 0 ,ifdValue.size()); return; @@ -115,8 +116,10 @@ public class ExifReaderTest extends ExifXmlDataTestCase { if (ExifTag.isSubIfdOffsetTag(tag.getTagId()) || tag.getTagId() == ExifTag.TAG_MAKER_NOTE) continue; if (tag.getTagId() != ExifTag.TAG_USER_COMMENT) { - assertEquals(String.format("Tag %x, ", tag.getTagId()) + getImageTitle(), - ifdValue.get(tag.getTagId()).trim(), tag.valueToString().trim()); + Set 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++; } diff --git a/tests/src/com/android/gallery3d/exif/ExifXmlReader.java b/tests/src/com/android/gallery3d/exif/ExifXmlReader.java index 139b0ca47..54def2756 100644 --- a/tests/src/com/android/gallery3d/exif/ExifXmlReader.java +++ b/tests/src/com/android/gallery3d/exif/ExifXmlReader.java @@ -22,8 +22,10 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; public class ExifXmlReader { private static final String TAG_EXIF = "exif"; @@ -44,13 +46,13 @@ public class ExifXmlReader { * @throws XmlPullParserException * @throws IOException */ - static public List> readXml(XmlPullParser parser) + static public List>> readXml(XmlPullParser parser) throws XmlPullParserException, IOException { - List> exifData = - new ArrayList>(IfdId.TYPE_IFD_COUNT); + List>> exifData = + new ArrayList>>(IfdId.TYPE_IFD_COUNT); for (int i = 0; i < IfdId.TYPE_IFD_COUNT; i++) { - exifData.add(new HashMap()); + exifData.add(new HashMap>()); } while (parser.next() != XmlPullParser.END_DOCUMENT) { @@ -79,7 +81,12 @@ public class ExifXmlReader { if (ifdId < 0) { // TODO: the MarkerNote segment. } else { - exifData.get(ifdId).put(id, value); + Set tagData = exifData.get(ifdId).get(id); + if (tagData == null) { + tagData = new HashSet(); + exifData.get(ifdId).put(id, tagData); + } + tagData.add(value.trim()); } parser.require(XmlPullParser.END_TAG, null, null); -- cgit v1.2.3