1 /* 2 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 8163258 27 * @summary Test verifies that when we create our own ImageReaderSpi 28 * implementaion with MIMEType or FileSuffix as null, it should 29 * not throw NullPointerException when we call 30 * ImageIO.getReaderMIMETypes() or ImageIO.getReaderFileSuffixes(). 31 * @run main GetReaderWriterInfoNullTest 32 */ 33 34 import java.awt.image.BufferedImage; 35 import java.io.IOException; 36 import java.util.Iterator; 37 import java.util.Locale; 38 import javax.imageio.IIOException; 39 import javax.imageio.ImageReadParam; 40 import javax.imageio.ImageReader; 41 import javax.imageio.ImageTypeSpecifier; 42 import javax.imageio.metadata.IIOMetadata; 43 import javax.imageio.spi.ImageReaderSpi; 44 import javax.imageio.stream.ImageInputStream; 45 import javax.imageio.ImageIO; 46 import javax.imageio.spi.IIORegistry; 47 48 class TestImageReaderSpi extends ImageReaderSpi { 49 TestImageReaderSpi(String[] FORMATNAMES, String[] SUFFIXES, String[] MIMETYPES)50 public TestImageReaderSpi(String[] FORMATNAMES, String[] SUFFIXES, 51 String[] MIMETYPES) { 52 super("J Duke", // vendor 53 "1.0", // version 54 FORMATNAMES, // format names 55 SUFFIXES, // file suffixes 56 MIMETYPES, // mimetypes 57 "readTest.TestImageReader", // reader class name 58 new Class<?>[] { ImageInputStream.class }, // input types 59 null, // writer class names. 60 true, // supports native metadata, 61 null, // [no] native stream metadata format 62 null, // [no] native stream metadata class 63 null, // [no] native extra stream metadata format 64 null, // [no] native extra stream metadata class 65 true, // supports standard metadata, 66 null, // metadata format name, 67 null, // metadata format class name 68 null, // [no] extra image metadata format 69 null // [no] extra image metadata format class 70 ); 71 } 72 73 @Override canDecodeInput(Object source)74 public boolean canDecodeInput(Object source) throws IOException { 75 throw new UnsupportedOperationException("Not supported yet."); 76 } 77 78 @Override getDescription(Locale locale)79 public String getDescription(Locale locale) { 80 throw new UnsupportedOperationException("Not supported yet."); 81 } 82 83 @Override createReaderInstance(Object extension)84 public ImageReader createReaderInstance(Object extension) 85 throws IOException { 86 throw new UnsupportedOperationException("Not supported yet."); 87 } 88 89 } 90 91 class TestImageReader extends ImageReader { 92 TestImageReader(ImageReaderSpi originatingProvider)93 public TestImageReader(ImageReaderSpi originatingProvider) { 94 super(originatingProvider); 95 } 96 97 @Override getNumImages(boolean allowSearch)98 public int getNumImages(boolean allowSearch) throws IOException { 99 throw new UnsupportedOperationException("Not supported yet."); 100 } 101 102 @Override getWidth(int imageIndex)103 public int getWidth(int imageIndex) throws IOException { 104 throw new UnsupportedOperationException("Not supported yet."); 105 } 106 107 @Override getHeight(int imageIndex)108 public int getHeight(int imageIndex) throws IOException { 109 throw new UnsupportedOperationException("Not supported yet."); 110 } 111 112 @Override getImageTypes(int imageIndex)113 public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex) 114 throws IOException { 115 throw new UnsupportedOperationException("Not supported yet."); 116 } 117 118 @Override getStreamMetadata()119 public IIOMetadata getStreamMetadata() throws IOException { 120 throw new UnsupportedOperationException("Not supported yet."); 121 } 122 123 @Override getImageMetadata(int imageIndex)124 public IIOMetadata getImageMetadata(int imageIndex) throws IOException { 125 throw new UnsupportedOperationException("Not supported yet."); 126 } 127 128 @Override read(int imageIndex, ImageReadParam param)129 public BufferedImage read(int imageIndex, ImageReadParam param) 130 throws IOException { 131 throw new UnsupportedOperationException("Not supported yet."); 132 } 133 } 134 public class GetReaderWriterInfoNullTest { 135 static final String[] FORMATNAMES = {"readTest"}; 136 static final String[] SUFFIXES = {"readTest"}; 137 static final String[] MIMETYPES = {"readTest"}; main(String[] args)138 public static void main (String[] args) throws IIOException { 139 // Verify getReaderMIMETypes() behavior by keeping MIMEType as null. 140 TestImageReaderSpi mimeNullReadSpi = 141 new TestImageReaderSpi(FORMATNAMES, SUFFIXES, null); 142 IIORegistry.getDefaultInstance(). 143 registerServiceProvider(mimeNullReadSpi); 144 ImageIO.getReaderMIMETypes(); 145 IIORegistry.getDefaultInstance(). 146 deregisterServiceProvider(mimeNullReadSpi); 147 148 /* 149 * Verify getReaderFileSuffixes() behavior by keeping 150 * file suffix as null. 151 */ 152 TestImageReaderSpi suffixNullReadSpi = 153 new TestImageReaderSpi(FORMATNAMES, null, MIMETYPES); 154 IIORegistry.getDefaultInstance(). 155 registerServiceProvider(suffixNullReadSpi); 156 ImageIO.getReaderFileSuffixes(); 157 IIORegistry.getDefaultInstance(). 158 deregisterServiceProvider(suffixNullReadSpi); 159 } 160 } 161 162