Index: third_party/WebKit/LayoutTests/webaudio/Panner/panner-automation-basic.html |
diff --git a/third_party/WebKit/LayoutTests/webaudio/Panner/panner-automation-basic.html b/third_party/WebKit/LayoutTests/webaudio/Panner/panner-automation-basic.html |
index 2b28607fa70e9cad6d03cfe724da65d0a598a45a..b34e47c697b1dfc95fcc70d7c52eb91239c4a65c 100644 |
--- a/third_party/WebKit/LayoutTests/webaudio/Panner/panner-automation-basic.html |
+++ b/third_party/WebKit/LayoutTests/webaudio/Panner/panner-automation-basic.html |
@@ -4,7 +4,7 @@ |
<script src="../../resources/testharness.js"></script> |
<script src="../../resources/testharnessreport.js"></script> |
<script src="../resources/audit-util.js"></script> |
- <script src="../resources/audio-testing.js"></script> |
+ <script src="../resources/audit.js"></script> |
<script src="../resources/panner-formulas.js"></script> |
<title>Test Basic PannerNode with Automation Position Properties</title> |
</head> |
@@ -13,186 +13,226 @@ |
<script> |
var sampleRate = 48000; |
- // These tests are quite slow, so don't run for many frames. 256 frames should be enough to |
- // demonstrate that automations are working. |
+ // These tests are quite slow, so don't run for many frames. 256 frames |
+ // should be enough to demonstrate that automations are working. |
var renderFrames = 256; |
var renderDuration = renderFrames / sampleRate; |
var audit = Audit.createTaskRunner(); |
- // Array of tests for setting the panner positions. These tests basically verify that the |
- // position setters for the panner and listener are working correctly. |
- var testConfig = [{ |
- setter: "positionX", |
- }, { |
- setter: "positionY", |
- }, { |
- setter: "positionZ", |
- }]; |
- |
- // Create tests for the panner position setters. Both mono and steroe sources are tested. |
+ // Array of tests for setting the panner positions. These tests basically |
+ // verify that the position setters for the panner and listener are |
+ // working correctly. |
+ var testConfig = [ |
+ { |
+ setter: 'positionX', |
+ }, |
+ { |
+ setter: 'positionY', |
+ }, |
+ { |
+ setter: 'positionZ', |
+ } |
+ ]; |
+ |
+ // Create tests for the panner position setters. Both mono and steroe |
+ // sources are tested. |
for (var k = 0; k < testConfig.length; ++k) { |
var config = testConfig[k]; |
// Function to create the test to define the test. |
- var tester = function (config, channelCount) { |
- return function (done) { |
+ var tester = |
+ function(config, channelCount) { |
+ return (task, should) => { |
var nodes = createGraph(channelCount); |
var {context, source, panner} = nodes; |
- var message = channelCount == 1 ? "Mono" : "Stereo"; |
- message += " panner." + config.setter; |
+ var message = channelCount == 1 ? 'Mono' : 'Stereo'; |
+ message += ' panner.' + config.setter; |
- testPositionSetter({ |
+ testPositionSetter(should, { |
nodes: nodes, |
pannerSetter: panner[config.setter], |
message: message |
- }).then(done); |
+ }).then(() => task.done()); |
} |
} |
- audit.defineTask("Stereo panner." + config.setter, tester(config, 2)); |
- audit.defineTask("Mono panner." + config.setter, tester(config, 1)); |
+ audit.define('Stereo panner.' + config.setter, tester(config, 2)); |
hongchan
2017/05/03 15:46:57
Hmm. This is really weird.
Raymond Toy
2017/05/03 16:33:21
clang-format gets confused if the preceeding line
|
+ audit.define('Mono panner.' + config.setter, tester(config, 1)); |
} |
- |
- // Create tests for the listener position setters. Both mono and steroe sources are tested. |
+ |
+ // Create tests for the listener position setters. Both mono and steroe |
+ // sources are tested. |
for (var k = 0; k < testConfig.length; ++k) { |
var config = testConfig[k]; |
// Function to create the test to define the test. |
- var tester = function (config, channelCount) { |
- return function (done) { |
+ var tester = function(config, channelCount) { |
+ return (task, should) => { |
var nodes = createGraph(channelCount); |
var {context, source, panner} = nodes; |
- var message = channelCount == 1 ? "Mono" : "Stereo"; |
- message += " listener." + config.setter; |
+ var message = channelCount == 1 ? 'Mono' : 'Stereo'; |
+ message += ' listener.' + config.setter; |
- // Some relatively arbitrary (non-default) position for the source location. |
- panner.setPosition(1,0,1); |
+ // Some relatively arbitrary (non-default) position for the source |
+ // location. |
+ panner.setPosition(1, 0, 1); |
- testPositionSetter({ |
+ testPositionSetter(should, { |
nodes: nodes, |
pannerSetter: context.listener[config.setter], |
message: message |
- }).then(done); |
+ }).then(() => task.done()); |
} |
- } |
+ }; |
- audit.defineTask("Stereo listener." + config.setter, tester(config, 2)); |
- audit.defineTask("Mono listener." + config.setter, tester(config, 1)); |
+ audit.define('Stereo listener.' + config.setter, tester(config, 2)); |
+ audit.define('Mono listener.' + config.setter, tester(config, 1)); |
} |
// Test setPosition method. |
- audit.defineTask("setPosition", function (done) { |
+ audit.define('setPosition', (task, should) => { |
var {context, panner, source} = createGraph(2); |
// Initialize source position (values don't really matter). |
- panner.setPosition(1,1,1); |
+ panner.setPosition(1, 1, 1); |
- // After some (unimportant) time, move the panner to a (any) new location. |
+ // After some (unimportant) time, move the panner to a (any) new |
+ // location. |
var suspendFrame = 128; |
- context.suspend(suspendFrame / sampleRate).then(function () { |
- panner.setPosition(-100, 2000, 8000); |
- }).then(context.resume.bind(context)); |
- |
- context.startRendering().then(function (resultBuffer) { |
- verifyPannerOutputChanged(resultBuffer, {message: "setPosition", suspendFrame: suspendFrame}); |
- }).then(done); |
+ context.suspend(suspendFrame / sampleRate) |
+ .then(function() { |
+ panner.setPosition(-100, 2000, 8000); |
+ }) |
+ .then(context.resume.bind(context)); |
+ |
+ context.startRendering() |
+ .then(function(resultBuffer) { |
+ verifyPannerOutputChanged( |
+ should, resultBuffer, |
+ {message: 'setPosition', suspendFrame: suspendFrame}); |
+ }) |
+ .then(() => task.done()); |
}); |
- audit.defineTask("orientation setter", function (done) { |
+ audit.define('orientation setter', (task, should) => { |
var {context, panner, source} = createGraph(2); |
- // For orientation to matter, we need to make the source directional, and also move away |
- // from the listener (because the default location is 0,0,0). |
- panner.setPosition(0,0,1); |
+ // For orientation to matter, we need to make the source directional, |
+ // and also move away from the listener (because the default location is |
+ // 0,0,0). |
+ panner.setPosition(0, 0, 1); |
panner.coneInnerAngle = 0; |
panner.coneOuterAngle = 360; |
panner.coneOuterGain = .001; |
- // After some (unimportant) time, change the panner orientation to a new orientation. The |
- // only constraint is that the orientation changes from before. |
+ // After some (unimportant) time, change the panner orientation to a new |
+ // orientation. The only constraint is that the orientation changes |
+ // from before. |
var suspendFrame = 128; |
- context.suspend(suspendFrame / sampleRate).then(function () { |
- panner.orientationX.value = -100; |
- panner.orientationY.value = 2000; |
- panner.orientationZ.value = 8000; |
- }).then(context.resume.bind(context)); |
- |
- context.startRendering().then(function (resultBuffer) { |
- verifyPannerOutputChanged(resultBuffer, {message: "panner.orientation{XYZ}", suspendFrame: suspendFrame}); |
- }).then(done); |
+ context.suspend(suspendFrame / sampleRate) |
+ .then(function() { |
+ panner.orientationX.value = -100; |
+ panner.orientationY.value = 2000; |
+ panner.orientationZ.value = 8000; |
+ }) |
+ .then(context.resume.bind(context)); |
+ |
+ context.startRendering() |
+ .then(function(resultBuffer) { |
+ verifyPannerOutputChanged(should, resultBuffer, { |
+ message: 'panner.orientation{XYZ}', |
+ suspendFrame: suspendFrame |
+ }); |
+ }) |
+ .then(() => task.done()); |
}); |
- audit.defineTask("forward setter", function (done) { |
+ audit.define('forward setter', (task, should) => { |
var {context, panner, source} = createGraph(2); |
- // For orientation to matter, we need to make the source directional, and also move away |
- // from the listener (because the default location is 0,0,0). |
- panner.setPosition(0,0,1); |
+ // For orientation to matter, we need to make the source directional, |
+ // and also move away from the listener (because the default location is |
+ // 0,0,0). |
+ panner.setPosition(0, 0, 1); |
panner.coneInnerAngle = 0; |
panner.coneOuterAngle = 360; |
panner.coneOuterGain = .001; |
- // After some (unimportant) time, change the panner orientation to a new orientation. The |
- // only constraint is that the orientation changes from before. |
+ // After some (unimportant) time, change the panner orientation to a new |
+ // orientation. The only constraint is that the orientation changes |
+ // from before. |
var suspendFrame = 128; |
- context.suspend(suspendFrame / sampleRate).then(function () { |
- context.listener.forwardX.value = -100; |
- context.listener.forwardY.value = 2000; |
- context.listener.forwardZ.value = 8000; |
- }).then(context.resume.bind(context)); |
- |
- context.startRendering().then(function (resultBuffer) { |
- verifyPannerOutputChanged(resultBuffer, {message: "listener.forward{XYZ}", suspendFrame: suspendFrame}); |
- }).then(done); |
+ context.suspend(suspendFrame / sampleRate) |
+ .then(function() { |
+ context.listener.forwardX.value = -100; |
+ context.listener.forwardY.value = 2000; |
+ context.listener.forwardZ.value = 8000; |
+ }) |
+ .then(context.resume.bind(context)); |
+ |
+ context.startRendering() |
+ .then(function(resultBuffer) { |
+ verifyPannerOutputChanged(should, resultBuffer, { |
+ message: 'listener.forward{XYZ}', |
+ suspendFrame: suspendFrame |
+ }); |
+ }) |
+ .then(() => task.done()); |
}); |
- audit.defineTask("up setter", function (done) { |
+ audit.define('up setter', (task, should) => { |
var {context, panner, source} = createGraph(2); |
- // For orientation to matter, we need to make the source directional, and also move away |
- // from the listener (because the default location is 0,0,0). |
- panner.setPosition(0,0,1); |
+ // For orientation to matter, we need to make the source directional, |
+ // and also move away from the listener (because the default location is |
+ // 0,0,0). |
+ panner.setPosition(0, 0, 1); |
panner.coneInnerAngle = 0; |
panner.coneOuterAngle = 360; |
panner.coneOuterGain = .001; |
- panner.setPosition(1,0,1); |
+ panner.setPosition(1, 0, 1); |
- // After some (unimportant) time, change the panner orientation to a new orientation. The |
- // only constraint is that the orientation changes from before. |
+ // After some (unimportant) time, change the panner orientation to a new |
+ // orientation. The only constraint is that the orientation changes |
+ // from before. |
var suspendFrame = 128; |
- context.suspend(suspendFrame / sampleRate).then(function () { |
- context.listener.upX.value = 100; |
- context.listener.upY.value = 100; |
- context.listener.upZ.value = 100;; |
- }).then(context.resume.bind(context)); |
- |
- context.startRendering().then(function (resultBuffer) { |
- verifyPannerOutputChanged(resultBuffer, {message: "listener.up{XYZ}", suspendFrame: suspendFrame}); |
- }).then(done); |
+ context.suspend(suspendFrame / sampleRate) |
+ .then(function() { |
+ context.listener.upX.value = 100; |
+ context.listener.upY.value = 100; |
+ context.listener.upZ.value = 100; |
+ ; |
+ }) |
+ .then(context.resume.bind(context)); |
+ |
+ context.startRendering() |
+ .then(function(resultBuffer) { |
+ verifyPannerOutputChanged( |
+ should, resultBuffer, |
+ {message: 'listener.up{XYZ}', suspendFrame: suspendFrame}); |
+ }) |
+ .then(() => task.done()); |
}); |
- audit.runTasks(); |
+ audit.run(); |
function createGraph(channelCount) { |
var context = new OfflineAudioContext(2, renderFrames, sampleRate); |
var panner = context.createPanner(); |
var source = context.createBufferSource(); |
- source.buffer = createConstantBuffer(context, 1, channelCount == 1 ? 1 : [1, 2]); |
+ source.buffer = |
+ createConstantBuffer(context, 1, channelCount == 1 ? 1 : [1, 2]); |
source.loop = true; |
source.connect(panner); |
panner.connect(context.destination); |
source.start(); |
- return { |
- context: context, |
- source: source, |
- panner: panner |
- }; |
+ return {context: context, source: source, panner: panner}; |
} |
- function testPositionSetter(options) { |
+ function testPositionSetter(should, options) { |
var {nodes, pannerSetter, message} = options; |
var {context, source, panner} = nodes; |
@@ -200,46 +240,58 @@ |
// Set panner x position. (Value doesn't matter); |
pannerSetter.value = 1; |
- // Wait a bit and set a new position. (Actual time and position doesn't matter). |
+ // Wait a bit and set a new position. (Actual time and position doesn't |
+ // matter). |
var suspendFrame = 128; |
- context.suspend(suspendFrame / sampleRate).then(function () { |
- pannerSetter.value = 10000; |
- }).then(context.resume.bind(context)); |
- |
- return context.startRendering().then(function (resultBuffer) { |
- verifyPannerOutputChanged(resultBuffer, {message: message, suspendFrame: suspendFrame}); |
+ context.suspend(suspendFrame / sampleRate) |
+ .then(function() { |
+ pannerSetter.value = 10000; |
+ }) |
+ .then(context.resume.bind(context)); |
+ |
+ return context.startRendering().then(function(resultBuffer) { |
+ verifyPannerOutputChanged( |
+ should, resultBuffer, |
+ {message: message, suspendFrame: suspendFrame}); |
}); |
} |
- function verifyPannerOutputChanged(resultBuffer, options) { |
+ function verifyPannerOutputChanged(should, resultBuffer, options) { |
var {message, suspendFrame} = options; |
- // Verify that the first part of output is constant. (Doesn't matter what.) |
- var success = true; |
- var data0 = resultBuffer.getChannelData(0); |
- var data1 = resultBuffer.getChannelData(1); |
- |
- var middle = "[0, " + suspendFrame + ") "; |
- success = Should(message + ".value frame " + middle + "channel 0", data0.slice(0, suspendFrame)) |
- .beConstantValueOf(data0[0]) && success; |
- success = Should(message + ".value frame " + middle + "channel 1", data1.slice(0, suspendFrame)) |
- .beConstantValueOf(data1[0]) && success; |
- |
- // The rest after suspendTime should be constant and different from the first part. |
- middle = "[" + suspendFrame + ", " + renderFrames + ") "; |
- success = Should(message + ".value frame " + middle + "channel 0", |
- data0.slice(suspendFrame)) |
- .beConstantValueOf(data0[suspendFrame]) && success; |
- success = Should(message + ".value frame " + middle + "channel 1", |
- data1.slice(suspendFrame)) |
- .beConstantValueOf(data1[suspendFrame]) && success; |
- success = Should(message + ": Output at frame " + suspendFrame + " channel 0", data0[suspendFrame]) |
- .notBeEqualTo(data0[0]) && success; |
- success = Should(message + ": Output at frame " + suspendFrame + " channel 1", data1[suspendFrame]) |
- .notBeEqualTo(data1[0]) && success; |
- |
- var prefix = "Directly setting " + message + ".value"; |
- Should(prefix, success) |
- .summarize("worked", "failed"); |
+ // Verify that the first part of output is constant. (Doesn't matter |
+ // what.) |
+ var data0 = resultBuffer.getChannelData(0); |
+ var data1 = resultBuffer.getChannelData(1); |
+ |
+ var middle = '[0, ' + suspendFrame + ') '; |
+ should( |
+ data0.slice(0, suspendFrame), |
+ message + '.value frame ' + middle + 'channel 0') |
+ .beConstantValueOf(data0[0]); |
+ should( |
+ data1.slice(0, suspendFrame), |
+ message + '.value frame ' + middle + 'channel 1') |
+ .beConstantValueOf(data1[0]); |
+ |
+ // The rest after suspendTime should be constant and different from the |
+ // first part. |
+ middle = '[' + suspendFrame + ', ' + renderFrames + ') '; |
+ should( |
+ data0.slice(suspendFrame), |
+ message + '.value frame ' + middle + 'channel 0') |
+ .beConstantValueOf(data0[suspendFrame]); |
+ should( |
+ data1.slice(suspendFrame), |
+ message + '.value frame ' + middle + 'channel 1') |
+ .beConstantValueOf(data1[suspendFrame]); |
+ should( |
+ data0[suspendFrame], |
+ message + ': Output at frame ' + suspendFrame + ' channel 0') |
+ .notBeEqualTo(data0[0]); |
+ should( |
+ data1[suspendFrame], |
+ message + ': Output at frame ' + suspendFrame + ' channel 1') |
+ .notBeEqualTo(data1[0]); |
} |
</script> |
</body> |