You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2010/09/10 03:35:52 UTC

svn commit: r995634 [3/6] - in /commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan: ./ common/ common/byteSources/ formats/bmp/ formats/gif/ formats/ico/ formats/jpeg/ formats/jpeg/exif/ formats/jpeg/iptc/ formats/jpeg/xmp/ formats/png/ fo...

Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifRewriteTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifRewriteTest.java?rev=995634&r1=995633&r2=995634&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifRewriteTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifRewriteTest.java Fri Sep 10 01:35:50 2010
@@ -46,500 +46,500 @@ import org.apache.sanselan.util.IOUtils;
 
 public class ExifRewriteTest extends ExifBaseTest implements AllTagConstants
 {
-	//	public ExifRewriteTest(String name)
-	//	{
-	//		super(name);
-	//	}
-
-	public void testRemove() throws IOException, ImageReadException,
-			ImageWriteException
-	{
-		List images = getImagesWithExifData();
-		for (int i = 0; i < images.size(); i++)
-		{
-			if(i%10==0)
-			Debug.purgeMemory();
-
-			File imageFile = (File) images.get(i);
-			Debug.debug("imageFile", imageFile);
-
-			boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-			if (ignoreImageData)
-				continue;
-
-			ByteSource byteSource = new ByteSourceFile(imageFile);
-			Debug.debug("Source Segments:");
-			new JpegUtils().dumpJFIF(byteSource);
-
-			{
-				JpegImageMetadata metadata = (JpegImageMetadata) Sanselan
-						.getMetadata(imageFile);
-				//				assertNotNull(metadata.getExif());
-			}
-
-			{
-				ByteArrayOutputStream baos = new ByteArrayOutputStream();
-				new ExifRewriter().removeExifMetadata(byteSource, baos);
-				byte bytes[] = baos.toByteArray();
-				File tempFile = createTempFile("test", ".jpg");
-				Debug.debug("tempFile", tempFile);
-				IOUtils.writeToFile(bytes, tempFile);
-
-				Debug.debug("Output Segments:");
-				new JpegUtils().dumpJFIF(new ByteSourceArray(bytes));
-
-				assertTrue(!hasExifData(tempFile));
-			}
-		}
-	}
-
-	public void testInsert() throws IOException, ImageReadException,
-			ImageWriteException
-	{
-		List images = getImagesWithExifData();
-		for (int i = 0; i < images.size(); i++)
-		{
-			if(i%10==0)
-			Debug.purgeMemory();
-
-			File imageFile = (File) images.get(i);
-			Debug.debug("imageFile", imageFile);
-			
-			// This test image contains invalid EXIF and would break the test.
-			if (imageFile.getName().equals("Oregon Scientific DS6639 - DSC_0307.JPG")) {
-				continue;
-			}
-
-			boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-			if (ignoreImageData)
-				continue;
-
-			ByteSource byteSource = new ByteSourceFile(imageFile);
-			Debug.debug("Source Segments:");
-			new JpegUtils().dumpJFIF(byteSource);
-
-			JpegImageMetadata originalMetadata = (JpegImageMetadata) Sanselan
-					.getMetadata(imageFile);
-			assertNotNull(originalMetadata);
-
-			TiffImageMetadata oldExifMetadata = originalMetadata.getExif();
-			assertNotNull(oldExifMetadata);
-
-			ByteSource stripped;
-			{
-				ByteArrayOutputStream baos = new ByteArrayOutputStream();
-				new ExifRewriter().removeExifMetadata(byteSource, baos);
-				byte bytes[] = baos.toByteArray();
-				File tempFile = createTempFile("removed", ".jpg");
-				Debug.debug("tempFile", tempFile);
-				IOUtils.writeToFile(bytes, tempFile);
-
-				Debug.debug("Output Segments:");
-				stripped = new ByteSourceArray(bytes);
-				new JpegUtils().dumpJFIF(stripped);
-
-				assertTrue(!hasExifData(tempFile));
-			}
-
-			{
-				TiffOutputSet outputSet = oldExifMetadata.getOutputSet();
-				//			outputSet.dump();
-
-				ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-				new ExifRewriter().updateExifMetadataLossy(stripped, baos,
-						outputSet);
-
-				byte bytes[] = baos.toByteArray();
-				File tempFile = createTempFile("inserted" + "_", ".jpg");
-				Debug.debug("tempFile", tempFile);
-				IOUtils.writeToFile(bytes, tempFile);
-
-				Debug.debug("Output Segments:");
-				new JpegUtils().dumpJFIF(new ByteSourceArray(bytes));
-
-				//				assertTrue(!hasExifData(tempFile));
-
-				JpegImageMetadata newMetadata = (JpegImageMetadata) Sanselan
-						.getMetadata(tempFile);
-				assertNotNull(newMetadata);
-				TiffImageMetadata newExifMetadata = newMetadata.getExif();
-				assertNotNull(newExifMetadata);
-				//				newMetadata.dump();
-
-				compare(oldExifMetadata, newExifMetadata);
-			}
-
-		}
-	}
-
-	private interface Rewriter
-	{
-		public void rewrite(ByteSource byteSource, OutputStream os,
-				TiffOutputSet outputSet) throws ImageReadException,
-				IOException, ImageWriteException;
-	}
-
-	private void rewrite(Rewriter rewriter, String name) throws IOException,
-			ImageReadException, ImageWriteException
-	{
-		List images = getImagesWithExifData();
-		for (int i = 0; i < images.size(); i++)
-		{
-			if(i%10==0)
-			Debug.purgeMemory();
-
-			File imageFile = (File) images.get(i);
-			
-			// This test image contains invalid EXIF and would break the test.
-			if (imageFile.getName().equals("Oregon Scientific DS6639 - DSC_0307.JPG")) {
-				continue;
-			}
-
-			try
-			{
-
-				Debug.debug("imageFile", imageFile);
-
-				boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-				if (ignoreImageData)
-					continue;
-
-				ByteSource byteSource = new ByteSourceFile(imageFile);
-				Debug.debug("Source Segments:");
-				new JpegUtils().dumpJFIF(byteSource);
-
-				JpegImageMetadata oldMetadata = (JpegImageMetadata) Sanselan
-						.getMetadata(imageFile);
-				if (null == oldMetadata)
-					continue;
-				assertNotNull(oldMetadata);
-
-				TiffImageMetadata oldExifMetadata = oldMetadata.getExif();
-				if (null == oldExifMetadata)
-					continue;
-				assertNotNull(oldExifMetadata);
-				oldMetadata.dump();
-
-				//			TiffImageMetadata tiffImageMetadata = metadata.getExif();
-				//			Photoshop photoshop = metadata.getPhotoshop();
-
-				TiffOutputSet outputSet = oldExifMetadata.getOutputSet();
-				//			outputSet.dump();
-
-				ByteArrayOutputStream baos = new ByteArrayOutputStream();
-				rewriter.rewrite(byteSource, baos, outputSet);
-				byte bytes[] = baos.toByteArray();
-				File tempFile = createTempFile(name + "_", ".jpg");
-				Debug.debug("tempFile", tempFile);
-				IOUtils.writeToFile(bytes, tempFile);
-
-				Debug.debug("Output Segments:");
-				new JpegUtils().dumpJFIF(new ByteSourceArray(bytes));
-
-				//				assertTrue(!hasExifData(tempFile));
-
-				JpegImageMetadata newMetadata = (JpegImageMetadata) Sanselan
-						.getMetadata(tempFile);
-				assertNotNull(newMetadata);
-				TiffImageMetadata newExifMetadata = newMetadata.getExif();
-				assertNotNull(newExifMetadata);
-				//				newMetadata.dump();
-
-				compare(oldExifMetadata, newExifMetadata);
-			}
-			catch (IOException e)
-			{
-				Debug.debug("imageFile", imageFile.getAbsoluteFile());
-				Debug.debug(e);
-				throw e;
-			}
-			catch (ImageReadException e)
-			{
-				Debug.debug("imageFile", imageFile.getAbsoluteFile());
-				Debug.debug(e);
-				throw e;
-			}
-			catch (ImageWriteException e)
-			{
-				Debug.debug("imageFile", imageFile.getAbsoluteFile());
-				Debug.debug(e);
-				throw e;
-			}
-
-		}
-	}
-
-	public void testRewriteLossy() throws IOException, ImageReadException,
-			ImageWriteException
-	{
-		Rewriter rewriter = new Rewriter()
-		{
-			public void rewrite(ByteSource byteSource, OutputStream os,
-					TiffOutputSet outputSet) throws ImageReadException,
-					IOException, ImageWriteException
-			{
-				new ExifRewriter().updateExifMetadataLossy(byteSource, os,
-						outputSet);
-			}
-		};
-
-		rewrite(rewriter, "lossy");
-	}
-
-	public void testRewriteLossless() throws IOException, ImageReadException,
-			ImageWriteException
-	{
-		Rewriter rewriter = new Rewriter()
-		{
-			public void rewrite(ByteSource byteSource, OutputStream os,
-					TiffOutputSet outputSet) throws ImageReadException,
-					IOException, ImageWriteException
-			{
-				new ExifRewriter().updateExifMetadataLossless(byteSource, os,
-						outputSet);
-			}
-		};
-
-		rewrite(rewriter, "lossless");
-	}
-
-	private Hashtable makeDirectoryMap(ArrayList directories)
-	{
-		Hashtable directoryMap = new Hashtable();
-		for (int i = 0; i < directories.size(); i++)
-		{
-			TiffImageMetadata.Directory directory = (TiffImageMetadata.Directory) directories
-					.get(i);
-			directoryMap.put(new Integer(directory.type), directory);
-		}
-		return directoryMap;
-	}
-
-	private Hashtable makeFieldMap(ArrayList items)
-	{
-		Hashtable fieldMap = new Hashtable();
-		for (int i = 0; i < items.size(); i++)
-		{
-			TiffImageMetadata.Item item = (TiffImageMetadata.Item) items.get(i);
-			TiffField field = item.getTiffField();
-			Object key = new Integer(field.tag);
-			if (!fieldMap.containsKey(key))
-				fieldMap.put(key, field);
-		}
-		return fieldMap;
-	}
-
-	private void compare(TiffImageMetadata oldExifMetadata,
-			TiffImageMetadata newExifMetadata) throws ImageReadException
-	{
-		assertNotNull(oldExifMetadata);
-		assertNotNull(newExifMetadata);
-
-		ArrayList oldDirectories = oldExifMetadata.getDirectories();
-		ArrayList newDirectories = newExifMetadata.getDirectories();
-
-		assertTrue(oldDirectories.size() == newDirectories.size());
-
-		Hashtable oldDirectoryMap = makeDirectoryMap(oldDirectories);
-		Hashtable newDirectoryMap = makeDirectoryMap(newDirectories);
-
-		assertEquals(oldDirectories.size(), oldDirectoryMap.keySet().size());
-		ArrayList oldDirectoryTypes = new ArrayList(oldDirectoryMap.keySet());
-		Collections.sort(oldDirectoryTypes);
-		ArrayList newDirectoryTypes = new ArrayList(newDirectoryMap.keySet());
-		Collections.sort(newDirectoryTypes);
-		assertEquals(oldDirectoryTypes, newDirectoryTypes);
-
-		for (int i = 0; i < oldDirectoryTypes.size(); i++)
-		{
-			Integer dirType = (Integer) oldDirectoryTypes.get(i);
-
-			//			Debug.debug("dirType", dirType);
-
-			TiffImageMetadata.Directory oldDirectory = (TiffImageMetadata.Directory) oldDirectoryMap
-					.get(dirType);
-			TiffImageMetadata.Directory newDirectory = (TiffImageMetadata.Directory) newDirectoryMap
-					.get(dirType);
-			assertNotNull(oldDirectory);
-			assertNotNull(newDirectory);
-
-			ArrayList oldItems = oldDirectory.getItems();
-			ArrayList newItems = newDirectory.getItems();
-
-			//			Debug.debug("oldItems.size()", oldItems.size());
-			//			Debug.debug("newItems.size()", newItems.size());
-			//			dump("oldItems", oldItems);
-			//			dump("newItems", newItems);
-
-			//			if (oldItems.size() != newItems.size())
-			//				;
-			//			{
-			//			dump("oldItems", oldItems);
-			//			dump("newItems", newItems);
-			//			}
-			//			assertTrue(oldItems.size() == newItems.size());
-
-			Hashtable oldFieldMap = makeFieldMap(oldItems);
-			Hashtable newFieldMap = makeFieldMap(newItems);
-
-			Set missingInNew = new HashSet(oldFieldMap.keySet());
-			missingInNew.removeAll(newFieldMap.keySet());
-
-			Set missingInOld = new HashSet(newFieldMap.keySet());
-			missingInOld.removeAll(oldFieldMap.keySet());
-
-			//			dump("missingInNew", missingInNew);
-			//			dump("missingInOld", missingInOld);
-			//			dump("newFieldMap.keySet()", newFieldMap.keySet());
-			//			dump("oldFieldMap.keySet()", oldFieldMap.keySet());
-
-			assertTrue(missingInNew.size() == 0);
-			assertTrue(missingInOld.size() == 0);
-
-			//			Debug.debug("oldItems.size()", oldItems.size());
-			//			Debug.debug("oldFieldMap.keySet().size()", oldFieldMap.keySet().size());
-
-			//			assertEquals(oldItems.size(), oldFieldMap.keySet().size());
-			//			assertEquals(oldFieldMap.keySet(), newFieldMap.keySet());
-			//			assertEquals(oldFieldMap.keySet(), newFieldMap.keySet());
-
-			ArrayList oldFieldTags = new ArrayList(oldFieldMap.keySet());
-			Collections.sort(oldFieldTags);
-			ArrayList newFieldTags = new ArrayList(newFieldMap.keySet());
-			Collections.sort(newFieldTags);
-			assertEquals(oldFieldTags, newFieldTags);
-
-			for (int j = 0; j < oldFieldTags.size(); j++)
-			{
-				Integer fieldTag = (Integer) oldFieldTags.get(j);
-
-				TiffField oldField = (TiffField) oldFieldMap.get(fieldTag);
-				TiffField newField = (TiffField) newFieldMap.get(fieldTag);
-
-				//				Debug.debug("fieldTag", fieldTag);
-				//				Debug.debug("oldField", oldField);
-				//				Debug.debug("newField", newField);
-
-				//				fieldTag.
-				assertNotNull(oldField);
-				assertNotNull(newField);
-
-				assertEquals(oldField.tag, newField.tag);
-				assertEquals(dirType.intValue(), newField.directoryType);
-				assertEquals(oldField.directoryType, newField.directoryType);
-				assertEquals(oldField.length, newField.length);
-				assertEquals(oldField.isLocalValue(), newField.isLocalValue());
-
-				if (oldField.tag == 0x202)
-				{
-					// ignore "jpg from raw length" value. may have off-by-one bug in certain cameras.
-					// i.e. Sony DCR-PC110
-					continue;
-				}
-
-				if (!oldField.tagInfo.isOffset())
-				{
-					if (oldField.tagInfo.isText())
-						;
-					else if (oldField.isLocalValue())
-					{
-						//						Debug.debug("oldField.tag", oldField.tag);
-						//						Debug.debug("newField.tag", newField.tag);
-						//						Debug.debug("oldField.tagInfo", oldField.tagInfo);
-						//						Debug.debug("newField.tagInfo", newField.tagInfo);
-						//						Debug.debug("oldField.fieldType", oldField.fieldType);
-						//						Debug.debug("newField.fieldType", newField.fieldType);
-						//						Debug.debug("oldField.getBytesLength", oldField
-						//								.getBytesLength());
-						//						Debug.debug("newField.getBytesLength", newField
-						//								.getBytesLength());
-						//
-						//						Debug.debug("oldField.valueOffsetBytes",
-						//								oldField.valueOffsetBytes);
-						//						Debug.debug("newField.valueOffsetBytes",
-						//								newField.valueOffsetBytes);
-
-						if (oldField.tag == 0x116 || oldField.tag == 0x117)
-							compare(oldField, newField);
-						else {
-							compare(oldField.valueOffsetBytes,
-									newField.valueOffsetBytes, oldField
-											.getBytesLength(), newField
-											.getBytesLength());
-						}
-					}
-					else
-					{
-						//						Debug.debug("oldField.tagInfo", oldField.tagInfo);
-						//						Debug.debug("oldField.fieldType", oldField.fieldType);
-						//						Debug.debug("newField.fieldType", newField.fieldType);
-						//						Debug.debug("oldField.getBytesLength", oldField
-						//								.getBytesLength());
-						//						Debug.debug("newField.getBytesLength", newField
-						//								.getBytesLength());
-
-						//						Debug.debug("oldField.oversizeValue", oldField.oversizeValue);
-						//						Debug.debug("newField.oversizeValue", newField.oversizeValue);
-
-						compare(oldField.oversizeValue, newField.oversizeValue);
-					}
-				}
-
-			}
-
-			//			Debug.debug();
-		}
-	}
-
-	private void compare(byte a[], byte b[], int aLength, int bLength)
-	{
-		//		Debug.debug("c0 a", a);
-		//		Debug.debug("c0 b", b);
-		assertEquals(aLength, bLength);
-		assertTrue(a.length >= aLength);
-		assertTrue(b.length >= bLength);
-		assertNotNull(a);
-		assertNotNull(b);
-		assertEquals(a.length, b.length);
-		int length = aLength;
-		for (int i = 0; i < length; i++)
-		{
-			//			byte ba = a[i];
-			//			byte bb = b[i];
-			//			boolean eq = ba == bb;
-			//			Debug.debug("i: " + i + ", a[i]: " + ba + ", b[i]: " + bb + " = "
-			//					+ (ba == bb) + " " + eq);
-			//			if(ba != bb)
-			//				assertFalse(true);
-			//
-			//			Debug.debug("i: " + i + ", a[i]: " + ba + ", b[i]: " + bb + " = "
-			//					+ (ba == bb) + " " + eq);
-			//			assertTrue(eq == true);
-			assertTrue("0x" + Integer.toHexString(0xff & a[i]) + " != " + "0x" + Integer.toHexString(0xff & b[i]), a[i] == b[i]);
-			//			Debug.debug("c");
-			//			assertTrue((0xff & a[i]) == (0xff & b[i]));
-		}
-	}
-
-	private void compare(TiffField a, TiffField b) throws ImageReadException
-	{
-		Object v1 = a.getValue();
-		Object v2 = b.getValue();
-
-		//		Debug.debug("v1", v1 + " (" + Debug.getType(v1) + ")");
-		//		Debug.debug("v2", v2 + " (" + Debug.getType(v2) + ")");
-		assertTrue(v1.equals(v2));
-	}
-
-	private void compare(byte a[], byte b[])
-	{
-		//		Debug.debug("c1 a", a);
-		//		Debug.debug("c1 b", b);
-		assertNotNull(a);
-		assertNotNull(b);
-		assertEquals(a.length, b.length);
-		for (int i = 0; i < a.length; i++)
-			assertEquals(a[i], b[i]);
-	}
+    //    public ExifRewriteTest(String name)
+    //    {
+    //        super(name);
+    //    }
+
+    public void testRemove() throws IOException, ImageReadException,
+            ImageWriteException
+    {
+        List images = getImagesWithExifData();
+        for (int i = 0; i < images.size(); i++)
+        {
+            if(i%10==0)
+            Debug.purgeMemory();
+
+            File imageFile = (File) images.get(i);
+            Debug.debug("imageFile", imageFile);
+
+            boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
+            if (ignoreImageData)
+                continue;
+
+            ByteSource byteSource = new ByteSourceFile(imageFile);
+            Debug.debug("Source Segments:");
+            new JpegUtils().dumpJFIF(byteSource);
+
+            {
+                JpegImageMetadata metadata = (JpegImageMetadata) Sanselan
+                        .getMetadata(imageFile);
+                //                assertNotNull(metadata.getExif());
+            }
+
+            {
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                new ExifRewriter().removeExifMetadata(byteSource, baos);
+                byte bytes[] = baos.toByteArray();
+                File tempFile = createTempFile("test", ".jpg");
+                Debug.debug("tempFile", tempFile);
+                IOUtils.writeToFile(bytes, tempFile);
+
+                Debug.debug("Output Segments:");
+                new JpegUtils().dumpJFIF(new ByteSourceArray(bytes));
+
+                assertTrue(!hasExifData(tempFile));
+            }
+        }
+    }
+
+    public void testInsert() throws IOException, ImageReadException,
+            ImageWriteException
+    {
+        List images = getImagesWithExifData();
+        for (int i = 0; i < images.size(); i++)
+        {
+            if(i%10==0)
+            Debug.purgeMemory();
+
+            File imageFile = (File) images.get(i);
+            Debug.debug("imageFile", imageFile);
+
+            // This test image contains invalid EXIF and would break the test.
+            if (imageFile.getName().equals("Oregon Scientific DS6639 - DSC_0307.JPG")) {
+                continue;
+            }
+
+            boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
+            if (ignoreImageData)
+                continue;
+
+            ByteSource byteSource = new ByteSourceFile(imageFile);
+            Debug.debug("Source Segments:");
+            new JpegUtils().dumpJFIF(byteSource);
+
+            JpegImageMetadata originalMetadata = (JpegImageMetadata) Sanselan
+                    .getMetadata(imageFile);
+            assertNotNull(originalMetadata);
+
+            TiffImageMetadata oldExifMetadata = originalMetadata.getExif();
+            assertNotNull(oldExifMetadata);
+
+            ByteSource stripped;
+            {
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                new ExifRewriter().removeExifMetadata(byteSource, baos);
+                byte bytes[] = baos.toByteArray();
+                File tempFile = createTempFile("removed", ".jpg");
+                Debug.debug("tempFile", tempFile);
+                IOUtils.writeToFile(bytes, tempFile);
+
+                Debug.debug("Output Segments:");
+                stripped = new ByteSourceArray(bytes);
+                new JpegUtils().dumpJFIF(stripped);
+
+                assertTrue(!hasExifData(tempFile));
+            }
+
+            {
+                TiffOutputSet outputSet = oldExifMetadata.getOutputSet();
+                //            outputSet.dump();
+
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+                new ExifRewriter().updateExifMetadataLossy(stripped, baos,
+                        outputSet);
+
+                byte bytes[] = baos.toByteArray();
+                File tempFile = createTempFile("inserted" + "_", ".jpg");
+                Debug.debug("tempFile", tempFile);
+                IOUtils.writeToFile(bytes, tempFile);
+
+                Debug.debug("Output Segments:");
+                new JpegUtils().dumpJFIF(new ByteSourceArray(bytes));
+
+                //                assertTrue(!hasExifData(tempFile));
+
+                JpegImageMetadata newMetadata = (JpegImageMetadata) Sanselan
+                        .getMetadata(tempFile);
+                assertNotNull(newMetadata);
+                TiffImageMetadata newExifMetadata = newMetadata.getExif();
+                assertNotNull(newExifMetadata);
+                //                newMetadata.dump();
+
+                compare(oldExifMetadata, newExifMetadata);
+            }
+
+        }
+    }
+
+    private interface Rewriter
+    {
+        public void rewrite(ByteSource byteSource, OutputStream os,
+                TiffOutputSet outputSet) throws ImageReadException,
+                IOException, ImageWriteException;
+    }
+
+    private void rewrite(Rewriter rewriter, String name) throws IOException,
+            ImageReadException, ImageWriteException
+    {
+        List images = getImagesWithExifData();
+        for (int i = 0; i < images.size(); i++)
+        {
+            if(i%10==0)
+            Debug.purgeMemory();
+
+            File imageFile = (File) images.get(i);
+
+            // This test image contains invalid EXIF and would break the test.
+            if (imageFile.getName().equals("Oregon Scientific DS6639 - DSC_0307.JPG")) {
+                continue;
+            }
+
+            try
+            {
+
+                Debug.debug("imageFile", imageFile);
+
+                boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
+                if (ignoreImageData)
+                    continue;
+
+                ByteSource byteSource = new ByteSourceFile(imageFile);
+                Debug.debug("Source Segments:");
+                new JpegUtils().dumpJFIF(byteSource);
+
+                JpegImageMetadata oldMetadata = (JpegImageMetadata) Sanselan
+                        .getMetadata(imageFile);
+                if (null == oldMetadata)
+                    continue;
+                assertNotNull(oldMetadata);
+
+                TiffImageMetadata oldExifMetadata = oldMetadata.getExif();
+                if (null == oldExifMetadata)
+                    continue;
+                assertNotNull(oldExifMetadata);
+                oldMetadata.dump();
+
+                //            TiffImageMetadata tiffImageMetadata = metadata.getExif();
+                //            Photoshop photoshop = metadata.getPhotoshop();
+
+                TiffOutputSet outputSet = oldExifMetadata.getOutputSet();
+                //            outputSet.dump();
+
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                rewriter.rewrite(byteSource, baos, outputSet);
+                byte bytes[] = baos.toByteArray();
+                File tempFile = createTempFile(name + "_", ".jpg");
+                Debug.debug("tempFile", tempFile);
+                IOUtils.writeToFile(bytes, tempFile);
+
+                Debug.debug("Output Segments:");
+                new JpegUtils().dumpJFIF(new ByteSourceArray(bytes));
+
+                //                assertTrue(!hasExifData(tempFile));
+
+                JpegImageMetadata newMetadata = (JpegImageMetadata) Sanselan
+                        .getMetadata(tempFile);
+                assertNotNull(newMetadata);
+                TiffImageMetadata newExifMetadata = newMetadata.getExif();
+                assertNotNull(newExifMetadata);
+                //                newMetadata.dump();
+
+                compare(oldExifMetadata, newExifMetadata);
+            }
+            catch (IOException e)
+            {
+                Debug.debug("imageFile", imageFile.getAbsoluteFile());
+                Debug.debug(e);
+                throw e;
+            }
+            catch (ImageReadException e)
+            {
+                Debug.debug("imageFile", imageFile.getAbsoluteFile());
+                Debug.debug(e);
+                throw e;
+            }
+            catch (ImageWriteException e)
+            {
+                Debug.debug("imageFile", imageFile.getAbsoluteFile());
+                Debug.debug(e);
+                throw e;
+            }
+
+        }
+    }
+
+    public void testRewriteLossy() throws IOException, ImageReadException,
+            ImageWriteException
+    {
+        Rewriter rewriter = new Rewriter()
+        {
+            public void rewrite(ByteSource byteSource, OutputStream os,
+                    TiffOutputSet outputSet) throws ImageReadException,
+                    IOException, ImageWriteException
+            {
+                new ExifRewriter().updateExifMetadataLossy(byteSource, os,
+                        outputSet);
+            }
+        };
+
+        rewrite(rewriter, "lossy");
+    }
+
+    public void testRewriteLossless() throws IOException, ImageReadException,
+            ImageWriteException
+    {
+        Rewriter rewriter = new Rewriter()
+        {
+            public void rewrite(ByteSource byteSource, OutputStream os,
+                    TiffOutputSet outputSet) throws ImageReadException,
+                    IOException, ImageWriteException
+            {
+                new ExifRewriter().updateExifMetadataLossless(byteSource, os,
+                        outputSet);
+            }
+        };
+
+        rewrite(rewriter, "lossless");
+    }
+
+    private Hashtable makeDirectoryMap(ArrayList directories)
+    {
+        Hashtable directoryMap = new Hashtable();
+        for (int i = 0; i < directories.size(); i++)
+        {
+            TiffImageMetadata.Directory directory = (TiffImageMetadata.Directory) directories
+                    .get(i);
+            directoryMap.put(new Integer(directory.type), directory);
+        }
+        return directoryMap;
+    }
+
+    private Hashtable makeFieldMap(ArrayList items)
+    {
+        Hashtable fieldMap = new Hashtable();
+        for (int i = 0; i < items.size(); i++)
+        {
+            TiffImageMetadata.Item item = (TiffImageMetadata.Item) items.get(i);
+            TiffField field = item.getTiffField();
+            Object key = new Integer(field.tag);
+            if (!fieldMap.containsKey(key))
+                fieldMap.put(key, field);
+        }
+        return fieldMap;
+    }
+
+    private void compare(TiffImageMetadata oldExifMetadata,
+            TiffImageMetadata newExifMetadata) throws ImageReadException
+    {
+        assertNotNull(oldExifMetadata);
+        assertNotNull(newExifMetadata);
+
+        ArrayList oldDirectories = oldExifMetadata.getDirectories();
+        ArrayList newDirectories = newExifMetadata.getDirectories();
+
+        assertTrue(oldDirectories.size() == newDirectories.size());
+
+        Hashtable oldDirectoryMap = makeDirectoryMap(oldDirectories);
+        Hashtable newDirectoryMap = makeDirectoryMap(newDirectories);
+
+        assertEquals(oldDirectories.size(), oldDirectoryMap.keySet().size());
+        ArrayList oldDirectoryTypes = new ArrayList(oldDirectoryMap.keySet());
+        Collections.sort(oldDirectoryTypes);
+        ArrayList newDirectoryTypes = new ArrayList(newDirectoryMap.keySet());
+        Collections.sort(newDirectoryTypes);
+        assertEquals(oldDirectoryTypes, newDirectoryTypes);
+
+        for (int i = 0; i < oldDirectoryTypes.size(); i++)
+        {
+            Integer dirType = (Integer) oldDirectoryTypes.get(i);
+
+            //            Debug.debug("dirType", dirType);
+
+            TiffImageMetadata.Directory oldDirectory = (TiffImageMetadata.Directory) oldDirectoryMap
+                    .get(dirType);
+            TiffImageMetadata.Directory newDirectory = (TiffImageMetadata.Directory) newDirectoryMap
+                    .get(dirType);
+            assertNotNull(oldDirectory);
+            assertNotNull(newDirectory);
+
+            ArrayList oldItems = oldDirectory.getItems();
+            ArrayList newItems = newDirectory.getItems();
+
+            //            Debug.debug("oldItems.size()", oldItems.size());
+            //            Debug.debug("newItems.size()", newItems.size());
+            //            dump("oldItems", oldItems);
+            //            dump("newItems", newItems);
+
+            //            if (oldItems.size() != newItems.size())
+            //                ;
+            //            {
+            //            dump("oldItems", oldItems);
+            //            dump("newItems", newItems);
+            //            }
+            //            assertTrue(oldItems.size() == newItems.size());
+
+            Hashtable oldFieldMap = makeFieldMap(oldItems);
+            Hashtable newFieldMap = makeFieldMap(newItems);
+
+            Set missingInNew = new HashSet(oldFieldMap.keySet());
+            missingInNew.removeAll(newFieldMap.keySet());
+
+            Set missingInOld = new HashSet(newFieldMap.keySet());
+            missingInOld.removeAll(oldFieldMap.keySet());
+
+            //            dump("missingInNew", missingInNew);
+            //            dump("missingInOld", missingInOld);
+            //            dump("newFieldMap.keySet()", newFieldMap.keySet());
+            //            dump("oldFieldMap.keySet()", oldFieldMap.keySet());
+
+            assertTrue(missingInNew.size() == 0);
+            assertTrue(missingInOld.size() == 0);
+
+            //            Debug.debug("oldItems.size()", oldItems.size());
+            //            Debug.debug("oldFieldMap.keySet().size()", oldFieldMap.keySet().size());
+
+            //            assertEquals(oldItems.size(), oldFieldMap.keySet().size());
+            //            assertEquals(oldFieldMap.keySet(), newFieldMap.keySet());
+            //            assertEquals(oldFieldMap.keySet(), newFieldMap.keySet());
+
+            ArrayList oldFieldTags = new ArrayList(oldFieldMap.keySet());
+            Collections.sort(oldFieldTags);
+            ArrayList newFieldTags = new ArrayList(newFieldMap.keySet());
+            Collections.sort(newFieldTags);
+            assertEquals(oldFieldTags, newFieldTags);
+
+            for (int j = 0; j < oldFieldTags.size(); j++)
+            {
+                Integer fieldTag = (Integer) oldFieldTags.get(j);
+
+                TiffField oldField = (TiffField) oldFieldMap.get(fieldTag);
+                TiffField newField = (TiffField) newFieldMap.get(fieldTag);
+
+                //                Debug.debug("fieldTag", fieldTag);
+                //                Debug.debug("oldField", oldField);
+                //                Debug.debug("newField", newField);
+
+                //                fieldTag.
+                assertNotNull(oldField);
+                assertNotNull(newField);
+
+                assertEquals(oldField.tag, newField.tag);
+                assertEquals(dirType.intValue(), newField.directoryType);
+                assertEquals(oldField.directoryType, newField.directoryType);
+                assertEquals(oldField.length, newField.length);
+                assertEquals(oldField.isLocalValue(), newField.isLocalValue());
+
+                if (oldField.tag == 0x202)
+                {
+                    // ignore "jpg from raw length" value. may have off-by-one bug in certain cameras.
+                    // i.e. Sony DCR-PC110
+                    continue;
+                }
+
+                if (!oldField.tagInfo.isOffset())
+                {
+                    if (oldField.tagInfo.isText())
+                        ;
+                    else if (oldField.isLocalValue())
+                    {
+                        //                        Debug.debug("oldField.tag", oldField.tag);
+                        //                        Debug.debug("newField.tag", newField.tag);
+                        //                        Debug.debug("oldField.tagInfo", oldField.tagInfo);
+                        //                        Debug.debug("newField.tagInfo", newField.tagInfo);
+                        //                        Debug.debug("oldField.fieldType", oldField.fieldType);
+                        //                        Debug.debug("newField.fieldType", newField.fieldType);
+                        //                        Debug.debug("oldField.getBytesLength", oldField
+                        //                                .getBytesLength());
+                        //                        Debug.debug("newField.getBytesLength", newField
+                        //                                .getBytesLength());
+                        //
+                        //                        Debug.debug("oldField.valueOffsetBytes",
+                        //                                oldField.valueOffsetBytes);
+                        //                        Debug.debug("newField.valueOffsetBytes",
+                        //                                newField.valueOffsetBytes);
+
+                        if (oldField.tag == 0x116 || oldField.tag == 0x117)
+                            compare(oldField, newField);
+                        else {
+                            compare(oldField.valueOffsetBytes,
+                                    newField.valueOffsetBytes, oldField
+                                            .getBytesLength(), newField
+                                            .getBytesLength());
+                        }
+                    }
+                    else
+                    {
+                        //                        Debug.debug("oldField.tagInfo", oldField.tagInfo);
+                        //                        Debug.debug("oldField.fieldType", oldField.fieldType);
+                        //                        Debug.debug("newField.fieldType", newField.fieldType);
+                        //                        Debug.debug("oldField.getBytesLength", oldField
+                        //                                .getBytesLength());
+                        //                        Debug.debug("newField.getBytesLength", newField
+                        //                                .getBytesLength());
+
+                        //                        Debug.debug("oldField.oversizeValue", oldField.oversizeValue);
+                        //                        Debug.debug("newField.oversizeValue", newField.oversizeValue);
+
+                        compare(oldField.oversizeValue, newField.oversizeValue);
+                    }
+                }
+
+            }
+
+            //            Debug.debug();
+        }
+    }
+
+    private void compare(byte a[], byte b[], int aLength, int bLength)
+    {
+        //        Debug.debug("c0 a", a);
+        //        Debug.debug("c0 b", b);
+        assertEquals(aLength, bLength);
+        assertTrue(a.length >= aLength);
+        assertTrue(b.length >= bLength);
+        assertNotNull(a);
+        assertNotNull(b);
+        assertEquals(a.length, b.length);
+        int length = aLength;
+        for (int i = 0; i < length; i++)
+        {
+            //            byte ba = a[i];
+            //            byte bb = b[i];
+            //            boolean eq = ba == bb;
+            //            Debug.debug("i: " + i + ", a[i]: " + ba + ", b[i]: " + bb + " = "
+            //                    + (ba == bb) + " " + eq);
+            //            if(ba != bb)
+            //                assertFalse(true);
+            //
+            //            Debug.debug("i: " + i + ", a[i]: " + ba + ", b[i]: " + bb + " = "
+            //                    + (ba == bb) + " " + eq);
+            //            assertTrue(eq == true);
+            assertTrue("0x" + Integer.toHexString(0xff & a[i]) + " != " + "0x" + Integer.toHexString(0xff & b[i]), a[i] == b[i]);
+            //            Debug.debug("c");
+            //            assertTrue((0xff & a[i]) == (0xff & b[i]));
+        }
+    }
+
+    private void compare(TiffField a, TiffField b) throws ImageReadException
+    {
+        Object v1 = a.getValue();
+        Object v2 = b.getValue();
+
+        //        Debug.debug("v1", v1 + " (" + Debug.getType(v1) + ")");
+        //        Debug.debug("v2", v2 + " (" + Debug.getType(v2) + ")");
+        assertTrue(v1.equals(v2));
+    }
+
+    private void compare(byte a[], byte b[])
+    {
+        //        Debug.debug("c1 a", a);
+        //        Debug.debug("c1 b", b);
+        assertNotNull(a);
+        assertNotNull(b);
+        assertEquals(a.length, b.length);
+        for (int i = 0; i < a.length; i++)
+            assertEquals(a[i], b[i]);
+    }
 }

Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/GpsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/GpsTest.java?rev=995634&r1=995633&r2=995634&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/GpsTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/GpsTest.java Fri Sep 10 01:35:50 2010
@@ -31,68 +31,68 @@ import org.apache.sanselan.util.Debug;
 public class GpsTest extends ExifBaseTest implements SanselanConstants
 {
 
-	public void test() throws Exception
-	{
+    public void test() throws Exception
+    {
 
-		List images = getImagesWithExifData(300);
-		for (int i = 0; i < images.size(); i++)
-		{
-			if (i % 10 == 0)
-				Debug.purgeMemory();
-
-			File imageFile = (File) images.get(i);
-
-//			Debug.debug();
-//			Debug.debug("imageFile", imageFile);
-
-			if (imageFile.getParentFile().getName().toLowerCase().equals(
-					"@broken"))
-				continue;
-
-			try
-			{
-				Map params = new HashMap();
-				boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-				params.put(PARAM_KEY_READ_THUMBNAILS, new Boolean(
-						!ignoreImageData));
-
-				JpegImageMetadata metadata = (JpegImageMetadata) Sanselan
-						.getMetadata(imageFile, params);
-				if (null == metadata)
-					continue;
-
-				TiffImageMetadata exifMetadata = metadata.getExif();
-				if (null == exifMetadata)
-					continue;
-
-				TiffImageMetadata.GPSInfo gpsInfo = exifMetadata.getGPS();
-				if (null == gpsInfo)
-					continue;
-
-				Debug.debug("imageFile", imageFile);
-				Debug.debug("gpsInfo", gpsInfo);
-				Debug.debug("gpsInfo longitude as degrees east", gpsInfo
-						.getLongitudeAsDegreesEast());
-				Debug.debug("gpsInfo latitude as degrees north", gpsInfo
-						.getLatitudeAsDegreesNorth());
-
-				Debug.debug();
-			}
-			catch (Exception e)
-			{
-				Debug.debug("imageFile", imageFile.getAbsoluteFile());
-				Debug.debug("imageFile", imageFile.length());
-				Debug.debug(e, 13);
-
-				//				File brokenFolder = new File(imageFile.getParentFile(), "@Broken");
-				//				if(!brokenFolder.exists())
-				//					brokenFolder.mkdirs();
-				//				File movedFile = new File(brokenFolder, imageFile.getName());
-				//				imageFile.renameTo(movedFile);
-
-				throw e;
-			}
-		}
+        List images = getImagesWithExifData(300);
+        for (int i = 0; i < images.size(); i++)
+        {
+            if (i % 10 == 0)
+                Debug.purgeMemory();
+
+            File imageFile = (File) images.get(i);
+
+//            Debug.debug();
+//            Debug.debug("imageFile", imageFile);
+
+            if (imageFile.getParentFile().getName().toLowerCase().equals(
+                    "@broken"))
+                continue;
+
+            try
+            {
+                Map params = new HashMap();
+                boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
+                params.put(PARAM_KEY_READ_THUMBNAILS, new Boolean(
+                        !ignoreImageData));
+
+                JpegImageMetadata metadata = (JpegImageMetadata) Sanselan
+                        .getMetadata(imageFile, params);
+                if (null == metadata)
+                    continue;
+
+                TiffImageMetadata exifMetadata = metadata.getExif();
+                if (null == exifMetadata)
+                    continue;
+
+                TiffImageMetadata.GPSInfo gpsInfo = exifMetadata.getGPS();
+                if (null == gpsInfo)
+                    continue;
+
+                Debug.debug("imageFile", imageFile);
+                Debug.debug("gpsInfo", gpsInfo);
+                Debug.debug("gpsInfo longitude as degrees east", gpsInfo
+                        .getLongitudeAsDegreesEast());
+                Debug.debug("gpsInfo latitude as degrees north", gpsInfo
+                        .getLatitudeAsDegreesNorth());
+
+                Debug.debug();
+            }
+            catch (Exception e)
+            {
+                Debug.debug("imageFile", imageFile.getAbsoluteFile());
+                Debug.debug("imageFile", imageFile.length());
+                Debug.debug(e, 13);
+
+                //                File brokenFolder = new File(imageFile.getParentFile(), "@Broken");
+                //                if(!brokenFolder.exists())
+                //                    brokenFolder.mkdirs();
+                //                File movedFile = new File(brokenFolder, imageFile.getName());
+                //                imageFile.renameTo(movedFile);
+
+                throw e;
+            }
+        }
 
-	}
+    }
 }

Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/MakerNoteFieldTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/MakerNoteFieldTest.java?rev=995634&r1=995633&r2=995634&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/MakerNoteFieldTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/MakerNoteFieldTest.java Fri Sep 10 01:35:50 2010
@@ -27,46 +27,46 @@ import org.apache.sanselan.util.Debug;
 
 public class MakerNoteFieldTest extends SpecificExifTagTest
 {
-	//	public MakerNoteFieldTest(String name)
-	//	{
-	//		super(name);
-	//	}
-
-	protected void checkField(File imageFile, TiffField field)
-			throws IOException, ImageReadException, ImageWriteException
-	{
-		if (field.tag == EXIF_TAG_MAKER_NOTE.tag)
-			;
-		else
-			//			if (field.tag == EXIF_TAG_EXIF_OFFSET.tag)
-			//				;
-			//			else
-			return;
-
-		Debug.debug("imageFile", imageFile);
-		Debug.debug("field", field);
-		Debug.debug("field", Debug.getType(field));
-
-		Debug.debug("field", field.tag);
-		Debug.debug("field", field.tagInfo);
-		Debug.debug("length", field.length);
-		Debug.debug("fieldType", field.fieldType);
-		//				Debug.debug("field", Debug.getType(field));
-		Debug.debug();
-
-		//		try
-		//		{
-		//			Object userCommentValue = field.getValue();
-		//			Debug.debug("Text field value(" + field.tagInfo.name + ")",
-		//					userCommentValue);
-		//			//		Debug.debug("userCommentValue", Debug.getType(userCommentValue));
-		//		}
-		//		catch (ImageReadException e)
-		//		{
-		//			Debug.debug("imageFile", imageFile);
-		//			Debug.debug(e);
-		//		}
+    //    public MakerNoteFieldTest(String name)
+    //    {
+    //        super(name);
+    //    }
+
+    protected void checkField(File imageFile, TiffField field)
+            throws IOException, ImageReadException, ImageWriteException
+    {
+        if (field.tag == EXIF_TAG_MAKER_NOTE.tag)
+            ;
+        else
+            //            if (field.tag == EXIF_TAG_EXIF_OFFSET.tag)
+            //                ;
+            //            else
+            return;
+
+        Debug.debug("imageFile", imageFile);
+        Debug.debug("field", field);
+        Debug.debug("field", Debug.getType(field));
+
+        Debug.debug("field", field.tag);
+        Debug.debug("field", field.tagInfo);
+        Debug.debug("length", field.length);
+        Debug.debug("fieldType", field.fieldType);
+        //                Debug.debug("field", Debug.getType(field));
+        Debug.debug();
+
+        //        try
+        //        {
+        //            Object userCommentValue = field.getValue();
+        //            Debug.debug("Text field value(" + field.tagInfo.name + ")",
+        //                    userCommentValue);
+        //            //        Debug.debug("userCommentValue", Debug.getType(userCommentValue));
+        //        }
+        //        catch (ImageReadException e)
+        //        {
+        //            Debug.debug("imageFile", imageFile);
+        //            Debug.debug(e);
+        //        }
 
-	}
+    }
 
 }

Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/SpecificExifTagTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/SpecificExifTagTest.java?rev=995634&r1=995633&r2=995634&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/SpecificExifTagTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/SpecificExifTagTest.java Fri Sep 10 01:35:50 2010
@@ -34,68 +34,68 @@ import org.apache.sanselan.formats.tiff.
 import org.apache.sanselan.util.Debug;
 
 public abstract class SpecificExifTagTest extends ExifBaseTest
