| Index: third_party/WebKit/LayoutTests/webaudio/internals/audiocontext-close.html
|
| diff --git a/third_party/WebKit/LayoutTests/webaudio/internals/audiocontext-close.html b/third_party/WebKit/LayoutTests/webaudio/internals/audiocontext-close.html
|
| index 141898ed6ed5f76b70e3b6ae437d8fae4a1e88a4..846f7494832677c786b6d7de02d0640b86d05ccf 100644
|
| --- a/third_party/WebKit/LayoutTests/webaudio/internals/audiocontext-close.html
|
| +++ b/third_party/WebKit/LayoutTests/webaudio/internals/audiocontext-close.html
|
| @@ -1,191 +1,216 @@
|
| -<!doctype html>
|
| +<!DOCTYPE html>
|
| <html>
|
| -<head>
|
| - <title>Test AudioContext.close()</title>
|
| - <script src="../../resources/testharness.js"></script>
|
| - <script src="../../resources/testharnessreport.js"></script>
|
| - <script src="../resources/audit-util.js"></script>
|
| - <script src="../resources/audit.js"></script>
|
| -</head>
|
| + <head>
|
| + <title>
|
| + Test AudioContext.close()
|
| + </title>
|
| + <script src="../../resources/testharness.js"></script>
|
| + <script src="../../resources/testharnessreport.js"></script>
|
| + <script src="../resources/audit-util.js"></script>
|
| + <script src="../resources/audit.js"></script>
|
| + </head>
|
| + <body>
|
| + <script id="layout-test-code">
|
| + let context;
|
| + let destination;
|
| + let offline;
|
| + let osc;
|
| + let gain;
|
| + let offlinePromise;
|
| + let wave = new Float32Array(1);
|
|
|
| -<body>
|
| - <script>
|
| - let context;
|
| - let destination;
|
| - let offline;
|
| - let osc;
|
| - let gain;
|
| - let offlinePromise;
|
| - let wave = new Float32Array(1);
|
| + let audit = Audit.createTaskRunner();
|
|
|
| - let audit = Audit.createTaskRunner();
|
| + // Task: test online context (1).
|
| + audit.define(
|
| + {
|
| + label: 'test-online-context-1',
|
| + description: 'Test online context 1'
|
| + },
|
| + function(task, should) {
|
| + // Create a context and verify that the various states are correct
|
| + // and that close() exists.
|
| + should(
|
| + () => context = new AudioContext(),
|
| + 'context0 = new AudioContext()')
|
| + .notThrow();
|
| + should(context.state, 'context0.state').beEqualTo('running');
|
|
|
| - // Task: test online context (1).
|
| - audit.define({
|
| - label: 'test-online-context-1',
|
| - description: "Test online context 1"
|
| - }, function (task, should) {
|
| - // Create a context and verify that the various states are correct and
|
| - // that close() exists.
|
| - should(() => context = new AudioContext(),
|
| - "context0 = new AudioContext()")
|
| - .notThrow();
|
| - should(context.state, "context0.state")
|
| - .beEqualTo("running");
|
| + // Create gain and oscillator for testing later.
|
| + should(
|
| + () => osc = context.createOscillator(),
|
| + 'osc = context.createOscillator()')
|
| + .notThrow();
|
| + should(
|
| + () => gain = context.createGain(),
|
| + 'gain = context0.createGain()')
|
| + .notThrow();
|
| + destination = context.destination;
|
| + should(
|
| + () => gain.connect(context.destination),
|
| + 'gain.connect(context0.destination)')
|
| + .notThrow();
|
|
|
| - // Create gain and oscillator for testing later.
|
| - should(() => osc = context.createOscillator(),
|
| - "osc = context.createOscillator()")
|
| - .notThrow();
|
| - should(() => gain = context.createGain(),
|
| - "gain = context0.createGain()")
|
| - .notThrow();
|
| - destination = context.destination;
|
| - should(() => gain.connect(context.destination),
|
| - "gain.connect(context0.destination)")
|
| - .notThrow();
|
| + // Close the context. When the promise is resolved, continue the
|
| + // next test task.
|
| + let promise = context.close().then(() => {
|
| + should(
|
| + () => gain.disconnect(destination),
|
| + 'gain.disconnect(destination) after close')
|
| + .notThrow();
|
| + });
|
| + should(promise, 'context0.close()')
|
| + .beResolved()
|
| + .then(task.done.bind(this));
|
| + });
|
|
|
| - // Close the context. When the promise is resolved, continue the next
|
| - // test task.
|
| - let promise = context.close().then(() => {
|
| - should(() => gain.disconnect(destination),
|
| - "gain.disconnect(destination) after close")
|
| - .notThrow();
|
| - });
|
| - should(promise, "context0.close()")
|
| - .beResolved()
|
| - .then(task.done.bind(this));
|
| - });
|
| + // Task: test online context (2).
|
| + audit.define(
|
| + {
|
| + label: 'test-online-context-2',
|
| + description: 'Test closed online context 2'
|
| + },
|
| + function(task, should) {
|
| + // Context is closed, so verify that we cannot create any more
|
| + // nodes, nor connect any.
|
| + should(() => context.createAnalyser(), 'context.createAnalyser()')
|
| + .throw('InvalidStateError');
|
| + should(
|
| + () => context.createBiquadFilter(),
|
| + 'context.createBiquadFilter()')
|
| + .throw('InvalidStateError');
|
|
|
| - // Task: test online context (2).
|
| - audit.define({
|
| - label: 'test-online-context-2',
|
| - description: "Test closed online context 2"
|
| - }, function (task, should) {
|
| - // Context is closed, so verify that we cannot create any more nodes,
|
| - // nor connect any.
|
| - should(() => context.createAnalyser(), "context.createAnalyser()")
|
| - .throw("InvalidStateError");
|
| - should(() => context.createBiquadFilter(),
|
| - "context.createBiquadFilter()")
|
| - .throw("InvalidStateError");
|
| + // createBuffer is an exception because it's not really tied in any
|
| + // way to an audio context. And it's useful to be able to create a
|
| + // buffer inside the oncomplete event of an offline context to use
|
| + // for testing purposes.
|
| + should(
|
| + () => context.createBuffer(1, 1, 48000),
|
| + 'context.createBuffer(1, 1, 48000)')
|
| + .notThrow();
|
|
|
| - // createBuffer is an exception because it's not really tied in any way
|
| - // to an audio context. And it's useful to be able to create a buffer
|
| - // inside the oncomplete event of an offline context to use for testing
|
| - // purposes.
|
| - should(() => context.createBuffer(1, 1, 48000),
|
| - "context.createBuffer(1, 1, 48000)")
|
| - .notThrow();
|
| + should(
|
| + () => context.createBufferSource(),
|
| + 'context.createBufferSource()')
|
| + .throw('InvalidStateError');
|
| + should(
|
| + () => context.createChannelMerger(),
|
| + 'context.createChannelMerger()')
|
| + .throw('InvalidStateError');
|
| + should(
|
| + () => context.createChannelSplitter(),
|
| + 'context.createChannelSplitter()')
|
| + .throw('InvalidStateError');
|
| + should(() => context.createConvolver(), 'context.createConvolver()')
|
| + .throw('InvalidStateError');
|
| + should(() => context.createDelay(), 'context.createDelay()')
|
| + .throw('InvalidStateError');
|
| + should(
|
| + () => context.createDynamicsCompressor(),
|
| + 'context.createDynamicsCompressor()')
|
| + .throw('InvalidStateError');
|
| + should(() => context.createGain(), 'context.createGain()')
|
| + .throw('InvalidStateError');
|
| + should(
|
| + () => context.createOscillator(), 'context.createOscillator()')
|
| + .throw('InvalidStateError');
|
| + should(() => context.createPanner(), 'context.createPanner()')
|
| + .throw('InvalidStateError');
|
| + should(
|
| + () => context.createPeriodicWave(wave, wave),
|
| + 'context.createPeriodicWave(wave, wave)')
|
| + .throw('InvalidStateError');
|
| + should(
|
| + () => context.createScriptProcessor(),
|
| + 'context.createScriptProcessor()')
|
| + .throw('InvalidStateError');
|
| + should(
|
| + () => context.createStereoPanner(),
|
| + 'context.createStereoPanner()')
|
| + .throw('InvalidStateError');
|
| + should(
|
| + () => context.createWaveShaper(), 'context.createWaveShaper()')
|
| + .throw('InvalidStateError');
|
|
|
| - should(() => context.createBufferSource(),
|
| - "context.createBufferSource()")
|
| - .throw("InvalidStateError");
|
| - should(() => context.createChannelMerger(),
|
| - "context.createChannelMerger()")
|
| - .throw("InvalidStateError");
|
| - should(() => context.createChannelSplitter(),
|
| - "context.createChannelSplitter()")
|
| - .throw("InvalidStateError");
|
| - should(() => context.createConvolver(), "context.createConvolver()")
|
| - .throw("InvalidStateError");
|
| - should(() => context.createDelay(), "context.createDelay()")
|
| - .throw("InvalidStateError");
|
| - should(() =>
|
| - context.createDynamicsCompressor(),
|
| - "context.createDynamicsCompressor()").throw("InvalidStateError");
|
| - should(() => context.createGain(), "context.createGain()").throw(
|
| - "InvalidStateError");
|
| - should(() => context.createOscillator(),
|
| - "context.createOscillator()")
|
| - .throw("InvalidStateError");
|
| - should(() => context.createPanner(), "context.createPanner()")
|
| - .throw("InvalidStateError");
|
| - should(() => context.createPeriodicWave(wave, wave),
|
| - "context.createPeriodicWave(wave, wave)")
|
| - .throw("InvalidStateError");
|
| - should(() => context.createScriptProcessor(),
|
| - "context.createScriptProcessor()")
|
| - .throw("InvalidStateError");
|
| - should(() =>
|
| - context.createStereoPanner(), "context.createStereoPanner()").throw(
|
| - "InvalidStateError");
|
| - should(() => context.createWaveShaper(),
|
| - "context.createWaveShaper()")
|
| - .throw("InvalidStateError");
|
| + should(() => osc.connect(gain), 'osc.connect(gain)')
|
| + .throw('InvalidStateError');
|
| + should(() => gain.disconnect(), 'gain.disconnect()').notThrow();
|
|
|
| - should(() => osc.connect(gain), "osc.connect(gain)")
|
| - .throw("InvalidStateError");
|
| - should(() => gain.disconnect(), "gain.disconnect()").notThrow();
|
| + // Can't resume a context that is closed (released).
|
| + should(context.resume(), 'context.resume()')
|
| + .beRejected()
|
| + .then(task.done.bind(task));
|
| + });
|
|
|
| - // Can't resume a context that is closed (released).
|
| - should(context.resume(), "context.resume()")
|
| - .beRejected()
|
| - .then(task.done.bind(task));
|
| - });
|
| + // Task: test online context (3).
|
| + audit.define(
|
| + {
|
| + label: 'test-online-context-3',
|
| + description: 'Close an online context again'
|
| + },
|
| + function(task, should) {
|
| + // Try closing the context again. The promise should be rejected.
|
| + should(context.close(), 'context.close() again')
|
| + .beRejected()
|
| + .then(() => {
|
| + // Finally, run GC. The context should be gone, but this seems
|
| + // difficult to verify.
|
| + if (window.gc)
|
| + gc();
|
| + should(context.destination, 'context.destination')
|
| + .beEqualTo(null);
|
| + })
|
| + .then(task.done.bind(task));
|
| + });
|
|
|
| - // Task: test online context (3).
|
| - audit.define({
|
| - label: 'test-online-context-3',
|
| - description: "Close an online context again"
|
| - }, function (task, should) {
|
| - // Try closing the context again. The promise should be rejected.
|
| - should(context.close(), "context.close() again")
|
| - .beRejected()
|
| - .then(() => {
|
| - // Finally, run GC. The context should be gone, but this seems
|
| - // difficult to verify.
|
| - if (window.gc)
|
| - gc();
|
| - should(context.destination, "context.destination")
|
| - .beEqualTo(null);
|
| - })
|
| - .then(task.done.bind(task));
|
| - });
|
| + // Task: test online context (4).
|
| + audit.define(
|
| + {
|
| + label: 'test-online-context-4',
|
| + description: 'Test closed online context 4'
|
| + },
|
| + function(task, should) {
|
| + // Create a context and verify that its sampleRate and baseLatency
|
| + // return valid values whether it's open or closed.
|
| + should(
|
| + () => context = new AudioContext(),
|
| + 'context1 = new AudioContext()')
|
| + .notThrow();
|
| + should(context.sampleRate, 'context1.sampleRate')
|
| + .beGreaterThan('0');
|
| + should(context.sampleRate, 'context1.baseLatency')
|
| + .beGreaterThan('0');
|
|
|
| - // Task: test online context (4).
|
| - audit.define({
|
| - label: 'test-online-context-4',
|
| - description: "Test closed online context 4"
|
| - }, function (task, should) {
|
| - // Create a context and verify that its sampleRate and baseLatency return
|
| - // valid values whether it's open or closed.
|
| - should(() => context = new AudioContext(),
|
| - "context1 = new AudioContext()")
|
| - .notThrow();
|
| - should(context.sampleRate, "context1.sampleRate")
|
| - .beGreaterThan("0");
|
| - should(context.sampleRate, "context1.baseLatency")
|
| - .beGreaterThan("0");
|
| + should(context.close(), 'context1.close()')
|
| + .beResolved()
|
| + .then(() => {
|
| + should(context.sampleRate, 'After close, context1.sampleRate')
|
| + .beGreaterThan('0');
|
| + should(
|
| + context.sampleRate, 'After close, context1.baseLatency')
|
| + .beGreaterThan('0');
|
| + })
|
| + .then(task.done.bind(task));
|
| + });
|
|
|
| - should(context.close(), "context1.close()")
|
| - .beResolved()
|
| - .then(() => {
|
| - should(context.sampleRate, "After close, context1.sampleRate")
|
| - .beGreaterThan("0");
|
| - should(context.sampleRate, "After close, context1.baseLatency")
|
| - .beGreaterThan("0");
|
| - })
|
| - .then(task.done.bind(task));
|
| - });
|
| + // Task: test offline context (1).
|
| + audit.define(
|
| + {
|
| + label: 'test-offline-context-1',
|
| + description: 'Test offline context'
|
| + },
|
| + function(task, should) {
|
| + // For an offline context, verify that close is not defined.
|
| + should(
|
| + () => offline = new OfflineAudioContext(1, 1000, 48000),
|
| + 'offline = new OfflineAudioContext(1, 1000, 48000)')
|
| + .notThrow();
|
| + should(offline.state, 'offline.state').beEqualTo('suspended');
|
| + should(offline.close, 'offline.close').beEqualTo(undefined);
|
| + task.done();
|
| + });
|
|
|
| - // Task: test offline context (1).
|
| - audit.define({
|
| - label: 'test-offline-context-1',
|
| - description: "Test offline context"
|
| - }, function (task, should) {
|
| - // For an offline context, verify that close is not defined.
|
| - should(() => offline = new OfflineAudioContext(1, 1000, 48000),
|
| - "offline = new OfflineAudioContext(1, 1000, 48000)")
|
| - .notThrow();
|
| - should(offline.state, "offline.state")
|
| - .beEqualTo("suspended");
|
| - should(offline.close, "offline.close")
|
| - .beEqualTo(undefined);
|
| - task.done();
|
| - });
|
| -
|
| - audit.run();
|
| - </script>
|
| -</body>
|
| + audit.run();
|
| + </script>
|
| + </body>
|
| </html>
|
|
|