From cda19ece0d18910fc1219b01afd2efe229fedcaf Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Wed, 1 Feb 2012 15:57:06 +0100 Subject: [PATCH] More tests. --- .../imageio/ImageReaderBase.java | 4 ++ .../twelvemonkeys/imageio/util/IIOUtil.java | 3 + .../util/ImageReaderAbstractTestCase.java | 66 +++++++++++++++++++ .../imageio/plugins/ico/DIBImageReader.java | 2 +- .../plugins/ico/CURImageReaderTestCase.java | 8 +++ .../plugins/ico/ICOImageReaderTestCase.java | 10 +++ .../reference/JPEGImageReaderTestCase.java | 16 +++-- .../thumbsdb/ThumbsDBImageReaderTestCase.java | 8 +++ 8 files changed, 110 insertions(+), 7 deletions(-) diff --git a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/ImageReaderBase.java b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/ImageReaderBase.java index bae96a63..42179673 100644 --- a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/ImageReaderBase.java +++ b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/ImageReaderBase.java @@ -354,6 +354,10 @@ public abstract class ImageReaderBase extends ImageReader { Thread.currentThread().interrupt(); } catch (InvocationTargetException e) { + if (e.getCause() instanceof RuntimeException) { + throw (RuntimeException) e.getCause(); + } + throw new RuntimeException(e); } } diff --git a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java index 58177a46..e17376dc 100755 --- a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java +++ b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java @@ -57,6 +57,9 @@ public final class IIOUtil { /** * Creates an {@code OutputStream} adapter that writes to an underlying {@code ImageOutputStream}. + *

+ * Note: The adapter is buffered, and MUST be properly flushed/closed after use, + * otherwise data may be lost. * * @param pStream the stream to write to. * @return an {@code OutputSteam} writing to {@code pStream}. diff --git a/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java b/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java index 37f0566b..cf15f1f0 100644 --- a/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java +++ b/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java @@ -1441,6 +1441,72 @@ public abstract class ImageReaderAbstractTestCase { } } + @Test + public void testNotBadCaching() throws IOException { + T reader = createReader(); + TestData data = getTestData().get(0); + reader.setInput(data.getInputStream()); + + BufferedImage one = reader.read(0); + BufferedImage two = reader.read(0); + + assertNotSame("Multiple reads return same (mutable) image", one, two); + + Graphics2D g = one.createGraphics(); + try { + g.setColor(Color.WHITE); + g.setXORMode(Color.BLACK); + g.fillRect(0, 0, one.getWidth(), one.getHeight()); + } + finally { + g.dispose(); + } + + assertTrue(one.getRGB(0, 0) != two.getRGB(0, 0)); + } + + @Test + public void testNotBadCachingThumbnails() throws IOException { + T reader = createReader(); + + if (reader.readerSupportsThumbnails()) { + for (TestData data : getTestData()) { + reader.setInput(data.getInputStream()); + + int images = reader.getNumImages(true); + for (int i = 0; i < images; i++) { + int thumbnails = reader.getNumThumbnails(0); + + for (int j = 0; j < thumbnails; j++) { + BufferedImage one = reader.readThumbnail(i, j); + BufferedImage two = reader.readThumbnail(i, j); + + assertNotSame("Multiple reads return same (mutable) image", one, two); + + Graphics2D g = one.createGraphics(); + try { + g.setColor(Color.WHITE); + g.setXORMode(Color.BLACK); + g.fillRect(0, 0, one.getWidth(), one.getHeight()); + } + finally { + g.dispose(); + } + + assertTrue(one.getRGB(0, 0) != two.getRGB(0, 0)); + } + + if (thumbnails > 0) { + // We've tested thumbnails, let's get out of here + return; + } + } + } + + fail("No thumbnails tested for reader that supports thumbnails."); + } + } + @Ignore("TODO: Implement") @Test public void testSetDestinationBands() throws IOException { diff --git a/imageio/imageio-ico/src/main/java/com/twelvemonkeys/imageio/plugins/ico/DIBImageReader.java b/imageio/imageio-ico/src/main/java/com/twelvemonkeys/imageio/plugins/ico/DIBImageReader.java index a39ad143..11be7c15 100644 --- a/imageio/imageio-ico/src/main/java/com/twelvemonkeys/imageio/plugins/ico/DIBImageReader.java +++ b/imageio/imageio-ico/src/main/java/com/twelvemonkeys/imageio/plugins/ico/DIBImageReader.java @@ -63,7 +63,7 @@ import java.util.List; * @see ICO file format (Wikipedia) */ // SEE http://en.wikipedia.org/wiki/ICO_(icon_image_file_format) -// TODO: Decide wether DirectoryEntry or DIBHeader should be primary source for color count/bit count +// TODO: Decide whether DirectoryEntry or DIBHeader should be primary source for color count/bit count // TODO: Support loading icons from DLLs, see // MSDN // Known issue: 256x256 PNG encoded icons does not have IndexColorModel even if stated in DirectoryEntry (seem impossible as the PNGs are all true color) diff --git a/imageio/imageio-ico/src/test/java/com/twelvemonkeys/imageio/plugins/ico/CURImageReaderTestCase.java b/imageio/imageio-ico/src/test/java/com/twelvemonkeys/imageio/plugins/ico/CURImageReaderTestCase.java index 305b6576..8a6fc296 100755 --- a/imageio/imageio-ico/src/test/java/com/twelvemonkeys/imageio/plugins/ico/CURImageReaderTestCase.java +++ b/imageio/imageio-ico/src/test/java/com/twelvemonkeys/imageio/plugins/ico/CURImageReaderTestCase.java @@ -1,6 +1,7 @@ package com.twelvemonkeys.imageio.plugins.ico; import com.twelvemonkeys.imageio.util.ImageReaderAbstractTestCase; +import org.junit.Ignore; import org.junit.Test; import javax.imageio.ImageReadParam; @@ -110,4 +111,11 @@ public class CURImageReaderTestCase extends ImageReaderAbstractTestCase getMIMETypes() { return Arrays.asList("image/vnd.microsoft.icon", "image/ico", "image/x-icon"); } + + @Test + @Ignore("Known issue") + @Override + public void testNotBadCaching() throws IOException { + super.testNotBadCaching(); + } } \ No newline at end of file diff --git a/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTestCase.java b/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTestCase.java index 07cb48e6..69da521b 100644 --- a/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTestCase.java +++ b/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTestCase.java @@ -4,6 +4,7 @@ import com.sun.imageio.plugins.jpeg.JPEGImageReader; import com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi; import com.twelvemonkeys.imageio.util.ImageReaderAbstractTestCase; import com.twelvemonkeys.lang.SystemUtil; +import org.junit.Ignore; import org.junit.Test; import javax.imageio.IIOException; @@ -93,13 +94,16 @@ public class JPEGImageReaderTestCase extends ImageReaderAbstractTestCase