-		implements
-			AllTagConstants
+        implements
+            AllTagConstants
 {
-	//	public SpecificExifTagTest(String name)
-	//	{
-	//		super(name);
-	//	}
-
-	public void testSingleImage() throws IOException, ImageReadException,
-			ImageWriteException
-	{
-		File imageFile = getImageWithExifData();
-		checkImage(imageFile);
-	}
-
-	public void testAllImages() throws IOException, ImageReadException,
-			ImageWriteException
-	{
-		List images = getImagesWithExifData();
-		for (int i = 0; i < images.size(); i++)
-		{
-			if(i%10==0)
-			Debug.purgeMemory();
-
-			File imageFile = (File) images.get(i);
-			if (imageFile.getParentFile().getName().toLowerCase().equals(
-					"@broken"))
-				continue;
-			checkImage(imageFile);
-		}
-	}
-
-	protected abstract void checkField(File imageFile, TiffField field)
-			throws IOException, ImageReadException, ImageWriteException;
-
-	private void checkImage(File imageFile) throws IOException,
-			ImageReadException, ImageWriteException
-	{
-		//		Debug.debug("imageFile", imageFile.getAbsoluteFile());
-
-		Map params = new HashMap();
-		boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-		params.put(PARAM_KEY_READ_THUMBNAILS, new Boolean(!ignoreImageData));
-
-		// note that metadata might be null if no metadata is found.
-		IImageMetadata metadata = Sanselan.getMetadata(imageFile, params);
-		if (null == metadata)
-			return;
-		JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
-
-		// note that exif might be null if no Exif metadata is found.
-		TiffImageMetadata exif = jpegMetadata.getExif();
-		if (null == exif)
-			return;
-
-		List fields = exif.getAllFields();
-		for (int i = 0; i < fields.size(); i++)
-		{
-			TiffField field = (TiffField) fields.get(i);
-			checkField(imageFile, field);
-		}
+    //    public SpecificExifTagTest(String name)
+    //    {
+    //        super(name);
+    //    }
+
+    public void testSingleImage() throws IOException, ImageReadException,
+            ImageWriteException
+    {
+        File imageFile = getImageWithExifData();
+        checkImage(imageFile);
+    }
+
+    public void testAllImages() throws IOException, ImageReadException,
+            ImageWriteException
+    {
+        List images = getImagesWithExifData();
+        for (int i = 0; i < images.size(); i++)
+        {
+            if(i%10==0)
+            Debug.purgeMemory();
+
+            File imageFile = (File) images.get(i);
+            if (imageFile.getParentFile().getName().toLowerCase().equals(
+                    "@broken"))
+                continue;
+            checkImage(imageFile);
+        }
+    }
+
+    protected abstract void checkField(File imageFile, TiffField field)
+            throws IOException, ImageReadException, ImageWriteException;
+
+    private void checkImage(File imageFile) throws IOException,
+            ImageReadException, ImageWriteException
+    {
+        //        Debug.debug("imageFile", imageFile.getAbsoluteFile());
+
+        Map params = new HashMap();
+        boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
+        params.put(PARAM_KEY_READ_THUMBNAILS, new Boolean(!ignoreImageData));
+
+        // note that metadata might be null if no metadata is found.
+        IImageMetadata metadata = Sanselan.getMetadata(imageFile, params);
+        if (null == metadata)
+            return;
+        JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
+
+        // note that exif might be null if no Exif metadata is found.
+        TiffImageMetadata exif = jpegMetadata.getExif();
+        if (null == exif)
+            return;
+
+        List fields = exif.getAllFields();
+        for (int i = 0; i < fields.size(); i++)
+        {
+            TiffField field = (TiffField) fields.get(i);
+            checkField(imageFile, field);
+        }
 
-	}
+    }
 
 }

Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/TextFieldTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/TextFieldTest.java?rev=995634&r1=995633&r2=995634&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/TextFieldTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/TextFieldTest.java Fri Sep 10 01:35:50 2010
@@ -27,47 +27,47 @@ import org.apache.sanselan.util.Debug;
 
 public class TextFieldTest extends SpecificExifTagTest
 {
-	//	public TextFieldTest(String name)
-	//	{
-	//		super(name);
-	//	}
-
-	protected void checkField(File imageFile, TiffField field)
-			throws IOException, ImageReadException, ImageWriteException
-	{
-		if (field.tag == EXIF_TAG_USER_COMMENT.tag)
-			;
-		else if (field.tag == GPS_TAG_GPS_PROCESSING_METHOD.tag
-				&& field.directoryType == EXIF_DIRECTORY_GPS.directoryType)
-			;
-		else if (field.tag == GPS_TAG_GPS_AREA_INFORMATION.tag
-				&& field.directoryType == EXIF_DIRECTORY_GPS.directoryType)
-			;
-		else
-			return;
-
-		//		Debug.debug("field", field);
-		//		Debug.debug("field", Debug.getType(field));
-		//
-		//		Debug.debug("field", field.tag);
-		//		Debug.debug("field", field.tagInfo);
-		//		Debug.debug("field", Debug.getType(field));
-
-		try
-		{
-			Object textFieldValue = field.getValue();
-			//			Debug.debug("imageFile", imageFile.getAbsoluteFile());
-			//			Debug.debug("Text field value(" + field.tagInfo.name + ")",
-			//					textFieldValue);
-			//		Debug.debug("userCommentValue", Debug.getType(userCommentValue));
-		}
-		catch (ImageReadException e)
-		{
-			Debug.debug("imageFile", imageFile.getAbsoluteFile());
-			Debug.debug(e);
-			throw e;
-		}
+    //    public TextFieldTest(String name)
+    //    {
+    //        super(name);
+    //    }
+
+    protected void checkField(File imageFile, TiffField field)
+            throws IOException, ImageReadException, ImageWriteException
+    {
+        if (field.tag == EXIF_TAG_USER_COMMENT.tag)
+            ;
+        else if (field.tag == GPS_TAG_GPS_PROCESSING_METHOD.tag
+                && field.directoryType == EXIF_DIRECTORY_GPS.directoryType)
+            ;
+        else if (field.tag == GPS_TAG_GPS_AREA_INFORMATION.tag
+                && field.directoryType == EXIF_DIRECTORY_GPS.directoryType)
+            ;
+        else
+            return;
+
+        //        Debug.debug("field", field);
+        //        Debug.debug("field", Debug.getType(field));
+        //
+        //        Debug.debug("field", field.tag);
+        //        Debug.debug("field", field.tagInfo);
+        //        Debug.debug("field", Debug.getType(field));
+
+        try
+        {
+            Object textFieldValue = field.getValue();
+            //            Debug.debug("imageFile", imageFile.getAbsoluteFile());
+            //            Debug.debug("Text field value(" + field.tagInfo.name + ")",
+            //                    textFieldValue);
+            //        Debug.debug("userCommentValue", Debug.getType(userCommentValue));
+        }
+        catch (ImageReadException e)
+        {
+            Debug.debug("imageFile", imageFile.getAbsoluteFile());
+            Debug.debug(e);
+            throw e;
+        }
 
-	}
+    }
 
 }

Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java?rev=995634&r1=995633&r2=995634&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java Fri Sep 10 01:35:50 2010
@@ -29,75 +29,75 @@ import org.apache.sanselan.sampleUsage.W
 import org.apache.sanselan.util.Debug;
 
 public class WriteExifMetadataExampleTest extends ExifBaseTest
