/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.gallery3d.exif; import junit.framework.TestCase; import java.nio.ByteOrder; import java.util.HashMap; import java.util.List; import java.util.Map; public class ExifDataTest extends TestCase { Map mTestTags; ExifInterface mInterface; private ExifTag mVersionTag; private ExifTag mGpsVersionTag; private ExifTag mModelTag; private ExifTag mDateTimeTag; private ExifTag mCompressionTag; private ExifTag mThumbnailFormatTag; private ExifTag mLongitudeTag; private ExifTag mShutterTag; private ExifTag mInteropIndex; @Override public void setUp() throws Exception { super.setUp(); mInterface = new ExifInterface(); // TYPE_UNDEFINED with 4 components mVersionTag = mInterface.buildTag(ExifInterface.TAG_EXIF_VERSION, new byte[] { 5, 4, 3, 2 }); // TYPE_UNSIGNED_BYTE with 4 components mGpsVersionTag = mInterface.buildTag(ExifInterface.TAG_GPS_VERSION_ID, new byte[] { 6, 7, 8, 9 }); // TYPE ASCII with arbitrary length mModelTag = mInterface.buildTag(ExifInterface.TAG_MODEL, "helloworld"); // TYPE_ASCII with 20 components mDateTimeTag = mInterface.buildTag(ExifInterface.TAG_DATE_TIME, "2013:02:11 20:20:20"); // TYPE_UNSIGNED_SHORT with 1 components mCompressionTag = mInterface.buildTag(ExifInterface.TAG_COMPRESSION, 100); // TYPE_UNSIGNED_LONG with 1 components mThumbnailFormatTag = mInterface.buildTag(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT, 100); // TYPE_UNSIGNED_RATIONAL with 3 components mLongitudeTag = mInterface.buildTag(ExifInterface.TAG_GPS_LONGITUDE, new Rational[] { new Rational(2, 2), new Rational(11, 11), new Rational(102, 102) }); // TYPE_RATIONAL with 1 components mShutterTag = mInterface .buildTag(ExifInterface.TAG_SHUTTER_SPEED_VALUE, new Rational(4, 6)); // TYPE_ASCII with arbitrary length mInteropIndex = mInterface.buildTag(ExifInterface.TAG_INTEROPERABILITY_INDEX, "foo"); mTestTags = new HashMap(); mTestTags.put(ExifInterface.TAG_EXIF_VERSION, mVersionTag); mTestTags.put(ExifInterface.TAG_GPS_VERSION_ID, mGpsVersionTag); mTestTags.put(ExifInterface.TAG_MODEL, mModelTag); mTestTags.put(ExifInterface.TAG_DATE_TIME, mDateTimeTag); mTestTags.put(ExifInterface.TAG_COMPRESSION, mCompressionTag); mTestTags.put(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT, mThumbnailFormatTag); mTestTags.put(ExifInterface.TAG_GPS_LONGITUDE, mLongitudeTag); mTestTags.put(ExifInterface.TAG_SHUTTER_SPEED_VALUE, mShutterTag); mTestTags.put(ExifInterface.TAG_INTEROPERABILITY_INDEX, mInteropIndex); } @Override public void tearDown() throws Exception { super.tearDown(); mInterface = null; mTestTags = null; } public void testAddTag() { ExifData exifData = new ExifData(ByteOrder.BIG_ENDIAN); // Add all test tags for (ExifTag t : mTestTags.values()) { assertTrue(exifData.addTag(t) == null); } // Make sure no initial thumbnails assertFalse(exifData.hasCompressedThumbnail()); assertFalse(exifData.hasUncompressedStrip()); // Check that we can set thumbnails exifData.setStripBytes(3, new byte[] { 1, 2, 3, 4, 5 }); assertTrue(exifData.hasUncompressedStrip()); exifData.setCompressedThumbnail(new byte[] { 1 }); assertTrue(exifData.hasCompressedThumbnail()); // Check that we can clear thumbnails exifData.clearThumbnailAndStrips(); assertFalse(exifData.hasCompressedThumbnail()); assertFalse(exifData.hasUncompressedStrip()); // Make sure ifds exist for (int i : IfdData.getIfds()) { assertTrue(exifData.getIfdData(i) != null); } // Get all test tags List allTags = exifData.getAllTags(); assertTrue(allTags != null); // Make sure all test tags are in data for (ExifTag t : mTestTags.values()) { boolean check = false; for (ExifTag i : allTags) { if (t.equals(i)) { check = true; break; } } assertTrue(check); } // Check if getting tags for a tid works List tidTags = exifData.getAllTagsForTagId(ExifInterface .getTrueTagKey(ExifInterface.TAG_SHUTTER_SPEED_VALUE)); assertTrue(tidTags.size() == 1); assertTrue(tidTags.get(0).equals(mShutterTag)); // Check if getting tags for an ifd works List ifdTags = exifData.getAllTagsForIfd(IfdId.TYPE_IFD_INTEROPERABILITY); assertTrue(ifdTags.size() == 1); assertTrue(ifdTags.get(0).equals(mInteropIndex)); } }