| Index: third_party/WebKit/LayoutTests/webaudio/constructor/audionodeoptions.js
|
| diff --git a/third_party/WebKit/LayoutTests/webaudio/constructor/audionodeoptions.js b/third_party/WebKit/LayoutTests/webaudio/constructor/audionodeoptions.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4eb175f78a7ea569e4b4ed05f9d7bd60dd0589fa
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/webaudio/constructor/audionodeoptions.js
|
| @@ -0,0 +1,184 @@
|
| +// Test that constructor for the node with name |nodeName| handles the various
|
| +// possible values for channelCount, channelCountMode, and
|
| +// channelInterpretation.
|
| +function testAudioNodeOptions(context, nodeName, nodeOptions) {
|
| + if (nodeOptions === undefined)
|
| + nodeOptions = {};
|
| + var node;
|
| + var success = true;
|
| +
|
| + // Test that we can set channelCount and that errors are thrown for invalid values
|
| + var testCount = 17;
|
| + if (nodeOptions.expectedChannelCount) {
|
| + testCount = nodeOptions.expectedChannelCount.value;
|
| + }
|
| + success = Should("new " + nodeName + "(c, {channelCount: " + testCount + "}}",
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelCount: testCount
|
| + }));
|
| + }).notThrow();
|
| + success = Should("node.channelCount", node.channelCount)
|
| + .beEqualTo(testCount) && success;
|
| +
|
| + if (nodeOptions.expectedChannelCount && nodeOptions.expectedChannelCount.isFixed) {
|
| + // The channel count is fixed. Verify that we throw an error if we try to
|
| + // change it. Arbitrarily set the count to be one more than the expected
|
| + // value.
|
| + testCount = nodeOptions.expectedChannelCount.value + 1;
|
| + success = Should("new " + nodeName + "(c, {channelCount: " + testCount + "}}",
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelCount: testCount
|
| + }));
|
| + }).throw(nodeOptions.expectedChannelCount.errorType || "TypeError") && success;
|
| + } else {
|
| + // The channel count is not fixed. Try to set the count to invalid
|
| + // values and make sure an error is thrown.
|
| + var errorType = "NotSupportedError";
|
| +
|
| + success = Should("new " + nodeName + "(c, {channelCount: 0}}",
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelCount: 0
|
| + }));
|
| + }).throw(errorType) && success;
|
| +
|
| + success = Should("new " + nodeName + "(c, {channelCount: 99}}",
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelCount: 99
|
| + }));
|
| + }).throw(errorType) && success;
|
| + }
|
| +
|
| + // Test channelCountMode
|
| + var testMode = "max";
|
| + if (nodeOptions && nodeOptions.expectedChannelCountMode) {
|
| + testMode = nodeOptions.expectedChannelCountMode.value;
|
| + }
|
| + success = Should("new " + nodeName + '(c, {channelCountMode: "' + testMode + '"}',
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelCountMode: testMode
|
| + }));
|
| + }).notThrow() && success;
|
| + success = Should("node.channelCountMode", node.channelCountMode)
|
| + .beEqualTo(testMode) && success;
|
| +
|
| + if (nodeOptions.expectedChannelCountMode && nodeOptions.expectedChannelCountMode.isFixed) {
|
| + // Channel count mode is fixed. Test setting to something else throws.
|
| + var testModeMap = {
|
| + "max": "clamped-max",
|
| + "clamped-max": "explicit",
|
| + "explicit": "max"
|
| + };
|
| + testMode = testModeMap[nodeOptions.expectedChannelCountMode.value];
|
| + success = Should("new " + nodeName + '(c, {channelCountMode: "' + testMode + '"}',
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelCountMode: testMode
|
| + }));
|
| + }).throw(nodeOptions.expectedChannelCountMode.errorType) && success;
|
| + } else {
|
| + // Mode is not fixed. Verify that we can set the mode to all valid
|
| + // values, and that we throw for invalid values.
|
| +
|
| + success = Should("new " + nodeName + '(c, {channelCountMode: "clamped-max"}',
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelCountMode: "clamped-max"
|
| + }));
|
| + }).notThrow() && success;
|
| + success = Should("node.channelCountMode", node.channelCountMode)
|
| + .beEqualTo("clamped-max") && success;
|
| +
|
| + success = Should("new " + nodeName + '(c, {channelCountMode: "explicit"}',
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelCountMode: "explicit"
|
| + }));
|
| + }).notThrow() && success;
|
| + success = Should("node.channelCountMode", node.channelCountMode)
|
| + .beEqualTo("explicit") && success;
|
| +
|
| + success = Should("new " + nodeName + '(c, {channelCountMode: "foobar"}',
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelCountMode: "foobar"
|
| + }));
|
| + }).throw("TypeError") && success;
|
| + success = Should("node.channelCountMode", node.channelCountMode)
|
| + .beEqualTo("explicit") && success;
|
| + }
|
| +
|
| + // Test channelInterpretation
|
| + success = Should("new " + nodeName + '(c, {channelInterpretation: "speakers"})',
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelInterpretation: "speakers"
|
| + }));
|
| + }).notThrow() && success;
|
| + success = Should("node.channelInterpretation", node.channelInterpretation)
|
| + .beEqualTo("speakers") && success;
|
| +
|
| + success = Should("new " + nodeName + '(c, {channelInterpretation: "discrete"})',
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelInterpretation: "discrete"
|
| + }));
|
| + }).notThrow() && success;
|
| + success = Should("node.channelInterpretation", node.channelInterpretation)
|
| + .beEqualTo("discrete") && success;
|
| +
|
| + success = Should("new " + nodeName + '(c, {channelInterpretation: "foobar"})',
|
| + function () {
|
| + node = new window[nodeName](
|
| + context,
|
| + Object.assign({},
|
| + nodeOptions.additionalOptions, {
|
| + channelInterpretation: "foobar"
|
| + }));
|
| + }).throw("TypeError") && success;
|
| + success = Should("node.channelInterpretation", node.channelInterpretation)
|
| + .beEqualTo("discrete") && success;
|
| +
|
| +
|
| + Should("AudioNodeOptions for " + nodeName, success)
|
| + .summarize(
|
| + "were correctly handled",
|
| + "were not correctly handled");
|
| +}
|
|
|