Path: blob/master/test/jdk/javax/imageio/spi/SpiTest.java
41149 views
/*1* Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @bug 439537626* @summary Performs various sanity checks on Spi class constructors and get27* methods28*/2930import java.util.Iterator;31import java.util.Locale;3233import javax.imageio.ImageReader;34import javax.imageio.ImageTypeSpecifier;35import javax.imageio.ImageWriter;36import javax.imageio.spi.IIORegistry;37import javax.imageio.spi.IIOServiceProvider;38import javax.imageio.spi.ImageReaderSpi;39import javax.imageio.spi.ImageReaderWriterSpi;40import javax.imageio.spi.ImageWriterSpi;41import javax.imageio.spi.ServiceRegistry;4243public class SpiTest {4445String vendorName = null;46String version = null;47String[] names = null;48String[] suffixes = null;49String[] MIMETypes = null;50String readerClassName = null;51String writerClassName = null;52Class[] inputTypes = null;53Class[] outputTypes = null;54String[] writerSpiNames = null;55String[] readerSpiNames = null;56String nativeStreamMetadataFormatName = null;57String nativeStreamMetadataFormatClassName = null;58String[] extraStreamMetadataFormatNames = null;59String[] extraStreamMetadataFormatClassNames = null;60String nativeImageMetadataFormatName = null;61String nativeImageMetadataFormatClassName = null;62String[] extraImageMetadataFormatNames = null;63String[] extraImageMetadataFormatClassNames = null;6465private void error(String message) {66// System.out.println("Error: " + message);67throw new RuntimeException(message);68}6970private void testSpi(IIOServiceProvider spi) {71if (spi.getVendorName() == null) {72error(spi + " getVendorName == null!");73}74if (spi.getVersion() == null) {75error(spi + " getVersion == null!");76}77}7879private void testSpi(ImageReaderWriterSpi spi) {80testSpi((IIOServiceProvider)spi);81if (spi.getFormatNames() == null) {82error("spi.getFormatNames == null!");83}84String[] suffixes = spi.getFileSuffixes();85if (suffixes != null && suffixes.length == 0) {86error("suffixes.length == 0!");87}88String[] MIMETypes = spi.getMIMETypes();89if (MIMETypes != null && MIMETypes.length == 0) {90error("MIMETypes.length == 0!");91}92if (spi.getPluginClassName() == null) {93error("spi.getPluginClassName == null!");94}95String[] extraStreamMetadataFormatNames =96spi.getExtraStreamMetadataFormatNames();97if (extraStreamMetadataFormatNames != null &&98extraStreamMetadataFormatNames.length == 0) {99error("extraStreamMetadataFormatNames.length == 0!");100}101String[] extraImageMetadataFormatNames =102spi.getExtraImageMetadataFormatNames();103if (extraImageMetadataFormatNames != null &&104extraImageMetadataFormatNames.length == 0) {105error("extraImageMetadataFormatNames.length == 0!");106}107}108109public void testSpi(ImageReaderSpi spi) {110testSpi((ImageReaderWriterSpi)spi);111Class[] inputTypes = spi.getInputTypes();112if (inputTypes == null) {113error("inputTypes == null!");114}115if (inputTypes.length == 0) {116error("inputTypes.length == 0!");117}118String[] writerSpiNames = spi.getImageWriterSpiNames();119if (writerSpiNames != null && writerSpiNames.length == 0) {120error("writerSpiNames.length == 0!");121}122}123124public void testSpi(ImageWriterSpi spi) {125testSpi((ImageReaderWriterSpi)spi);126Class[] outputTypes = spi.getOutputTypes();127if (outputTypes == null) {128error("outputTypes == null!");129}130if (outputTypes.length == 0) {131error("outputTypes.length == 0!");132}133String[] readerSpiNames = spi.getImageReaderSpiNames();134if (readerSpiNames != null && readerSpiNames.length == 0) {135error("readerSpiNames.length == 0!");136}137}138139private void resetConstructorArguments() {140vendorName = null;141version = null;142names = null;143suffixes = null;144MIMETypes = null;145readerClassName = null;146inputTypes = null;147outputTypes = null;148writerSpiNames = null;149readerSpiNames = null;150nativeStreamMetadataFormatName = null;151nativeStreamMetadataFormatClassName = null;152extraStreamMetadataFormatNames = null;153extraStreamMetadataFormatClassNames = null;154nativeImageMetadataFormatName = null;155nativeImageMetadataFormatClassName = null;156extraImageMetadataFormatNames = null;157extraImageMetadataFormatClassNames = null;158}159160private ImageReaderSpi constructImageReaderSpi() {161return new ImageReaderSpi(vendorName,162version,163names,164suffixes,165MIMETypes,166readerClassName,167inputTypes,168writerSpiNames,169false,170nativeStreamMetadataFormatName,171nativeStreamMetadataFormatClassName,172extraStreamMetadataFormatNames,173extraStreamMetadataFormatClassNames,174false,175nativeImageMetadataFormatName,176nativeImageMetadataFormatClassName,177extraImageMetadataFormatNames,178extraImageMetadataFormatClassNames) {179180public String getDescription(Locale locale) {181return null;182}183184public boolean canDecodeInput(Object source) {185return false;186}187188public ImageReader createReaderInstance(Object extension) {189return null;190}191};192}193194private ImageWriterSpi constructImageWriterSpi() {195return new ImageWriterSpi(vendorName,196version,197names,198suffixes,199MIMETypes,200writerClassName,201outputTypes,202readerSpiNames,203false,204nativeStreamMetadataFormatName,205nativeStreamMetadataFormatClassName,206extraStreamMetadataFormatNames,207extraStreamMetadataFormatClassNames,208false,209nativeImageMetadataFormatName,210nativeImageMetadataFormatClassName,211extraImageMetadataFormatNames,212extraImageMetadataFormatClassNames) {213214public String getDescription(Locale locale) {215return null;216}217218public boolean canEncodeImage(ImageTypeSpecifier type) {219return false;220}221222public ImageWriter createWriterInstance(Object extension) {223return null;224}225};226}227228private void checkImageReaderSpiConstructor(boolean shouldFail) {229boolean gotIAE = false;230try {231constructImageReaderSpi();232} catch (Exception e) {233if (!(e instanceof IllegalArgumentException)) {234error("Got exception " + e);235} else {236gotIAE = true;237}238}239if (gotIAE != shouldFail) {240if (gotIAE) {241error("ImageReaderSpi constructor threw an IAE!");242} else {243error("ImageReaderSpi constructor didn't throw an IAE!");244}245}246}247248private void checkImageWriterSpiConstructor(boolean shouldFail) {249boolean gotIAE = false;250try {251constructImageWriterSpi();252} catch (Exception e) {253if (!(e instanceof IllegalArgumentException)) {254error("Got exception " + e);255} else {256gotIAE = true;257}258}259if (gotIAE != shouldFail) {260if (gotIAE) {261error("ImageWriterSpi constructor threw an IAE!");262} else {263error("ImageWriterSpi constructor didn't throw an IAE!");264}265}266}267268public void testImageReaderSpiConstructor() {269resetConstructorArguments();270271checkImageReaderSpiConstructor(true);272vendorName = "My Vendor";273checkImageReaderSpiConstructor(true);274version = "My Version";275checkImageReaderSpiConstructor(true);276names = new String[0];277checkImageReaderSpiConstructor(true);278names = new String[1];279names[0] = "My Format Name";280checkImageReaderSpiConstructor(true);281readerClassName = "com.mycompany.Reader";282checkImageReaderSpiConstructor(true);283inputTypes = new Class[0];284checkImageReaderSpiConstructor(true);285inputTypes = new Class[1];286inputTypes[0] = Object.class;287// Now it should work288checkImageReaderSpiConstructor(false);289290// Test normalization of zero-length arrays291suffixes = new String[0];292MIMETypes = new String[0];293writerSpiNames = new String[0];294extraStreamMetadataFormatNames = new String[0];295extraImageMetadataFormatNames = new String[0];296297ImageReaderSpi spi = constructImageReaderSpi();298if (spi.getFileSuffixes() != null) {299error("Failed to normalize suffixes!");300}301if (spi.getMIMETypes() != null) {302error("Failed to normalize MIMETypes!");303}304if (spi.getImageWriterSpiNames() != null) {305error("Failed to normalize writerSpiNames!");306}307if (spi.getExtraStreamMetadataFormatNames() != null) {308error("Failed to normalize extraStreamMetadataFormatNames!");309}310if (spi.getExtraImageMetadataFormatNames() != null) {311error("Failed to normalize extraImageMetadataFormatNames!");312}313}314315public void testImageWriterSpiConstructor() {316resetConstructorArguments();317318checkImageWriterSpiConstructor(true);319vendorName = "My Vendor";320checkImageWriterSpiConstructor(true);321version = "My Version";322checkImageWriterSpiConstructor(true);323names = new String[0];324checkImageWriterSpiConstructor(true);325names = new String[1];326names[0] = "My Format Name";327checkImageWriterSpiConstructor(true);328writerClassName = "com.mycompany.Writer";329checkImageWriterSpiConstructor(true);330outputTypes = new Class[0];331checkImageWriterSpiConstructor(true);332outputTypes = new Class[1];333outputTypes[0] = Object.class;334// Now it should work335checkImageWriterSpiConstructor(false);336337// Test normalization of zero-length arrays338suffixes = new String[0];339MIMETypes = new String[0];340readerSpiNames = new String[0];341extraStreamMetadataFormatNames = new String[0];342extraStreamMetadataFormatClassNames = new String[0];343extraImageMetadataFormatNames = new String[0];344extraImageMetadataFormatClassNames = new String[0];345346ImageWriterSpi spi = constructImageWriterSpi();347if (spi.getFileSuffixes() != null) {348error("Failed to normalize suffixes!");349}350if (spi.getMIMETypes() != null) {351error("Failed to normalize MIMETypes!");352}353if (spi.getImageReaderSpiNames() != null) {354error("Failed to normalize readerSpiNames!");355}356if (spi.getExtraStreamMetadataFormatNames() != null) {357error("Failed to normalize extraStreamMetadataFormatNames!");358}359if (spi.getExtraImageMetadataFormatNames() != null) {360error("Failed to normalize extraImageMetadataFormatNames!");361}362}363364public SpiTest() {365testImageReaderSpiConstructor();366testImageWriterSpiConstructor();367368ServiceRegistry registry = IIORegistry.getDefaultInstance();369Iterator readers = registry.getServiceProviders(ImageReaderSpi.class,370false);371while (readers.hasNext()) {372ImageReaderSpi rspi = (ImageReaderSpi)readers.next();373System.out.println("*** Testing " + rspi.getClass().getName());374testSpi(rspi);375}376377Iterator writers = registry.getServiceProviders(ImageWriterSpi.class,378false);379while (writers.hasNext()) {380ImageWriterSpi wspi = (ImageWriterSpi)writers.next();381System.out.println("*** Testing " + wspi.getClass().getName());382testSpi(wspi);383}384}385386public static void main(String[] args) {387new SpiTest();388}389}390391392