/* * ExifReaderTest.java * * Test class written by Drew Noakes. * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * metadata_extractor [at] drewnoakes [dot] com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 26-Oct-2002 19:15:16 using IntelliJ IDEA. */ package com.drew.metadata.exif.test; import com.drew.imaging.jpeg.JpegSegmentData; import com.drew.lang.Rational; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.exif.ExifDirectory; import com.drew.metadata.exif.ExifReader; import junit.framework.TestCase; import java.io.File; /** * JUnit test case for class ExifReader. * @author Drew Noakes http://drewnoakes.com */ public class ExifReaderTest extends TestCase { public ExifReaderTest(String s) { super(s); } public void testLoadFujiFilmJpeg() throws Exception { String jpegWithExif = "Source/com/drew/metadata/exif/test/withExif.jpg"; Metadata metadata = new ExifReader(new File(jpegWithExif)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); assertEquals("80", directory.getDescription(ExifDirectory.TAG_ISO_EQUIVALENT)); // TODO decide if this should still be returned -- it was being calculated upon setting of a related tag // assertEquals("F9", directory.getDescription(ExifDirectory.TAG_APERTURE)); } public void testLoadJpegWithoutExifData() throws Exception { String jpegNoExif = "Source/com/drew/metadata/exif/test/noExif.jpg"; Metadata metadata = new ExifReader(new File(jpegNoExif)).extract(); assertTrue(!metadata.containsDirectory(ExifDirectory.class)); } public void testLoadJpegWithBadExifData() throws Exception { // This test used to ensure an exception was thrown when loading a particular jpeg // The intention has since changed, and the API should only throw exceptions in completely // fatal situations. Now, the Metadata object returned has no new tags. String jpegBadExif = "Source/com/drew/metadata/exif/test/badExif.jpg"; // Exif data segment doesn't begin with 'Exif' Metadata metadata = new ExifReader(new File(jpegBadExif)).extract(); assertEquals(0, metadata.getDirectory(ExifDirectory.class).getTagCount()); } public void testCrashRegressionTest() throws Exception { // this image was created via a resize in ACDSee // it seems to have a reference to an IFD starting outside the data segment // i've noticed that ACDSee reports a Comment for this image, yet ExifReader doesn't report one String fileName = "Source/com/drew/metadata/exif/test/crash01.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); assertTrue(metadata.getDirectory(ExifDirectory.class).getTagCount() > 0); } public void testThumbnailOffset() throws Exception { String fileName = "Source/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); assertEquals(192, directory.getInt(ExifDirectory.TAG_THUMBNAIL_OFFSET)); } public void testThumbnailLength() throws Exception { String fileName = "Source/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); assertEquals(2970, directory.getInt(ExifDirectory.TAG_THUMBNAIL_LENGTH)); } public void testDateTime() throws Exception { String fileName = "Source/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); assertEquals("2002:11:27 18:00:35", directory.getString(ExifDirectory.TAG_DATETIME)); } public void testXResolution() throws Exception { String fileName = "Source/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); Rational rational = directory.getRational(ExifDirectory.TAG_X_RESOLUTION); assertEquals(72, rational.getNumerator()); assertEquals(1, rational.getDenominator()); } public void testYResolution() throws Exception { String fileName = "Source/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); Rational rational = directory.getRational(ExifDirectory.TAG_Y_RESOLUTION); assertEquals(72, rational.getNumerator()); assertEquals(1, rational.getDenominator()); } public void testCompression() throws Exception { String fileName = "Source/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); // 6 means JPEG compression assertEquals(6, directory.getInt(ExifDirectory.TAG_COMPRESSION)); } public void testStackOverflowOnRevisitationOfSameDirectory() throws Exception { // an error has been discovered in Exif data segments where a directory is referenced // repeatedly. thanks to Alistair Dickie for providing the sample image used in this // unit test. File metadataFile = new File("Source/com/drew/metadata/exif/test/recursiveDirectories.metadata"); Metadata metadata = new ExifReader(JpegSegmentData.FromFile(metadataFile)).extract(); metadata.getDirectory(ExifDirectory.class); // String fileName = "Source/com/drew/metadata/exif/test/recursiveDirectories.jpg"; // Metadata metadata = new ExifReader(new File(fileName)).extract(); // metadata.getDirectory(ExifDirectory.class); } /* public void testUncompressedYCbCrThumbnail() throws Exception { String fileName = "Source/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail.jpg"; String thumnailFileName = "Source/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail.bmp"; Metadata metadata = new ExifReader(new File(fileName)).extract(); ExifDirectory directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); directory.writeThumbnail(thumnailFileName); fileName = "Source/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail2.jpg"; thumnailFileName = "Source/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail2.bmp"; metadata = new ExifReader(new File(fileName)).extract(); directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); directory.writeThumbnail(thumnailFileName); fileName = "Source/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail3.jpg"; thumnailFileName = "Source/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail3.bmp"; metadata = new ExifReader(new File(fileName)).extract(); directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); directory.writeThumbnail(thumnailFileName); fileName = "Source/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail4.jpg"; thumnailFileName = "Source/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail4.bmp"; metadata = new ExifReader(new File(fileName)).extract(); directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); directory.writeThumbnail(thumnailFileName); } public void testUncompressedRGBThumbnail() throws Exception { String fileName = "Source/com/drew/metadata/exif/test/withUncompressedRGBThumbnail.jpg"; String thumnailFileName = "Source/com/drew/metadata/exif/test/withUncompressedRGBThumbnail.bmp"; Metadata metadata = new ExifReader(new File(fileName)).extract(); ExifDirectory directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); directory.writeThumbnail(thumnailFileName); } */ }