Path: blob/master/test/jdk/javax/sound/sampled/spi/FormatConversionProvider/ExpectedNPEOnNull.java
41159 views
/*1* Copyright (c) 2015, 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*/2223import java.io.ByteArrayInputStream;24import java.util.ArrayList;25import java.util.List;26import java.util.Objects;2728import javax.sound.sampled.AudioFileFormat;29import javax.sound.sampled.AudioFormat;30import javax.sound.sampled.AudioFormat.Encoding;31import javax.sound.sampled.AudioInputStream;32import javax.sound.sampled.AudioSystem;33import javax.sound.sampled.spi.FormatConversionProvider;3435import static java.util.ServiceLoader.load;36import static javax.sound.sampled.AudioFileFormat.*;3738/**39* @test40* @bug 813510041* @author Sergey Bylokhov42*/43public final class ExpectedNPEOnNull {4445/**46* We will try to use all encoding, in this case all our providers will be47* covered by supported/unsupported encoding.48*/49private static final Encoding[] encodings = {Encoding.PCM_SIGNED,50Encoding.PCM_UNSIGNED,51Encoding.PCM_FLOAT,52Encoding.ULAW, Encoding.ALAW,53new Encoding("test")};5455/**56* We will try to use all types, in this case all our providers will be57* covered by supported/unsupported types.58*/59private static final Type[] types = {Type.WAVE, Type.AU, Type.AIFF,60Type.AIFC, Type.SND,61new Type("MIDI", "mid"),62new Type("test", "test")};6364/**65* We will try to use all supported AudioInputStream, in this case all our66* providers will be covered by supported/unsupported streams.67*/68private static final List<AudioInputStream> aiss = new ArrayList<>();6970static {71for (final Encoding encoding : encodings) {72for (final Type type : types) {73aiss.add(getAIS(type, encoding));74}75}76}7778public static void main(final String[] args) throws Exception {79testAS();80for (final FormatConversionProvider fcp : load(81FormatConversionProvider.class)) {82testFCP(fcp);83}84testFCP(customFCP);85}8687/**88* Tests the part of AudioSystem API, which implemented via89* FormatConversionProvider.90*/91private static void testAS() throws Exception {9293// AudioSystem#getAudioInputStream(Encoding, AudioInputStream)94for (final Encoding encoding : encodings) {95try {96AudioSystem.getAudioInputStream(encoding, null);97throw new RuntimeException("NPE is expected");98} catch (final NullPointerException ignored) {99}100}101for (final AudioInputStream stream : aiss) {102try {103AudioSystem.getAudioInputStream((Encoding) null, stream);104throw new RuntimeException("NPE is expected");105} catch (final NullPointerException ignored) {106}107}108// AudioSystem#getAudioInputStream(AudioFormat, AudioInputStream)109for (final AudioInputStream stream : aiss) {110try {111AudioSystem.getAudioInputStream((AudioFormat) null, stream);112throw new RuntimeException("NPE is expected");113} catch (final NullPointerException ignored) {114}115}116for (final Encoding encoding : encodings) {117try {118AudioSystem.getAudioInputStream(getAFF(encoding), null);119throw new RuntimeException("NPE is expected");120} catch (final NullPointerException ignored) {121}122}123124// AudioSystem#getTargetEncodings(AudioFormat)125try {126AudioSystem.getTargetEncodings((AudioFormat) null);127throw new RuntimeException("NPE is expected");128} catch (final NullPointerException ignored) {129}130131// AudioSystem#getTargetEncodings(AudioFormat.Encoding)132try {133AudioSystem.getTargetEncodings((Encoding) null);134throw new RuntimeException("NPE is expected");135} catch (final NullPointerException ignored) {136}137138// AudioSystem#getTargetFormats(AudioFormat.Encoding, AudioFormat)139for (final Encoding encoding : encodings) {140try {141AudioSystem.getTargetFormats(null, getAFF(encoding));142throw new RuntimeException("NPE is expected");143} catch (final NullPointerException ignored) {144}145}146for (final Encoding encoding : encodings) {147try {148AudioSystem.getTargetFormats(encoding, null);149throw new RuntimeException("NPE is expected");150} catch (final NullPointerException ignored) {151}152}153154// AudioSystem#isConversionSupported(AudioFormat, AudioFormat)155for (final Encoding encoding : encodings) {156try {157AudioSystem.isConversionSupported((AudioFormat) null,158getAFF(encoding));159throw new RuntimeException("NPE is expected");160} catch (final NullPointerException ignored) {161}162}163for (final Encoding encoding : encodings) {164try {165AudioSystem.isConversionSupported(getAFF(encoding), null);166throw new RuntimeException("NPE is expected");167} catch (final NullPointerException ignored) {168}169}170171// AudioSystem#isConversionSupported(AudioFormat.Encoding, AudioFormat)172for (final Encoding encoding : encodings) {173try {174AudioSystem.isConversionSupported((Encoding) null,175getAFF(encoding));176throw new RuntimeException("NPE is expected");177} catch (final NullPointerException ignored) {178}179}180for (final Encoding encoding : encodings) {181try {182AudioSystem.isConversionSupported(encoding, null);183throw new RuntimeException("NPE is expected");184} catch (final NullPointerException ignored) {185}186}187}188189/**190* Tests the FormatConversionProvider API directly.191*/192private static void testFCP(FormatConversionProvider fcp) throws Exception {193194// FormatConversionProvider#isSourceEncodingSupported(Encoding)195try {196fcp.isSourceEncodingSupported(null);197throw new RuntimeException("NPE is expected: " + fcp);198} catch (final NullPointerException ignored) {199}200201// FormatConversionProvider#isTargetEncodingSupported(Encoding)202try {203fcp.isTargetEncodingSupported(null);204throw new RuntimeException("NPE is expected: " + fcp);205} catch (final NullPointerException ignored) {206}207208// FormatConversionProvider#getTargetEncodings()209try {210fcp.getTargetEncodings(null);211throw new RuntimeException("NPE is expected: " + fcp);212} catch (final NullPointerException ignored) {213}214215// FormatConversionProvider#isConversionSupported(Encoding, AudioFormat)216for (final Encoding encoding : encodings) {217try {218fcp.isConversionSupported((Encoding) null, getAFF(encoding));219throw new RuntimeException("NPE is expected: " + fcp);220} catch (final NullPointerException ignored) {221}222}223for (final Encoding encoding : encodings) {224try {225fcp.isConversionSupported(encoding, null);226throw new RuntimeException("NPE is expected: " + fcp);227} catch (final NullPointerException ignored) {228}229}230231// FormatConversionProvider#getTargetFormats(Encoding, AudioFormat)232for (final Encoding encoding : encodings) {233try {234fcp.getTargetFormats(null, getAFF(encoding));235throw new RuntimeException("NPE is expected: " + fcp);236} catch (final NullPointerException ignored) {237}238}239for (final Encoding encoding : encodings) {240try {241fcp.getTargetFormats(encoding, null);242throw new RuntimeException("NPE is expected: " + fcp);243} catch (final NullPointerException ignored) {244}245}246247// FormatConversionProvider#isConversionSupported(AudioFormat,248// AudioFormat)249for (final Encoding encoding : encodings) {250try {251fcp.isConversionSupported((AudioFormat) null, getAFF(encoding));252throw new RuntimeException("NPE is expected: " + fcp);253} catch (final NullPointerException ignored) {254}255}256for (final Encoding encoding : encodings) {257try {258fcp.isConversionSupported(getAFF(encoding), null);259throw new RuntimeException("NPE is expected: " + fcp);260} catch (final NullPointerException ignored) {261}262}263264// FormatConversionProvider#getAudioInputStream(Encoding,265// AudioInputStream)266for (final AudioInputStream stream : aiss) {267try {268fcp.getAudioInputStream((Encoding) null, stream);269throw new RuntimeException("NPE is expected: " + fcp);270} catch (final NullPointerException ignored) {271}272}273for (final Encoding encoding : encodings) {274try {275fcp.getAudioInputStream(encoding, null);276throw new RuntimeException("NPE is expected: " + fcp);277} catch (final NullPointerException ignored) {278}279}280281// FormatConversionProvider#getAudioInputStream(AudioFormat,282// AudioInputStream)283for (final AudioInputStream stream : aiss) {284try {285fcp.getAudioInputStream((AudioFormat) null, stream);286throw new RuntimeException("NPE is expected: " + fcp);287} catch (final NullPointerException ignored) {288}289}290for (final Encoding encoding : encodings) {291try {292fcp.getAudioInputStream(getAFF(encoding), null);293throw new RuntimeException("NPE is expected: " + fcp);294} catch (final NullPointerException ignored) {295}296}297}298299/**300* Tests some default implementation of FormatConversionProvider API, using301* the custom {@code FormatConversionProvider}, which support nothing.302*/303static FormatConversionProvider customFCP = new FormatConversionProvider() {304305@Override306public Encoding[] getSourceEncodings() {307return new Encoding[0];308}309310@Override311public Encoding[] getTargetEncodings() {312return new Encoding[0];313}314315@Override316public Encoding[] getTargetEncodings(AudioFormat sourceFormat) {317Objects.requireNonNull(sourceFormat);318return new Encoding[0];319}320321@Override322public AudioFormat[] getTargetFormats(Encoding enc, AudioFormat frmt) {323Objects.requireNonNull(enc);324Objects.requireNonNull(frmt);325return new AudioFormat[0];326}327328@Override329public AudioInputStream getAudioInputStream(Encoding encoding,330AudioInputStream stream) {331Objects.requireNonNull(encoding);332Objects.requireNonNull(stream);333return null;334}335336@Override337public AudioInputStream getAudioInputStream(AudioFormat format,338AudioInputStream stream) {339Objects.requireNonNull(format);340Objects.requireNonNull(stream);341return null;342}343};344345private static AudioFormat getAFF(final Encoding encoding) {346return new AudioFormat(encoding, 44100.0f, 16, 2, 1, 1, true);347}348349private static AudioInputStream getAIS(final Type type, Encoding encoding) {350AudioFormat af = new AudioFormat(encoding, 44100.0f, 16, 2, 1, 1, true);351AudioFileFormat aif = new AudioFileFormat(type, af, 0);352ByteArrayInputStream bais = new ByteArrayInputStream(new byte[1024]);353return new AudioInputStream(bais, aif.getFormat(), 0);354}355}356357358