Index: third_party/WebKit/LayoutTests/webaudio/AudioNode/audionode-disconnect-audioparam.html |
diff --git a/third_party/WebKit/LayoutTests/webaudio/AudioNode/audionode-disconnect-audioparam.html b/third_party/WebKit/LayoutTests/webaudio/AudioNode/audionode-disconnect-audioparam.html |
index 11181c75e7cf97ac4ca160c35eab000ba9ccc37a..a24742c8465d48712771b929d9e18bdeafd12377 100644 |
--- a/third_party/WebKit/LayoutTests/webaudio/AudioNode/audionode-disconnect-audioparam.html |
+++ b/third_party/WebKit/LayoutTests/webaudio/AudioNode/audionode-disconnect-audioparam.html |
@@ -1,203 +1,214 @@ |
<!DOCTYPE html> |
<html> |
- |
-<head> |
- <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> |
- |
- var renderQuantum = 128; |
- |
- var sampleRate = 44100; |
- var renderDuration = 0.5; |
- var disconnectTime = 0.5 * renderDuration; |
- |
- var audit = Audit.createTaskRunner(); |
- |
- // Calculate the index for disconnection. |
- function getDisconnectIndex(disconnectTime) { |
- var disconnectIndex = disconnectTime * sampleRate; |
- return disconnectIndex -= (disconnectIndex) % renderQuantum; |
- } |
- |
- // Get the index of value change. |
- function getValueChangeIndex(array, targetValue) { |
- return array.findIndex(function (element, index) { |
- if (element === targetValue) |
- return true; |
- }); |
- } |
- |
- // Task 1: test disconnect(AudioParam) method. |
- audit.define('disconnect(AudioParam)', (task, should) => { |
- |
- // Creates a buffer source with value [1] and then connect it to two gain |
- // nodes in series. The output of the buffer source is lowered by half |
- // (* 0.5) and then connected to two |.gain| AudioParams in each gain node. |
- // |
- // (1) bufferSource => gain1 => gain2 |
- // (2) bufferSource => half => gain1.gain |
- // (3) half => gain2.gain |
- // |
- // This graph should produce the output of 2.25 (= 1 * 1.5 * 1.5). After |
- // disconnecting (3), it should produce 1.5. |
- var context = new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate); |
- var source = context.createBufferSource(); |
- var buffer1ch = createConstantBuffer(context, 1, 1); |
- var half = context.createGain(); |
- var gain1 = context.createGain(); |
- var gain2 = context.createGain(); |
- |
- source.buffer = buffer1ch; |
- source.loop = true; |
- half.gain.value = 0.5; |
- |
- source.connect(gain1); |
- gain1.connect(gain2); |
- gain2.connect(context.destination); |
- source.connect(half); |
- |
- // Connecting |half| to both |gain1.gain| and |gain2.gain| amplifies the |
- // signal by 2.25 (= 1.5 * 1.5) because each gain node amplifies the signal |
- // by 1.5 (= 1.0 + 0.5). |
- half.connect(gain1.gain); |
- half.connect(gain2.gain); |
- |
- source.start(); |
- |
- // Schedule the disconnection at the half of render duration. |
- context.suspend(disconnectTime).then(function () { |
- half.disconnect(gain2.gain); |
- context.resume(); |
+ <head> |
+ <title> |
+ audionode-disconnect-audioparam.html |
+ </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 renderQuantum = 128; |
+ |
+ let sampleRate = 44100; |
+ let renderDuration = 0.5; |
+ let disconnectTime = 0.5 * renderDuration; |
+ |
+ let audit = Audit.createTaskRunner(); |
+ |
+ // Calculate the index for disconnection. |
+ function getDisconnectIndex(disconnectTime) { |
+ let disconnectIndex = disconnectTime * sampleRate; |
+ return disconnectIndex -= (disconnectIndex) % renderQuantum; |
+ } |
+ |
+ // Get the index of value change. |
+ function getValueChangeIndex(array, targetValue) { |
+ return array.findIndex(function(element, index) { |
+ if (element === targetValue) |
+ return true; |
+ }); |
+ } |
+ |
+ // Task 1: test disconnect(AudioParam) method. |
+ audit.define('disconnect(AudioParam)', (task, should) => { |
+ |
+ // Creates a buffer source with value [1] and then connect it to two |
+ // gain nodes in series. The output of the buffer source is lowered by |
+ // half |
+ // (* 0.5) and then connected to two |.gain| AudioParams in each gain |
+ // node. |
+ // |
+ // (1) bufferSource => gain1 => gain2 |
+ // (2) bufferSource => half => gain1.gain |
+ // (3) half => gain2.gain |
+ // |
+ // This graph should produce the output of 2.25 (= 1 * 1.5 * 1.5). After |
+ // disconnecting (3), it should produce 1.5. |
+ let context = |
+ new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate); |
+ let source = context.createBufferSource(); |
+ let buffer1ch = createConstantBuffer(context, 1, 1); |
+ let half = context.createGain(); |
+ let gain1 = context.createGain(); |
+ let gain2 = context.createGain(); |
+ |
+ source.buffer = buffer1ch; |
+ source.loop = true; |
+ half.gain.value = 0.5; |
+ |
+ source.connect(gain1); |
+ gain1.connect(gain2); |
+ gain2.connect(context.destination); |
+ source.connect(half); |
+ |
+ // Connecting |half| to both |gain1.gain| and |gain2.gain| amplifies the |
+ // signal by 2.25 (= 1.5 * 1.5) because each gain node amplifies the |
+ // signal by 1.5 (= 1.0 + 0.5). |
+ half.connect(gain1.gain); |
+ half.connect(gain2.gain); |
+ |
+ source.start(); |
+ |
+ // Schedule the disconnection at the half of render duration. |
+ context.suspend(disconnectTime).then(function() { |
+ half.disconnect(gain2.gain); |
+ context.resume(); |
+ }); |
+ |
+ context.startRendering() |
+ .then(function(buffer) { |
+ let channelData = buffer.getChannelData(0); |
+ let disconnectIndex = getDisconnectIndex(disconnectTime); |
+ let valueChangeIndex = getValueChangeIndex(channelData, 1.5); |
+ |
+ // Expected values are: 1 * 1.5 * 1.5 -> 1 * 1.5 = [2.25, 1.5] |
+ should(channelData, 'Channel #0').containValues([2.25, 1.5]); |
+ should(valueChangeIndex, 'The index of value change') |
+ .beEqualTo(disconnectIndex); |
+ |
+ }) |
+ .then(() => task.done()); |
}); |
- context.startRendering().then(function (buffer) { |
- var channelData = buffer.getChannelData(0); |
- var disconnectIndex = getDisconnectIndex(disconnectTime); |
- var valueChangeIndex = getValueChangeIndex(channelData, 1.5); |
- |
- // Expected values are: 1 * 1.5 * 1.5 -> 1 * 1.5 = [2.25, 1.5] |
- should(channelData, 'Channel #0').containValues([2.25, 1.5]); |
- should(valueChangeIndex, 'The index of value change') |
- .beEqualTo(disconnectIndex); |
- |
- }).then(() => task.done()); |
- }); |
- |
- // Task 2: test disconnect(AudioParam, output) method. |
- audit.define('disconnect(AudioParam, output)', (task, should) => { |
- |
- // Create a 2-channel buffer source with [1, 2] in each channel and |
- // make a serial connection through gain1 and gain 2. The make the buffer |
- // source half with a gain node and connect it to a 2-output splitter. |
- // Connect each output to 2 gain AudioParams respectively. |
- // |
- // (1) bufferSource => gain1 => gain2 |
- // (2) bufferSource => half => splitter(2) |
- // (3) splitter#0 => gain1.gain |
- // (4) splitter#1 => gain2.gain |
- // |
- // This graph should produce 3 (= 1 * 1.5 * 2) and 6 (= 2 * 1.5 * 2) for |
- // each channel. After disconnecting (4), it should output 1.5 and 3. |
- var context = new OfflineAudioContext(2, renderDuration * sampleRate, sampleRate); |
- var source = context.createBufferSource(); |
- var buffer2ch = createConstantBuffer(context, 1, [1, 2]); |
- var splitter = context.createChannelSplitter(2); |
- var half = context.createGain(); |
- var gain1 = context.createGain(); |
- var gain2 = context.createGain(); |
- |
- source.buffer = buffer2ch; |
- source.loop = true; |
- half.gain.value = 0.5; |
- |
- source.connect(gain1); |
- gain1.connect(gain2); |
- gain2.connect(context.destination); |
- |
- // |source| originally is [1, 2] but it becomes [0.5, 1] after 0.5 gain. |
- // Each splitter's output will be applied to |gain1.gain| and |gain2.gain| |
- // respectively in an additive fashion. |
- source.connect(half); |
- half.connect(splitter); |
- |
- // This amplifies the signal by 1.5. (= 1.0 + 0.5) |
- splitter.connect(gain1.gain, 0); |
- |
- // This amplifies the signal by 2. (= 1.0 + 1.0) |
- splitter.connect(gain2.gain, 1); |
- |
- source.start(); |
- |
- // Schedule the disconnection at the half of render duration. |
- context.suspend(disconnectTime).then(function () { |
- splitter.disconnect(gain2.gain, 1); |
- context.resume(); |
+ // Task 2: test disconnect(AudioParam, output) method. |
+ audit.define('disconnect(AudioParam, output)', (task, should) => { |
+ |
+ // Create a 2-channel buffer source with [1, 2] in each channel and |
+ // make a serial connection through gain1 and gain 2. The make the |
+ // buffer source half with a gain node and connect it to a 2-output |
+ // splitter. Connect each output to 2 gain AudioParams respectively. |
+ // |
+ // (1) bufferSource => gain1 => gain2 |
+ // (2) bufferSource => half => splitter(2) |
+ // (3) splitter#0 => gain1.gain |
+ // (4) splitter#1 => gain2.gain |
+ // |
+ // This graph should produce 3 (= 1 * 1.5 * 2) and 6 (= 2 * 1.5 * 2) for |
+ // each channel. After disconnecting (4), it should output 1.5 and 3. |
+ let context = |
+ new OfflineAudioContext(2, renderDuration * sampleRate, sampleRate); |
+ let source = context.createBufferSource(); |
+ let buffer2ch = createConstantBuffer(context, 1, [1, 2]); |
+ let splitter = context.createChannelSplitter(2); |
+ let half = context.createGain(); |
+ let gain1 = context.createGain(); |
+ let gain2 = context.createGain(); |
+ |
+ source.buffer = buffer2ch; |
+ source.loop = true; |
+ half.gain.value = 0.5; |
+ |
+ source.connect(gain1); |
+ gain1.connect(gain2); |
+ gain2.connect(context.destination); |
+ |
+ // |source| originally is [1, 2] but it becomes [0.5, 1] after 0.5 gain. |
+ // Each splitter's output will be applied to |gain1.gain| and |
+ // |gain2.gain| respectively in an additive fashion. |
+ source.connect(half); |
+ half.connect(splitter); |
+ |
+ // This amplifies the signal by 1.5. (= 1.0 + 0.5) |
+ splitter.connect(gain1.gain, 0); |
+ |
+ // This amplifies the signal by 2. (= 1.0 + 1.0) |
+ splitter.connect(gain2.gain, 1); |
+ |
+ source.start(); |
+ |
+ // Schedule the disconnection at the half of render duration. |
+ context.suspend(disconnectTime).then(function() { |
+ splitter.disconnect(gain2.gain, 1); |
+ context.resume(); |
+ }); |
+ |
+ context.startRendering() |
+ .then(function(buffer) { |
+ let channelData0 = buffer.getChannelData(0); |
+ let channelData1 = buffer.getChannelData(1); |
+ |
+ let disconnectIndex = getDisconnectIndex(disconnectTime); |
+ let valueChangeIndexCh0 = getValueChangeIndex(channelData0, 1.5); |
+ let valueChangeIndexCh1 = getValueChangeIndex(channelData1, 3); |
+ |
+ // Expected values are: 1 * 1.5 * 2 -> 1 * 1.5 = [3, 1.5] |
+ should(channelData0, 'Channel #0').containValues([3, 1.5]); |
+ should( |
+ valueChangeIndexCh0, |
+ 'The index of value change in channel #0') |
+ .beEqualTo(disconnectIndex); |
+ |
+ // Expected values are: 2 * 1.5 * 2 -> 2 * 1.5 = [6, 3] |
+ should(channelData1, 'Channel #1').containValues([6, 3]); |
+ should( |
+ valueChangeIndexCh1, |
+ 'The index of value change in channel #1') |
+ .beEqualTo(disconnectIndex); |
+ |
+ }) |
+ .then(() => task.done()); |
}); |
- context.startRendering().then(function (buffer) { |
- var channelData0 = buffer.getChannelData(0); |
- var channelData1 = buffer.getChannelData(1); |
- |
- var disconnectIndex = getDisconnectIndex(disconnectTime); |
- var valueChangeIndexCh0 = getValueChangeIndex(channelData0, 1.5); |
- var valueChangeIndexCh1 = getValueChangeIndex(channelData1, 3); |
- |
- // Expected values are: 1 * 1.5 * 2 -> 1 * 1.5 = [3, 1.5] |
- should(channelData0, 'Channel #0').containValues([3, 1.5]); |
- should(valueChangeIndexCh0, 'The index of value change in channel #0') |
- .beEqualTo(disconnectIndex); |
- |
- // Expected values are: 2 * 1.5 * 2 -> 2 * 1.5 = [6, 3] |
- should(channelData1, 'Channel #1').containValues([6, 3]); |
- should(valueChangeIndexCh1, 'The index of value change in channel #1') |
- .beEqualTo(disconnectIndex); |
- |
- }).then(() => task.done()); |
- }); |
- |
- // Task 3: exception checks. |
- audit.define('exceptions', (task, should) => { |
- var context = new AudioContext(); |
- var gain1 = context.createGain(); |
- var splitter = context.createChannelSplitter(2); |
- var gain2 = context.createGain(); |
- var gain3 = context.createGain(); |
- |
- // Connect a splitter to gain nodes and merger so we can test the possible |
- // ways of disconnecting the nodes to verify that appropriate exceptions |
- // are thrown. |
- gain1.connect(splitter); |
- splitter.connect(gain2.gain, 0); |
- splitter.connect(gain3.gain, 1); |
- gain2.connect(gain3); |
- gain3.connect(context.destination); |
- |
- // gain1 is not connected to gain3.gain. Exception should be thrown. |
- should(function () { |
- gain1.disconnect(gain3.gain); |
- }, 'gain1.disconnect(gain3.gain)').throw('InvalidAccessError'); |
- |
- // When the output index is good but the destination is invalid. |
- should(function () { |
- splitter.disconnect(gain1.gain, 1); |
- }, 'splitter.disconnect(gain1.gain, 1)').throw('InvalidAccessError'); |
- |
- // When both arguments are wrong, throw IndexSizeError first. |
- should(function () { |
- splitter.disconnect(gain1.gain, 2); |
- }, 'splitter.disconnect(gain1.gain, 2)').throw('IndexSizeError'); |
- |
- task.done(); |
- }); |
- |
- audit.run(); |
- </script> |
-</body> |
+ // Task 3: exception checks. |
+ audit.define('exceptions', (task, should) => { |
+ let context = new AudioContext(); |
+ let gain1 = context.createGain(); |
+ let splitter = context.createChannelSplitter(2); |
+ let gain2 = context.createGain(); |
+ let gain3 = context.createGain(); |
+ |
+ // Connect a splitter to gain nodes and merger so we can test the |
+ // possible ways of disconnecting the nodes to verify that appropriate |
+ // exceptions are thrown. |
+ gain1.connect(splitter); |
+ splitter.connect(gain2.gain, 0); |
+ splitter.connect(gain3.gain, 1); |
+ gain2.connect(gain3); |
+ gain3.connect(context.destination); |
+ |
+ // gain1 is not connected to gain3.gain. Exception should be thrown. |
+ should(function() { |
+ gain1.disconnect(gain3.gain); |
+ }, 'gain1.disconnect(gain3.gain)').throw('InvalidAccessError'); |
+ |
+ // When the output index is good but the destination is invalid. |
+ should(function() { |
+ splitter.disconnect(gain1.gain, 1); |
+ }, 'splitter.disconnect(gain1.gain, 1)').throw('InvalidAccessError'); |
+ |
+ // When both arguments are wrong, throw IndexSizeError first. |
+ should(function() { |
+ splitter.disconnect(gain1.gain, 2); |
+ }, 'splitter.disconnect(gain1.gain, 2)').throw('IndexSizeError'); |
+ |
+ task.done(); |
+ }); |
+ audit.run(); |
+ </script> |
+ </body> |
</html> |