diff -r 4ebc2e2fb97c -r 71c04702a3d5 test/jdk/javax/imageio/ImageReaderReadAll.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jdk/javax/imageio/ImageReaderReadAll.java Tue Sep 12 19:03:39 2017 +0200 @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4450319 + * @summary Checks that ImageReader.readAll(int, ImageReadParam) makes use of + * the ImageReadParam object + */ + +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.Iterator; +import java.util.Vector; + +import javax.imageio.IIOImage; +import javax.imageio.ImageReadParam; +import javax.imageio.ImageReader; +import javax.imageio.ImageTypeSpecifier; +import javax.imageio.metadata.IIOMetadata; +import javax.imageio.spi.ImageReaderSpi; +import javax.imageio.stream.MemoryCacheImageInputStream; + +public class ImageReaderReadAll { + + private final static byte[] ba = {}; + + public static void main(String argv[]) { + ImageReader ireader; + ImageReadParam irp; + IIOImage image; + BufferedImage bi; + BufferedImage bi_1; + BufferedImage bi_2; + + ireader = new DummyImageReaderImpl(null); + MemoryCacheImageInputStream mciis = new MemoryCacheImageInputStream + (new ByteArrayInputStream(ba)); + ireader.setInput(mciis); + + irp = new ImageReadParam(); + irp.setDestination(new BufferedImage(10, 10, + BufferedImage.TYPE_3BYTE_BGR)); + try { + image = ireader.readAll(0, irp); + bi_1 = ireader.read(0, irp); + bi_2 = ireader.read(0); + } catch (java.io.IOException ee) { + throw new RuntimeException("Unexpected exception: " + ee); + } + + bi = (BufferedImage)image.getRenderedImage(); + if (bi.getType() != bi_1.getType()) { + throw new RuntimeException("Images have different type!"); + } + } + + + public static class DummyImageReaderImpl extends ImageReader { + + public DummyImageReaderImpl(ImageReaderSpi originatingProvider) { + super(originatingProvider); + } + + public BufferedImage read(int imageIndex, ImageReadParam param) + throws IOException { + if (input == null) + throw new IllegalStateException(); + if (imageIndex >= 1 || imageIndex < 0) + throw new IndexOutOfBoundsException(); + if (seekForwardOnly) { + if (imageIndex < minIndex) + throw new IndexOutOfBoundsException(); + minIndex = imageIndex; + } + + return getDestination(param, getImageTypes(imageIndex), 10, 15); + } + + public Iterator getImageTypes(int imageIndex) throws IOException { + if (input == null) + throw new IllegalStateException(); + if (imageIndex >= 1 || imageIndex < 0) + throw new IndexOutOfBoundsException(); + + Vector imageTypes = new Vector(); + imageTypes.add(ImageTypeSpecifier.createFromBufferedImageType + (BufferedImage.TYPE_BYTE_GRAY )); + return imageTypes.iterator(); + } + + public int getNumImages(boolean allowSearch) throws IOException {return 1;} + public int getWidth(int imageIndex) throws IOException {return 1;} + public int getHeight(int imageIndex) throws IOException {return 1;} + public IIOMetadata getStreamMetadata() throws IOException {return null;} + public IIOMetadata getImageMetadata(int imageIndex) + throws IOException {return null;} + } +}