/*
* Copyright (c) 2016, 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 8163258
* @summary Test verifies that when we create our own ImageReaderSpi
* implementaion with MIMEType or FileSuffix as null, it should
* not throw NullPointerException when we call
* ImageIO.getReaderMIMETypes() or ImageIO.getReaderFileSuffixes().
* @run main GetReaderWriterInfoNullTest
*/
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Iterator;
import java.util.Locale;
import javax.imageio.IIOException;
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.ImageInputStream;
import javax.imageio.ImageIO;
import javax.imageio.spi.IIORegistry;
class TestImageReaderSpi extends ImageReaderSpi {
public TestImageReaderSpi(String[] FORMATNAMES, String[] SUFFIXES,
String[] MIMETYPES) {
super("J Duke", // vendor
"1.0", // version
FORMATNAMES, // format names
SUFFIXES, // file suffixes
MIMETYPES, // mimetypes
"readTest.TestImageReader", // reader class name
new Class<?>[] { ImageInputStream.class }, // input types
null, // writer class names.
true, // supports native metadata,
null, // [no] native stream metadata format
null, // [no] native stream metadata class
null, // [no] native extra stream metadata format
null, // [no] native extra stream metadata class
true, // supports standard metadata,
null, // metadata format name,
null, // metadata format class name
null, // [no] extra image metadata format
null // [no] extra image metadata format class
);
}
@Override
public boolean canDecodeInput(Object source) throws IOException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getDescription(Locale locale) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public ImageReader createReaderInstance(Object extension)
throws IOException {
throw new UnsupportedOperationException("Not supported yet.");
}
}
class TestImageReader extends ImageReader {
public TestImageReader(ImageReaderSpi originatingProvider) {
super(originatingProvider);
}
@Override
public int getNumImages(boolean allowSearch) throws IOException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public int getWidth(int imageIndex) throws IOException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public int getHeight(int imageIndex) throws IOException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex)
throws IOException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public IIOMetadata getStreamMetadata() throws IOException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public IIOMetadata getImageMetadata(int imageIndex) throws IOException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public BufferedImage read(int imageIndex, ImageReadParam param)
throws IOException {
throw new UnsupportedOperationException("Not supported yet.");
}
}
public class GetReaderWriterInfoNullTest {
static final String[] FORMATNAMES = {"readTest"};
static final String[] SUFFIXES = {"readTest"};
static final String[] MIMETYPES = {"readTest"};
public static void main (String[] args) throws IIOException {
// Verify getReaderMIMETypes() behavior by keeping MIMEType as null.
TestImageReaderSpi mimeNullReadSpi =
new TestImageReaderSpi(FORMATNAMES, SUFFIXES, null);
IIORegistry.getDefaultInstance().
registerServiceProvider(mimeNullReadSpi);
ImageIO.getReaderMIMETypes();
IIORegistry.getDefaultInstance().
deregisterServiceProvider(mimeNullReadSpi);
/*
* Verify getReaderFileSuffixes() behavior by keeping
* file suffix as null.
*/
TestImageReaderSpi suffixNullReadSpi =
new TestImageReaderSpi(FORMATNAMES, null, MIMETYPES);
IIORegistry.getDefaultInstance().
registerServiceProvider(suffixNullReadSpi);
ImageIO.getReaderFileSuffixes();
IIORegistry.getDefaultInstance().
deregisterServiceProvider(suffixNullReadSpi);
}
}