diff --git a/twelvemonkeys-imageio/psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTestCase.java b/twelvemonkeys-imageio/psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTestCase.java old mode 100755 new mode 100644 index 498eb398..5d8f25c3 --- a/twelvemonkeys-imageio/psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTestCase.java +++ b/twelvemonkeys-imageio/psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTestCase.java @@ -1,11 +1,16 @@ package com.twelvemonkeys.imageio.plugins.psd; import com.twelvemonkeys.imageio.util.ImageReaderAbstractTestCase; +import com.twelvemonkeys.imageio.util.ProgressListenerBase; import javax.imageio.spi.ImageReaderSpi; +import javax.imageio.ImageReader; import java.awt.*; +import java.awt.image.BufferedImage; import java.util.Arrays; import java.util.List; +import java.util.ArrayList; +import java.io.IOException; /** * PSDImageReaderTestCase @@ -31,11 +36,13 @@ public class PSDImageReaderTestCase extends ImageReaderAbstractTestCase getMIMETypes() { return Arrays.asList("image/x-psd"); } + + public void testSupportsThumbnail() { + PSDImageReader imageReader = createReader(); + assertTrue(imageReader.readerSupportsThumbnails()); + } + + public void testThumbnailReading() throws IOException { + PSDImageReader imageReader = createReader(); + + imageReader.setInput(getTestData().get(0).getInputStream()); + + assertEquals(1, imageReader.getNumThumbnails(0)); + + BufferedImage thumbnail = imageReader.readThumbnail(0, 0); + assertNotNull(thumbnail); + + assertEquals(128, thumbnail.getWidth()); + assertEquals(96, thumbnail.getHeight()); + } + + public void testThumbnailReadingNoInput() throws IOException { + PSDImageReader imageReader = createReader(); + + try { + imageReader.getNumThumbnails(0); + fail("Expected IllegalStateException"); + } + catch (IllegalStateException expected) { + assertTrue(expected.getMessage().toLowerCase().contains("input")); + } + + try { + imageReader.getThumbnailWidth(0, 0); + fail("Expected IllegalStateException"); + } + catch (IllegalStateException expected) { + assertTrue(expected.getMessage().toLowerCase().contains("input")); + } + + try { + imageReader.getThumbnailHeight(0, 0); + fail("Expected IllegalStateException"); + } + catch (IllegalStateException expected) { + assertTrue(expected.getMessage().toLowerCase().contains("input")); + } + + try { + imageReader.readThumbnail(0, 0); + fail("Expected IllegalStateException"); + } + catch (IllegalStateException expected) { + assertTrue(expected.getMessage().toLowerCase().contains("input")); + } + } + + public void testThumbnailReadingOutOfBounds() throws IOException { + PSDImageReader imageReader = createReader(); + + imageReader.setInput(getTestData().get(0).getInputStream()); + + try { + imageReader.getNumThumbnails(2); + fail("Expected IndexOutOfBoundsException"); + } + catch (IndexOutOfBoundsException expected) { + assertTrue(expected.getMessage(), expected.getMessage().toLowerCase().contains("index")); + } + + try { + imageReader.getThumbnailWidth(-1, 0); + fail("Expected IndexOutOfBoundsException"); + } + catch (IndexOutOfBoundsException expected) { + assertTrue(expected.getMessage(), expected.getMessage().toLowerCase().contains("index")); + } + + try { + imageReader.getThumbnailHeight(0, -2); + fail("Expected IndexOutOfBoundsException"); + } + catch (IndexOutOfBoundsException expected) { + // Sloppy... + assertTrue(expected.getMessage(), expected.getMessage().toLowerCase().contains("-2")); + } + + try { + imageReader.readThumbnail(99, 42); + fail("Expected IndexOutOfBoundsException"); + } + catch (IndexOutOfBoundsException expected) { + assertTrue(expected.getMessage(), expected.getMessage().toLowerCase().contains("index")); + } + } + + public void testThumbnailDimensions() throws IOException { + PSDImageReader imageReader = createReader(); + + imageReader.setInput(getTestData().get(0).getInputStream()); + + assertEquals(1, imageReader.getNumThumbnails(0)); + + assertEquals(128, imageReader.getThumbnailWidth(0, 0)); + assertEquals(96, imageReader.getThumbnailHeight(0, 0)); + } + + public void testThumbnailReadListeners() throws IOException { + PSDImageReader imageReader = createReader(); + + imageReader.setInput(getTestData().get(0).getInputStream()); + + final List sequnce = new ArrayList(); + imageReader.addIIOReadProgressListener(new ProgressListenerBase() { + private float mLastPercentageDone = 0; + + @Override + public void thumbnailStarted(final ImageReader pSource, final int pImageIndex, final int pThumbnailIndex) { + sequnce.add("started"); + } + + @Override + public void thumbnailComplete(final ImageReader pSource) { + sequnce.add("complete"); + } + + @Override + public void thumbnailProgress(final ImageReader pSource, final float pPercentageDone) { + // Optional + assertTrue("Listener invoked out of sequence", sequnce.size() == 1); + assertTrue(pPercentageDone >= mLastPercentageDone); + } + }); + + BufferedImage thumbnail = imageReader.readThumbnail(0, 0); + assertNotNull(thumbnail); + + assertEquals("Listeners not invoked", 2, sequnce.size()); + assertEquals("started", sequnce.get(0)); + assertEquals("complete", sequnce.get(1)); + } } \ No newline at end of file