-		implements
-			AllTagConstants
+        implements
+            AllTagConstants
 {
-	//	public WriteExifMetadataExampleTest(String name)
-	//	{
-	//		super(name);
-	//	}
-
-	public void test() throws IOException, ImageReadException,
-			ImageWriteException
-	{
-		List images = getJpegImages();
-		for (int i = 0; i < images.size(); i++)
-		{
-			if (i % 10 == 0)
-				Debug.purgeMemory();
-
-			File imageFile = (File) images.get(i);
-			Debug.debug("imageFile", imageFile.getAbsoluteFile());
-
-			File tempFile = createTempFile("test", ".jpg");
-			Debug.debug("tempFile", tempFile.getAbsoluteFile());
-
-			try
-			{
-				boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-				if (ignoreImageData)
-					continue;
-				new WriteExifMetadataExample().changeExifMetadata(imageFile,
-						tempFile);
-			}
-			catch (ExifRewriter.ExifOverflowException e)
-			{
-				Debug.debug("Error image", imageFile.getAbsoluteFile());
-				Debug.debug(e, 4);
-			}
-		}
-	}
-
-	public void testInsert() throws IOException, ImageReadException,
-			ImageWriteException
-	{
-		List images = getJpegImages();
-		for (int i = 0; i < images.size(); i++)
-		{
-			if (i % 10 == 0)
-				Debug.purgeMemory();
-
-			File imageFile = (File) images.get(i);
-			Debug.debug("imageFile", imageFile.getAbsoluteFile());
-
-			File tempFile = createTempFile("test", ".jpg");
-			Debug.debug("tempFile", tempFile.getAbsoluteFile());
-
-			try
-			{
-				boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-				if (ignoreImageData)
-					continue;
-				new WriteExifMetadataExample().changeExifMetadata(imageFile,
-						tempFile);
-			}
-			catch (ExifRewriter.ExifOverflowException e)
-			{
-				Debug.debug("Ignoring unavoidable ExifOverflowException", e.getMessage());
-				Debug.debug("Error image", imageFile.getAbsoluteFile());
-//				Debug.debug(e, 4);
-			}
-		}
-	}
+    //    public WriteExifMetadataExampleTest(String name)
+    //    {
+    //        super(name);
+    //    }
+
+    public void test() throws IOException, ImageReadException,
+            ImageWriteException
+    {
+        List images = getJpegImages();
+        for (int i = 0; i < images.size(); i++)
+        {
+            if (i % 10 == 0)
+                Debug.purgeMemory();
+
+            File imageFile = (File) images.get(i);
+            Debug.debug("imageFile", imageFile.getAbsoluteFile());
+
+            File tempFile = createTempFile("test", ".jpg");
+            Debug.debug("tempFile", tempFile.getAbsoluteFile());
+
+            try
+            {
+                boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
+                if (ignoreImageData)
+                    continue;
+                new WriteExifMetadataExample().changeExifMetadata(imageFile,
+                        tempFile);
+            }
+            catch (ExifRewriter.ExifOverflowException e)
+            {
+                Debug.debug("Error image", imageFile.getAbsoluteFile());
+                Debug.debug(e, 4);
+            }
+        }
+    }
+
+    public void testInsert() throws IOException, ImageReadException,
+            ImageWriteException
+    {
+        List images = getJpegImages();
+        for (int i = 0; i < images.size(); i++)
+        {
+            if (i % 10 == 0)
+                Debug.purgeMemory();
+
+            File imageFile = (File) images.get(i);
+            Debug.debug("imageFile", imageFile.getAbsoluteFile());
+
+            File tempFile = createTempFile("test", ".jpg");
+            Debug.debug("tempFile", tempFile.getAbsoluteFile());
+
+            try
+            {
+                boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
+                if (ignoreImageData)
+                    continue;
+                new WriteExifMetadataExample().changeExifMetadata(imageFile,
+                        tempFile);
+            }
+            catch (ExifRewriter.ExifOverflowException e)
+            {
+                Debug.debug("Ignoring unavoidable ExifOverflowException", e.getMessage());
+                Debug.debug("Error image", imageFile.getAbsoluteFile());
+//                Debug.debug(e, 4);
+            }
+        }
+    }
 
 }

Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/iptc/IptcBaseTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/iptc/IptcBaseTest.java?rev=995634&r1=995633&r2=995634&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/iptc/IptcBaseTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/iptc/IptcBaseTest.java Fri Sep 10 01:35:50 2010
@@ -29,77 +29,77 @@ import org.apache.sanselan.formats.jpeg.
 
 public abstract class IptcBaseTest extends SanselanTest
 {
-	protected static boolean hasIptcData(File file)
-	{
-		//		Debug.debug("hasIptcData file", file.getAbsoluteFile());
-
-		if (!file.getName().toLowerCase().endsWith(".jpg"))
-			return false;
-		//ImageFormat format = Sanselan.guessFormat(file);
-		//if (format != ImageFormat.IMAGE_FORMAT_JPEG)
-		//	return false;
-
-		try
-		{
-			ByteSource byteSource = new ByteSourceFile(file);
-			return new JpegImageParser().hasIptcSegment(byteSource);
-		}
-		catch (Exception e)
-		{
-			//			Debug.debug("Error file", file.getAbsoluteFile());
-			//			Debug.debug(e, 4);
-			return false;
-		}
-	}
-
-	private static final ImageFilter HAS_IPTC_IMAGE_FILTER = new ImageFilter()
-	{
-		public boolean accept(File file) throws IOException, ImageReadException
-		{
-			return hasIptcData(file);
-		}
-	};
-
-	private static final ImageFilter JPEG_IMAGE_FILTER = new ImageFilter()
-	{
-		public boolean accept(File file) throws IOException, ImageReadException
-		{
-			return file.getName().toLowerCase().endsWith(".jpg");
-		}
-	};
-
-	protected File getImageWithIptcData() throws IOException,
-			ImageReadException
-	{
-		return getTestImage(HAS_IPTC_IMAGE_FILTER);
-	}
-
-	protected List getImagesWithIptcData() throws IOException,
-			ImageReadException
-	{
-		return getTestImages(HAS_IPTC_IMAGE_FILTER);
-	}
-
-	protected List getImagesWithIptcData(int max) throws IOException,
-			ImageReadException
-	{
-		return getTestImages(HAS_IPTC_IMAGE_FILTER, max);
-	}
-
-	protected File getJpegImage() throws IOException, ImageReadException
-	{
-		return getTestImage(JPEG_IMAGE_FILTER);
-	}
-
-	protected List getJpegImages() throws IOException, ImageReadException
-	{
-		return getTestImages(JPEG_IMAGE_FILTER);
-	}
-
-	protected List getJpegImages(int max) throws IOException,
-			ImageReadException
-	{
-		return getTestImages(JPEG_IMAGE_FILTER, max);
-	}
+    protected static boolean hasIptcData(File file)
+    {
+        //        Debug.debug("hasIptcData file", file.getAbsoluteFile());
+
+        if (!file.getName().toLowerCase().endsWith(".jpg"))
+            return false;
+        //ImageFormat format = Sanselan.guessFormat(file);
+        //if (format != ImageFormat.IMAGE_FORMAT_JPEG)
+        //    return false;
+
+        try
+        {
+            ByteSource byteSource = new ByteSourceFile(file);
+            return new JpegImageParser().hasIptcSegment(byteSource);
+        }
+        catch (Exception e)
+        {
+            //            Debug.debug("Error file", file.getAbsoluteFile());
+            //            Debug.debug(e, 4);
+            return false;
+        }
+    }
+
+    private static final ImageFilter HAS_IPTC_IMAGE_FILTER = new ImageFilter()
+    {
+        public boolean accept(File file) throws IOException, ImageReadException
+        {
+            return hasIptcData(file);
+        }
+    };
+
+    private static final ImageFilter JPEG_IMAGE_FILTER = new ImageFilter()
+    {
+        public boolean accept(File file) throws IOException, ImageReadException
+        {
+            return file.getName().toLowerCase().endsWith(".jpg");
+        }
+    };
+
+    protected File getImageWithIptcData() throws IOException,
+            ImageReadException
+    {
+        return getTestImage(HAS_IPTC_IMAGE_FILTER);
+    }
+
+    protected List getImagesWithIptcData() throws IOException,
+            ImageReadException
+    {
+        return getTestImages(HAS_IPTC_IMAGE_FILTER);
+    }
+
+    protected List getImagesWithIptcData(int max) throws IOException,
+            ImageReadException
+    {
+        return getTestImages(HAS_IPTC_IMAGE_FILTER, max);
+    }
+
+    protected File getJpegImage() throws IOException, ImageReadException
+    {
+        return getTestImage(JPEG_IMAGE_FILTER);
+    }
+
+    protected List getJpegImages() throws IOException, ImageReadException
+    {
+        return getTestImages(JPEG_IMAGE_FILTER);
+    }
+
+    protected List getJpegImages(int max) throws IOException,
+            ImageReadException
+    {
+        return getTestImages(JPEG_IMAGE_FILTER, max);
+    }
 
 }

Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/iptc/IptcDumpTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/iptc/IptcDumpTest.java?rev=995634&r1=995633&r2=995634&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/iptc/IptcDumpTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/iptc/IptcDumpTest.java Fri Sep 10 01:35:50 2010
@@ -32,53 +32,53 @@ import org.apache.sanselan.util.Debug;
 public class IptcDumpTest extends IptcBaseTest
 {
 
-	public void test() throws IOException, ImageReadException
-	{
-		List images = getImagesWithIptcData();
-		for (int i = 0; i < images.size(); i++)
-		{
-			if (i % 10 == 0)
-				Debug.purgeMemory();
-
-			File imageFile = (File) images.get(i);
-			Debug.debug("imageFile", imageFile);
-			Debug.debug();
-
-			// ByteSource byteSource = new ByteSourceFile(imageFile);
-			// Debug.debug("Segments:");
-			// new JpegUtils().dumpJFIF(byteSource);
-
-			Map params = new HashMap();
-			boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-			params
-					.put(PARAM_KEY_READ_THUMBNAILS, new Boolean(
-							!ignoreImageData));
-			// params.put(PARAM_KEY_VERBOSE, Boolean.TRUE);
-
-			JpegImageMetadata metadata = (JpegImageMetadata) Sanselan
-					.getMetadata(imageFile, params);
-			assertNotNull(metadata);
-			assertNotNull(metadata.getPhotoshop());
-
-			metadata.getPhotoshop().dump();
-			// if(metadata.getPhotoshop().getItems().size()>0)
-			// Debug.debug("iptc size",
-			// metadata.getPhotoshop().getItems().size());
-
-			JpegPhotoshopMetadata psMetadata = metadata.getPhotoshop();
-			List oldRecords = psMetadata.photoshopApp13Data.getRecords();
-
-			System.out.println();
-			for (int j = 0; j < oldRecords.size(); j++)
-			{
-				IPTCRecord record = (IPTCRecord) oldRecords.get(j);
-				if (record.iptcType.type != IPTCConstants.IPTC_TYPE_CITY.type)
-					System.out.println("Key: " + record.iptcType.name + " (0x"
-							+ Integer.toHexString(record.iptcType.type)
-							+ "), value: " + record.value);
-			}
-			System.out.println();
-		}
-	}
+    public void test() throws IOException, ImageReadException
+    {
+        List images = getImagesWithIptcData();
+        for (int i = 0; i < images.size(); i++)
+        {
+            if (i % 10 == 0)
+                Debug.purgeMemory();
+
+            File imageFile = (File) images.get(i);
+            Debug.debug("imageFile", imageFile);
+            Debug.debug();
+
+            // ByteSource byteSource = new ByteSourceFile(imageFile);
+            // Debug.debug("Segments:");
+            // new JpegUtils().dumpJFIF(byteSource);
+
+            Map params = new HashMap();
+            boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
+            params
+                    .put(PARAM_KEY_READ_THUMBNAILS, new Boolean(
+                            !ignoreImageData));
+            // params.put(PARAM_KEY_VERBOSE, Boolean.TRUE);
+
+            JpegImageMetadata metadata = (JpegImageMetadata) Sanselan
+                    .getMetadata(imageFile, params);
+            assertNotNull(metadata);
+            assertNotNull(metadata.getPhotoshop());
+
+            metadata.getPhotoshop().dump();
+            // if(metadata.getPhotoshop().getItems().size()>0)
+            // Debug.debug("iptc size",
+            // metadata.getPhotoshop().getItems().size());
+
+            JpegPhotoshopMetadata psMetadata = metadata.getPhotoshop();
+            List oldRecords = psMetadata.photoshopApp13Data.getRecords();
+
+            System.out.println();
+            for (int j = 0; j < oldRecords.size(); j++)
+            {
+                IPTCRecord record = (IPTCRecord) oldRecords.get(j);
+                if (record.iptcType.type != IPTCConstants.IPTC_TYPE_CITY.type)
+                    System.out.println("Key: " + record.iptcType.name + " (0x"
+                            + Integer.toHexString(record.iptcType.type)
+                            + "), value: " + record.value);
+            }
+            System.out.println();
+        }
+    }
 
 }