// META: global=window,dedicatedworker // META: script=/webcodecs/utils.js const invalidConfigs = [ { comment: 'Empty codec', config: {codec: ''}, }, { comment: 'Unrecognized codec', config: {codec: 'bogus'}, }, { comment: 'Video codec', config: {codec: 'vp8'}, }, { comment: 'Ambiguous codec', config: {codec: 'vp9'}, }, { comment: 'Codec with MIME type', config: {codec: 'audio/webm; codecs="opus"'}, }, ]; invalidConfigs.forEach(entry => { promise_test( t => { return promise_rejects_js( t, TypeError, AudioDecoder.isConfigSupported(entry.config)); }, 'Test that AudioDecoder.isConfigSupported() rejects invalid config:' + entry.comment); }); invalidConfigs.forEach(entry => { async_test( t => { let codec = new AudioDecoder(getDefaultCodecInit(t)); assert_throws_js(TypeError, () => { codec.configure(entry.config); }); t.done(); }, 'Test that AudioDecoder.configure() rejects invalid config:' + entry.comment); }); function getFakeChunk() { return new EncodedAudioChunk( {type: 'key', timestamp: 0, data: Uint8Array.of(0)}); } promise_test(t => { // AudioDecoderInit lacks required fields. assert_throws_js(TypeError, () => { new AudioDecoder({}); }); // AudioDecoderInit has required fields. let decoder = new AudioDecoder(getDefaultCodecInit(t)); assert_equals(decoder.state, 'unconfigured'); decoder.close(); return endAfterEventLoopTurn(); }, 'Test AudioDecoder construction'); promise_test(t => { let decoder = new AudioDecoder(getDefaultCodecInit(t)); return testUnconfiguredCodec(t, decoder, getFakeChunk()); }, 'Verify unconfigured AudioDecoder operations');