blob: 2a08bd8b70b5b816ab7aa68de4ed28b5dc3cf333 [file] [log] [blame]
CONSOLE WARNING: line 39: The Web Audio autoplay policy will be re-enabled in Chrome 70 (October 2018). Please check that your website is compatible with it. https://goo.gl/7K7WLu
CONSOLE WARNING: line 43: The Web Audio autoplay policy will be re-enabled in Chrome 70 (October 2018). Please check that your website is compatible with it. https://goo.gl/7K7WLu
CONSOLE WARNING: line 347: The provided value 'fancy' is not a valid enum value of type ChannelCountMode.
CONSOLE WARNING: line 353: The provided value 'undefined' is not a valid enum value of type ChannelInterpretation.
CONSOLE WARNING: line 523: The provided value '9x' is not a valid enum value of type OverSampleType.
CONSOLE WARNING: line 769: The provided value 'junk' is not a valid enum value of type ChannelCountMode.
CONSOLE WARNING: line 800: The provided value 'junk' is not a valid enum value of type ChannelCountMode.
This is a testharness.js-based test.
PASS # AUDIT TASK RUNNER STARTED.
PASS > [initialize] Initialize contexts for testing
PASS context = new AudioContext() did not throw an exception.
PASS otherContext = new AudioContext() did not throw an exception.
PASS < [initialize] All assertions passed. (total 2 assertions)
PASS > [createBuffer]
PASS context.createBuffer(99, 1, context.sampleRate) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The number of channels provided (99) is outside the range [1, 32].".
PASS context.createBuffer(0, 1, context.sampleRate) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The number of channels provided (0) is outside the range [1, 32].".
PASS context.createBuffer(1, 1, 1) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The sample rate provided (1) is outside the range [3000, 384000].".
PASS context.createBuffer(1, 1, 2999) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The sample rate provided (2999) is outside the range [3000, 384000].".
PASS context.createBuffer(1, 1, 384001) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The sample rate provided (384001) is outside the range [3000, 384000].".
PASS context.createBuffer(1, 1, 1e6) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The sample rate provided (1.00000e+6) is outside the range [3000, 384000].".
PASS context.createBuffer(1, 1, 3000) did not throw an exception.
PASS context.createBuffer(1, 1, 192000) did not throw an exception.
PASS context.createBuffer(1, 1, 384000) did not throw an exception.
PASS context.createBuffer(1, 0, context.sampleRate) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The number of frames provided (0) is less than or equal to the minimum bound (0).".
PASS context.createBuffer(new ArrayBuffer(100), true) threw TypeError: "Failed to execute 'createBuffer' on 'BaseAudioContext': 3 arguments required, but only 2 present.".
PASS < [createBuffer] All assertions passed. (total 11 assertions)
PASS > [createMediaElementSource]
PASS context.createMediaElementSource(null) threw TypeError: "Failed to execute 'createMediaElementSource' on 'BaseAudioContext': parameter 1 is not of type 'HTMLMediaElement'.".
PASS < [createMediaElementSource] All assertions passed. (total 1 assertions)
PASS > [createMediaStreamSource]
PASS context.createMediaStreamSource(null) threw TypeError: "Failed to execute 'createMediaStreamSource' on 'BaseAudioContext': parameter 1 is not of type 'MediaStream'.".
PASS < [createMediaStreamSource] All assertions passed. (total 1 assertions)
PASS > [createScriptProcessor]
PASS context.createScriptProcessor(1, 1, 1) threw IndexSizeError: "Failed to execute 'createScriptProcessor' on 'BaseAudioContext': buffer size (1) must be 0 or a power of two between 256 and 16384.".
PASS context.createScriptProcessor(4096, 100, 1) threw IndexSizeError: "Failed to execute 'createScriptProcessor' on 'BaseAudioContext': number of input channels (100) exceeds maximum (32).".
PASS context.createScriptProcessor(4096, 1, 100) threw IndexSizeError: "Failed to execute 'createScriptProcessor' on 'BaseAudioContext': number of output channels (100) exceeds maximum (32).".
PASS context.createScriptProcessor() did not throw an exception.
PASS context.createScriptProcessor(0) did not throw an exception.
PASS < [createScriptProcessor] All assertions passed. (total 5 assertions)
PASS > [createChannelSplitter]
PASS context.createChannelSplitter(0) threw IndexSizeError: "Failed to execute 'createChannelSplitter' on 'BaseAudioContext': The number of outputs provided (0) is outside the range [1, 32].".
PASS context.createChannelSplitter(99) threw IndexSizeError: "Failed to execute 'createChannelSplitter' on 'BaseAudioContext': The number of outputs provided (99) is outside the range [1, 32].".
PASS context.createChannelMerger(0) threw IndexSizeError: "Failed to execute 'createChannelMerger' on 'BaseAudioContext': The number of inputs provided (0) is outside the range [1, 32].".
PASS < [createChannelSplitter] All assertions passed. (total 3 assertions)
PASS > [createChannelMerger]
PASS context.createChannelMerger(99) threw IndexSizeError: "Failed to execute 'createChannelMerger' on 'BaseAudioContext': The number of inputs provided (99) is outside the range [1, 32].".
PASS < [createChannelMerger] All assertions passed. (total 1 assertions)
PASS > [createPeriodicWave]
PASS context.createPeriodicWave(null, null) threw TypeError: "Failed to execute 'createPeriodicWave' on 'BaseAudioContext': The provided value cannot be converted to a sequence.".
PASS context.createPeriodicWave(new Float32Array(10), null) threw TypeError: "Failed to execute 'createPeriodicWave' on 'BaseAudioContext': The provided value cannot be converted to a sequence.".
PASS context.createPeriodicWave(new Float32Array(4100), new Float32Array(4100)) did not throw an exception.
PASS context.createPeriodicWave(new Float32Array(8192), new Float32Array(8192)) did not throw an exception.
PASS context.createPeriodicWave(new Float32Array(10000), new Float32Array(10000)) did not throw an exception.
PASS context.createPeriodicWave(new Float32Array(10), new Float32Array(7)) threw IndexSizeError: "Failed to execute 'createPeriodicWave' on 'BaseAudioContext': length of real array (10) and length of imaginary array (7) must match.".
PASS < [createPeriodicWave] All assertions passed. (total 6 assertions)
PASS > [createAnalyser]
PASS AnalyserNode.fftSize = 42 threw IndexSizeError: "Failed to set the 'fftSize' property on 'AnalyserNode': The value provided (42) is not a power of two.".
PASS AnalyserNode.fftSize is not equal to 42.
PASS AnalyserNode.fftSize = 16 threw IndexSizeError: "Failed to set the 'fftSize' property on 'AnalyserNode': The FFT size provided (16) is outside the range [32, 32768].".
PASS AnalyserNode.fftSize is not equal to 16.
PASS AnalyserNode.fftSize = 32768 did not throw an exception.
PASS AnalyserNode.fftSize = 65536 threw IndexSizeError: "Failed to set the 'fftSize' property on 'AnalyserNode': The FFT size provided (65536) is outside the range [32, 32768].".
PASS AnalyserNode.fftSize is not equal to 65536.
PASS AnalyserNode.minDecibels = -10 threw IndexSizeError: "Failed to set the 'minDecibels' property on 'AnalyserNode': The minDecibels provided (-10) is greater than the maximum bound (-30).".
PASS AnalyserNode.minDecibels is not equal to -10.
PASS AnalyserNode.maxDecibels = -150 threw IndexSizeError: "Failed to set the 'maxDecibels' property on 'AnalyserNode': The maxDecibels provided (-150) is less than the minimum bound (-100).".
PASS AnalyserNode.maxDecibels is not equal to -150.
PASS AnalyserNode.minDecibels = -30 threw IndexSizeError: "Failed to set the 'minDecibels' property on 'AnalyserNode': The minDecibels provided (-30) is greater than or equal to the maximum bound (-30).".
PASS AnalyserNode.minDecibels is not equal to -30.
PASS AnalyserNode.maxDecibels = -100 threw IndexSizeError: "Failed to set the 'maxDecibels' property on 'AnalyserNode': The maxDecibels provided (-100) is less than or equal to the minimum bound (-100).".
PASS AnalyserNode.maxDecibels is not equal to -100.
PASS AnalyserNode.smoothingTimeConstant = -0.1 threw IndexSizeError: "Failed to set the 'smoothingTimeConstant' property on 'AnalyserNode': The smoothing value provided (-0.1) is outside the range [0, 1].".
PASS AnalyserNode.smoothingTimeConstant is not equal to -0.1.
PASS AnalyserNode.smoothingTimeConstant = 1.5 threw IndexSizeError: "Failed to set the 'smoothingTimeConstant' property on 'AnalyserNode': The smoothing value provided (1.5) is outside the range [0, 1].".
PASS AnalyserNode.smoothingTimeConstant is not equal to 1.5.
PASS AnalyserNode.getFloatFrequencyData(null) threw TypeError: "Failed to execute 'getFloatFrequencyData' on 'AnalyserNode': parameter 1 is not of type 'Float32Array'.".
PASS AnalyserNode.getByteFrequencyData(null) threw TypeError: "Failed to execute 'getByteFrequencyData' on 'AnalyserNode': parameter 1 is not of type 'Uint8Array'.".
PASS AnalyserNode.getFloatTimeDomainData(null) threw TypeError: "Failed to execute 'getFloatTimeDomainData' on 'AnalyserNode': parameter 1 is not of type 'Float32Array'.".
PASS AnalyserNode.getByteTimeDomainData(null) threw TypeError: "Failed to execute 'getByteTimeDomainData' on 'AnalyserNode': parameter 1 is not of type 'Uint8Array'.".
PASS AnalyserNode.getFloatFrequencyData(SharedArrayBuffer view) threw TypeError: "Failed to execute 'getFloatFrequencyData' on 'AnalyserNode': The provided ArrayBufferView value must not be shared.".
PASS AnalyserNode.getByteFrequencyData(SharedArrayBuffer view) threw TypeError: "Failed to execute 'getByteFrequencyData' on 'AnalyserNode': The provided ArrayBufferView value must not be shared.".
PASS AnalyserNode.getFloatTimeDomainData(SharedArrayBuffer view) threw TypeError: "Failed to execute 'getFloatTimeDomainData' on 'AnalyserNode': The provided ArrayBufferView value must not be shared.".
PASS AnalyserNode.getByteTimeDomainData(SharedArrayBuffer view) threw TypeError: "Failed to execute 'getByteTimeDomainData' on 'AnalyserNode': The provided ArrayBufferView value must not be shared.".
PASS AudioBuffer.getChannelData(2) threw IndexSizeError: "Failed to execute 'getChannelData' on 'AudioBuffer': channel index (2) exceeds number of channels (1)".
PASS < [createAnalyser] All assertions passed. (total 28 assertions)
PASS > [Init test nodes] Create test nodes for the following tests
PASS node = context.createGain() did not throw an exception.
PASS node2 = context.createGain() did not throw an exception.
PASS < [Init test nodes] All assertions passed. (total 2 assertions)
PASS > [connections] AudioNode connections
PASS node.connect(null, 0, 0) threw TypeError: "Failed to execute 'connect' on 'AudioNode': parameter 1 is not of type 'AudioNode'.".
PASS node.connect(context.destination, 100, 0) threw IndexSizeError: "Failed to execute 'connect' on 'AudioNode': output index (100) exceeds number of outputs (1).".
PASS node.connect(context.destination, 0, 100) threw IndexSizeError: "Failed to execute 'connect' on 'AudioNode': input index (100) exceeds number of inputs (1).".
PASS node.connect(node2.gain, 100) threw IndexSizeError: "Failed to execute 'connect' on 'AudioNode': output index (100) exceeds number of outputs (1).".
PASS node.disconnect(99) threw IndexSizeError: "Failed to execute 'disconnect' on 'AudioNode': The output index provided (99) is outside the range [0, 0].".
PASS node.connect(otherContext.destination) threw InvalidAccessError: "Failed to execute 'connect' on 'AudioNode': cannot connect to a destination belonging to a different audio context.".
PASS < [connections] All assertions passed. (total 6 assertions)
PASS > [channel-stuff] channelCount, channelCountMode, channelInterpretation
PASS GainNode.channelCount = 99 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': The channel count provided (99) is outside the range [1, 32].".
PASS GainNode.channelCount is not equal to 99.
PASS node.channelCountMode = "fancy" did not throw an exception.
PASS node.channelCountMode is equal to max.
PASS node.channelInterpretation = mode did not throw an exception.
PASS node.channelInterpretation is equal to speakers.
PASS context.destination.channelCount = 99 threw IndexSizeError: [error message omitted].
PASS < [channel-stuff] All assertions passed. (total 7 assertions)
PASS > [audioparam]
PASS param.setValueCurveAtTime(null, 0, 0) threw TypeError: "Failed to execute 'setValueCurveAtTime' on 'AudioParam': The provided value cannot be converted to a sequence.".
PASS node.gain.exponentialRampToValueAtTime(-1, 0.1) did not throw an exception.
PASS node.gain.exponentialRampToValueAtTime(0, 0.1) threw RangeError: "Failed to execute 'exponentialRampToValueAtTime' on 'AudioParam': The float target value provided (0) should not be in the range (-1.40130e-45, 1.40130e-45).".
PASS node.gain.exponentialRampToValueAtTime(1e-100, 0.1) threw RangeError: "Failed to execute 'exponentialRampToValueAtTime' on 'AudioParam': The float target value provided (0) should not be in the range (-1.40130e-45, 1.40130e-45).".
PASS node.gain.exponentialRampToValueAtTime(Math.pow(2, -149), 0.1) did not throw an exception.
PASS node.gain.exponentialRampToValueAtTime(Math.pow(2, -150), 0.1) threw RangeError: "Failed to execute 'exponentialRampToValueAtTime' on 'AudioParam': The float target value provided (0) should not be in the range (-1.40130e-45, 1.40130e-45).".
PASS < [audioparam] All assertions passed. (total 6 assertions)
PASS > [biquad]
PASS node.getFrequencyResponse(new Float32Array(1), new Float32Array(1), new Float32Array(1)) did not throw an exception.
PASS node.getFrequencyResponse(null, new Float32Array(1), new Float32Array(1)) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': parameter 1 is not of type 'Float32Array'.".
PASS node.getFrequencyResponse(new Float32Array(1), null, new Float32Array(1)) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': parameter 2 is not of type 'Float32Array'.".
PASS node.getFrequencyResponse(new Float32Array(1), new Float32Array(1), null) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': parameter 3 is not of type 'Float32Array'.".
PASS node.getFrequencyResponse(shared_view, nonshared_view, nonshared_view) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': The provided ArrayBufferView value must not be shared.".
PASS node.getFrequencyResponse(nonshared_view, shared_view, nonshared_view) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': The provided ArrayBufferView value must not be shared.".
PASS node.getFrequencyResponse(nonshared_view, nonshared_view, shared_view) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': The provided ArrayBufferView value must not be shared.".
PASS < [biquad] All assertions passed. (total 7 assertions)
PASS > [offline-audio-context] supports 32 channels
PASS new OfflineAudioContext(32, 100, context.sampleRate) did not throw an exception.
PASS < [offline-audio-context] All assertions passed. (total 1 assertions)
PASS > [invalid-offline-audio-context-parameters] errors for invalid channel counts
PASS new OfflineAudioContext(0, 100, context.sampleRate) threw NotSupportedError: "Failed to construct 'OfflineAudioContext': The number of channels provided (0) is outside the range [1, 32].".
PASS new OfflineAudioContext(99, 100, context.sampleRate) threw NotSupportedError: "Failed to construct 'OfflineAudioContext': The number of channels provided (99) is outside the range [1, 32].".
PASS new OfflineAudioContext(1, 100, 1) threw NotSupportedError: "Failed to construct 'OfflineAudioContext': The sampleRate provided (1) is outside the range [3000, 384000].".
PASS new OfflineAudioContext(1, 100, 1e6) threw NotSupportedError: "Failed to construct 'OfflineAudioContext': The sampleRate provided (1.00000e+6) is outside the range [3000, 384000].".
PASS new OfflineAudioContext(1, 0, 44100) threw NotSupportedError: "Failed to construct 'OfflineAudioContext': The number of frames provided (0) is less than the minimum bound (1).".
PASS < [invalid-offline-audio-context-parameters] All assertions passed. (total 5 assertions)
PASS > [invalid-frame-length]
PASS testContext = new OfflineAudioContext(1, -88200000000000, 44100) did not throw an exception.
PASS testContext.startRendering() rejected correctly with NotSupportedError: startRendering failed to create AudioBuffer(1, 1448390656, 44100).
PASS < [invalid-frame-length] All assertions passed. (total 2 assertions)
PASS > [waveshaper]
PASS node.oversample = "9x" did not throw an exception.
PASS node.oversample is equal to none.
PASS node.curve = {} threw TypeError: "Failed to set the 'curve' property on 'WaveShaperNode': The provided value is not of type 'Float32Array'.".
PASS node.curve = new Float32Array(1) threw InvalidAccessError: "Failed to set the 'curve' property on 'WaveShaperNode': The curve length provided (1) is less than the minimum bound (2).".
PASS node.curve is equal to null.
PASS node.curve = new Float32Array(2) did not throw an exception.
PASS node.curve = null did not throw an exception.
PASS < [waveshaper] All assertions passed. (total 7 assertions)
PASS > [audio-buffer-source] AudioBufferSource start/stop
PASS source = context.createBufferSource() did not throw an exception.
PASS source.buffer = buffer did not throw an exception.
PASS source.buffer = context.createBuffer(1, 10, context.sampleRate) threw InvalidStateError: "Failed to set the 'buffer' property on 'AudioBufferSourceNode': Cannot set buffer to non-null after it has been already been set to a non-null buffer".
PASS source.start(-1) threw RangeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The start time provided (-1) is less than the minimum bound (0).".
PASS source.start(Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.".
PASS source.start(-Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.".
PASS source.start(NaN) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.".
PASS source.start(1, Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.".
PASS source.start(1, -Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.".
PASS source.start(1, NaN) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.".
PASS source.start(1, -1) threw RangeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The offset provided (-1) is less than the minimum bound (0).".
PASS source.start(1, -Number.MIN_VALUE) threw RangeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The offset provided (-4.94066e-324) is less than the minimum bound (0).".
PASS source.start(1, 1, Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.".
PASS source.start(1, 1, -Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.".
PASS source.start(1, 1, NaN) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.".
PASS source.start(1, 1, -1) threw RangeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The duration provided (-1) is less than the minimum bound (0).".
PASS source.start(1, 1, -Number.MIN_VALUE) threw RangeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The duration provided (-4.94066e-324) is less than the minimum bound (0).".
PASS source.start() did not throw an exception.
PASS source.stop(-Number.MIN_VALUE) threw RangeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The stop time provided (-4.94066e-324) is less than the minimum bound (0).".
PASS source.stop(Infinity) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.".
PASS source.stop(-Infinity) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.".
PASS source.stop(NaN) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.".
PASS source.stop() did not throw an exception.
PASS source2 = context.createBufferSource() did not throw an exception.
PASS source2.buffer = buffer did not throw an exception.
PASS source2.start(0, 0) did not throw an exception.
PASS source3 = context.createBufferSource() did not throw an exception.
PASS source3.buffer = buffer did not throw an exception.
PASS source3.start(0, -1/Infinity) did not throw an exception.
PASS source4 = context.createBufferSource() did not throw an exception.
PASS source4.start() did not throw an exception.
PASS source5 = context.createBufferSource() did not throw an exception.
PASS source5.buffer = buffer did not throw an exception.
PASS source5.stop() threw InvalidStateError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': cannot call stop without calling start first.".
PASS source6 = context.createBufferSource() did not throw an exception.
PASS source6.buffer = buffer did not throw an exception.
PASS source6.start() did not throw an exception.
PASS source6.start() threw InvalidStateError: "Failed to execute 'start' on 'AudioBufferSourceNode': cannot call start more than once.".
PASS source7 = context.createBufferSource() did not throw an exception.
PASS source7.buffer = buffer did not throw an exception.
PASS source7.start() did not throw an exception.
PASS source7.stop() did not throw an exception.
PASS < [audio-buffer-source] All assertions passed. (total 42 assertions)
PASS > [oscillator] start/stop
PASS source8 = context.createOscillator() did not throw an exception.
PASS source8.start(-Number.MIN_VALUE) threw RangeError: "Failed to execute 'start' on 'AudioScheduledSourceNode': The start time provided (-4.94066e-324) is less than the minimum bound (0).".
PASS source8.start(Infinity) threw TypeError: "Failed to execute 'start' on 'AudioScheduledSourceNode': The provided double value is non-finite.".
PASS source8.start(-Infinity) threw TypeError: "Failed to execute 'start' on 'AudioScheduledSourceNode': The provided double value is non-finite.".
PASS source8.start(NaN) threw TypeError: "Failed to execute 'start' on 'AudioScheduledSourceNode': The provided double value is non-finite.".
PASS source8.start() did not throw an exception.
PASS source8.stop(-Number.MIN_VALUE) threw RangeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The stop time provided (-4.94066e-324) is less than the minimum bound (0).".
PASS source8.stop(Infinity) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.".
PASS source8.stop(-Infinity) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.".
PASS source8.stop(NaN) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.".
PASS source8.stop() did not throw an exception.
PASS osc = context.createOscillator() did not throw an exception.
PASS osc.stop() threw InvalidStateError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': cannot call stop without calling start first.".
PASS osc1 = context.createOscillator() did not throw an exception.
PASS osc1.start() did not throw an exception.
PASS osc1.stop() did not throw an exception.
PASS osc.setPeriodicWave(null) threw TypeError: "Failed to execute 'setPeriodicWave' on 'OscillatorNode': parameter 1 is not of type 'PeriodicWave'.".
PASS < [oscillator] All assertions passed. (total 17 assertions)
PASS > [convolver]
PASS oc = new OfflineAudioContext(1, 44100, 44100) did not throw an exception.
PASS conv = oc.createConvolver() did not throw an exception.
PASS conv.buffer = {} threw TypeError: "Failed to set the 'buffer' property on 'ConvolverNode': The provided value is not of type 'AudioBuffer'.".
PASS conv.buffer = oc.createBuffer(1, 100, 22050) threw NotSupportedError: "Failed to set the 'buffer' property on 'ConvolverNode': The buffer sample rate of 22050 does not match the context rate of 44100 Hz.".
PASS conv.buffer is equal to null.
PASS < [convolver] All assertions passed. (total 5 assertions)
PASS > [panner]
PASS panner.channelCount = 1 did not throw an exception.
PASS panner.channelCount = 2 did not throw an exception.
PASS PannerNode.channelCount = 0 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': The channelCount provided (0) is outside the range [1, 2].".
PASS PannerNode.channelCount is not equal to 0.
PASS PannerNode.channelCount = 3 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': The channelCount provided (3) is outside the range [1, 2].".
PASS PannerNode.channelCount is not equal to 3.
PASS PannerNode.channelCountMode = max threw NotSupportedError: "Failed to set the 'channelCountMode' property on 'AudioNode': Panner: 'max' is not allowed".
PASS PannerNode.channelCountMode is not equal to max.
PASS panner.channelCountMode = "explicit" did not throw an exception.
PASS panner.channelCountMode = "clamped-max" did not throw an exception.
PASS panner.channelCountMode = "junk" did not throw an exception.
PASS < [panner] All assertions passed. (total 11 assertions)
PASS > [script-processor]
PASS script = context.createScriptProcessor(256, 3) did not throw an exception.
PASS script.channelCount is equal to 3.
PASS script.channelCountMode is equal to explicit.
PASS script.channelCount = 3 did not throw an exception.
PASS ScriptProcessorNode.channelCount = 1 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': channelCount cannot be changed from 3 to 1".
PASS ScriptProcessorNode.channelCount is not equal to 1.
PASS ScriptProcessorNode.channelCount = 7 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': channelCount cannot be changed from 3 to 7".
PASS ScriptProcessorNode.channelCount is not equal to 7.
PASS script.channelCountMode = "explicit" did not throw an exception.
PASS ScriptProcessorNode.channelCountMode = max threw NotSupportedError: "Failed to set the 'channelCountMode' property on 'AudioNode': channelCountMode cannot be changed from 'explicit' to 'max'".
PASS ScriptProcessorNode.channelCountMode is not equal to max.
PASS ScriptProcessorNode.channelCountMode = clamped-max threw NotSupportedError: "Failed to set the 'channelCountMode' property on 'AudioNode': channelCountMode cannot be changed from 'explicit' to 'clamped-max'".
PASS ScriptProcessorNode.channelCountMode is not equal to clamped-max.
PASS script.channelCountMode = "junk" did not throw an exception.
PASS < [script-processor] All assertions passed. (total 14 assertions)
PASS > [misc] Miscellaneous tests
PASS osc.noteOn is equal to undefined.
PASS osc.noteOff is equal to undefined.
PASS source.noteOn is equal to undefined.
PASS source.noteOff is equal to undefined.
PASS < [misc] All assertions passed. (total 4 assertions)
PASS # AUDIT TASK RUNNER FINISHED: 24 tasks ran successfully.
Harness: the test ran to completion.