@Test public void testReadDuplicateComponentIds() throws IOException { JPEGImageReader reader = createReader(); try { reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/duplicate-component-ids.jpg"))); IIOReadWarningListener listener = mock(IIOReadWarningListener.class); reader.addIIOReadWarningListener(listener); assertEquals(367, reader.getWidth(0)); assertEquals(242, reader.getHeight(0)); BufferedImage image = reader.read(0, null); verify(listener, times(1)).warningOccurred(eq(reader), and(matches("(?i).*duplicate component ID.*(?-i)SOF.*"), contains("1"))); verify(listener, times(1)).warningOccurred(eq(reader), and(matches("(?i).*duplicate component ID.*(?-i)SOS.*"), contains("1"))); assertNotNull(image); assertEquals(367, image.getWidth()); assertEquals(242, image.getHeight()); assertEquals(ColorSpace.TYPE_RGB, image.getColorModel().getColorSpace().getType()); } finally { reader.dispose(); } }
@Test public void testInvalidICCSingleChunkBadSequence() throws IOException { // Regression // Single segment ICC profile, with chunk index/count == 0 JPEGImageReader reader = createReader(); reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/invalid-icc-single-chunk-bad-sequence-number.jpg"))); assertEquals(1772, reader.getWidth(0)); assertEquals(2126, reader.getHeight(0)); ImageReadParam param = reader.getDefaultReadParam(); param.setSourceRegion(new Rectangle(reader.getWidth(0), 8)); IIOReadWarningListener warningListener = mock(IIOReadWarningListener.class); reader.addIIOReadWarningListener(warningListener); BufferedImage image = reader.read(0, param); assertNotNull(image); assertEquals(1772, image.getWidth()); assertEquals(8, image.getHeight()); verify(warningListener, atLeast(1)).warningOccurred(eq(reader), anyString()); }
@Test public void testReadAdobeAPP14CMYKAnd3channelData() throws IOException { JPEGImageReader reader = createReader(); try { reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/exif-jfif-app13-app14ycck-3channel.jpg"))); IIOReadWarningListener listener = mock(IIOReadWarningListener.class); reader.addIIOReadWarningListener(listener); assertEquals(310, reader.getWidth(0)); assertEquals(384, reader.getHeight(0)); BufferedImage image = reader.read(0, null); verify(listener, times(1)).warningOccurred(eq(reader), matches("(?i).*Adobe App14.*(?-i)CMYK.*SOF.*")); assertNotNull(image); assertEquals(310, image.getWidth()); assertEquals(384, image.getHeight()); assertEquals(ColorSpace.TYPE_RGB, image.getColorModel().getColorSpace().getType()); } finally { reader.dispose(); } }
@Test public void testEmbeddedBeforeBaseURI() throws URISyntaxException, IOException { // Asking for metadata, width, height etc, before attempting to read using a param, // will cause the document to be parsed without a base URI. // This will work, but may not use the CSS... URL resource = getClassLoaderResource("/svg/barChart.svg"); SVGImageReader reader = createReader(); TestData data = new TestData(resource, (Dimension) null); try (ImageInputStream stream = data.getInputStream()) { reader.setInput(stream); IIOReadWarningListener listener = mock(IIOReadWarningListener.class); reader.addIIOReadWarningListener(listener); assertEquals(450, reader.getWidth(0)); assertEquals(500, reader.getHeight(0)); // Expect the warning about the missing CSS verify(listener, atMost(1)).warningOccurred(any(ImageReader.class), anyString()); reset(listener); SVGReadParam param = reader.getDefaultReadParam(); param.setBaseURI(resource.toURI().toASCIIString()); BufferedImage image = reader.read(0, param); assertNotNull(image); assertEquals(450, image.getWidth()); assertEquals(500, image.getHeight()); // No more warnings now that the base URI is set verifyZeroInteractions(listener); } finally { reader.dispose(); } }
@Test public void testReadDuplicateComponentIds() throws IOException { JPEGImageReader reader = createReader(); try { reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/duplicate-component-ids.jpg"))); IIOReadWarningListener listener = mock(IIOReadWarningListener.class); reader.addIIOReadWarningListener(listener); assertEquals(367, reader.getWidth(0)); assertEquals(242, reader.getHeight(0)); BufferedImage image = reader.read(0, null); verify(listener, times(1)).warningOccurred(eq(reader), and(matches("(?i).*duplicate component ID.*(?-i)SOF.*"), contains("1"))); verify(listener, times(1)).warningOccurred(eq(reader), and(matches("(?i).*duplicate component ID.*(?-i)SOS.*"), contains("1"))); assertNotNull(image); assertEquals(367, image.getWidth()); assertEquals(242, image.getHeight()); assertEquals(ColorSpace.TYPE_RGB, image.getColorModel().getColorSpace().getType()); } finally { reader.dispose(); } }
@Test public void testInvalidICCSingleChunkBadSequence() throws IOException { // Regression // Single segment ICC profile, with chunk index/count == 0 JPEGImageReader reader = createReader(); reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/invalid-icc-single-chunk-bad-sequence-number.jpg"))); assertEquals(1772, reader.getWidth(0)); assertEquals(2126, reader.getHeight(0)); ImageReadParam param = reader.getDefaultReadParam(); param.setSourceRegion(new Rectangle(reader.getWidth(0), 8)); IIOReadWarningListener warningListener = mock(IIOReadWarningListener.class); reader.addIIOReadWarningListener(warningListener); BufferedImage image = reader.read(0, param); assertNotNull(image); assertEquals(1772, image.getWidth()); assertEquals(8, image.getHeight()); verify(warningListener, atLeast(1)).warningOccurred(eq(reader), anyString()); }
@Test public void testInvalidICCSingleChunkBadSequence() throws IOException { // Regression // Single segment ICC profile, with chunk index/count == 0 JPEGImageReader reader = createReader(); reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/invalid-icc-single-chunk-bad-sequence-number.jpg"))); assertEquals(1772, reader.getWidth(0)); assertEquals(2126, reader.getHeight(0)); ImageReadParam param = reader.getDefaultReadParam(); param.setSourceRegion(new Rectangle(reader.getWidth(0), 8)); IIOReadWarningListener warningListener = mock(IIOReadWarningListener.class); reader.addIIOReadWarningListener(warningListener); BufferedImage image = reader.read(0, param); assertNotNull(image); assertEquals(1772, image.getWidth()); assertEquals(8, image.getHeight()); verify(warningListener, atLeast(1)).warningOccurred(eq(reader), anyString()); }
@Test public void testReadAdobeAPP14CMYKAnd3channelData() throws IOException { JPEGImageReader reader = createReader(); try { reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/exif-jfif-app13-app14ycck-3channel.jpg"))); IIOReadWarningListener listener = mock(IIOReadWarningListener.class); reader.addIIOReadWarningListener(listener); assertEquals(310, reader.getWidth(0)); assertEquals(384, reader.getHeight(0)); BufferedImage image = reader.read(0, null); verify(listener, times(1)).warningOccurred(eq(reader), matches("(?i).*Adobe App14.*(?-i)CMYK.*SOF.*")); assertNotNull(image); assertEquals(310, image.getWidth()); assertEquals(384, image.getHeight()); assertEquals(ColorSpace.TYPE_RGB, image.getColorModel().getColorSpace().getType()); } finally { reader.dispose(); } }