| Index: third_party/WebKit/LayoutTests/webaudio/constructor/panner.html
|
| diff --git a/third_party/WebKit/LayoutTests/webaudio/constructor/panner.html b/third_party/WebKit/LayoutTests/webaudio/constructor/panner.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d8d3b0db815b2fb063555a0bda4a329d8c03b282
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/webaudio/constructor/panner.html
|
| @@ -0,0 +1,302 @@
|
| +<!doctype html>
|
| +<html>
|
| + <head>
|
| + <title>Test Constructor: Panner</title>
|
| + <script src="../../resources/testharness.js"></script>
|
| + <script src="../../resources/testharnessreport.js"></script>
|
| + <script src="../resources/audio-testing.js"></script>
|
| + </head>
|
| +
|
| + <body>
|
| + <script>
|
| + var context;
|
| +
|
| + var audit = Audit.createTaskRunner();
|
| +
|
| + audit.defineTask("initialize", function (taskDone) {
|
| + Should("context = new OfflineAudioContext(...)", function () {
|
| + context = new OfflineAudioContext(1, 1, 48000);
|
| + }).notThrow();
|
| +
|
| + taskDone();
|
| + });
|
| +
|
| + audit.defineTask("invalid constructor", function (taskDone) {
|
| + var node;
|
| + var success = true;
|
| +
|
| + success = Should("new PannerNode()", function () {
|
| + node = new PannerNode();
|
| + }).throw("TypeError");
|
| + success = Should("new PannerNode(1)", function () {
|
| + node = new PannerNode(1) && success;
|
| + }).throw("TypeError");
|
| + success = Should("new PannerNode(context, 42)", function () {
|
| + node = new PannerNode(context, 42) && success;
|
| + }).throw("TypeError");
|
| +
|
| + Should("Invalid constructors", success)
|
| + .summarize(
|
| + "correctly threw errors",
|
| + "did not throw errors in all cases");
|
| +
|
| + taskDone();
|
| + });
|
| +
|
| + audit.defineTask("default constructor", function (taskDone) {
|
| + var node;
|
| + var success = true;
|
| +
|
| + success = Should("node = new PannerNode(context)", function () {
|
| + node = new PannerNode(context);
|
| + }).notThrow();
|
| + success = Should("node instanceof PannerNode", node instanceof PannerNode)
|
| + .beEqualTo(true) && success;
|
| +
|
| + success = Should("node.panningModel", node.panningModel)
|
| + .beEqualTo("equalpower") && success;
|
| + success = Should("node.positionX.value", node.positionX.value)
|
| + .beEqualTo(0) && success;
|
| + success = Should("node.positionY.value", node.positionY.value)
|
| + .beEqualTo(0) && success;
|
| + success = Should("node.positionZ.value", node.positionZ.value)
|
| + .beEqualTo(0) && success;
|
| + success = Should("node.orientationX.value", node.orientationX.value)
|
| + .beEqualTo(1) && success;
|
| + success = Should("node.orientationY.value", node.orientationY.value)
|
| + .beEqualTo(0) && success;
|
| + success = Should("node.orientationZ.value", node.orientationZ.value)
|
| + .beEqualTo(0) && success;
|
| + success = Should("node.distanceModel", node.distanceModel)
|
| + .beEqualTo("inverse") && success;
|
| + success = Should("node.refDistance", node.refDistance)
|
| + .beEqualTo(1) && success;
|
| + success = Should("node.maxDistance", node.maxDistance)
|
| + .beEqualTo(10000) && success;
|
| + success = Should("node.rolloffFactor", node.rolloffFactor)
|
| + .beEqualTo(1) && success;
|
| + success = Should("node.coneInnerAngle", node.coneInnerAngle)
|
| + .beEqualTo(360) && success;
|
| + success = Should("node.coneOuterAngle", node.coneOuterAngle)
|
| + .beEqualTo(360) && success;
|
| + success = Should("node.coneOuterGain", node.coneOuterGain)
|
| + .beEqualTo(0) && success;
|
| +
|
| + // Test the listener too, while we're at it.
|
| + success = Should("context.listener.positionX.value", context.listener.positionX.value)
|
| + .beEqualTo(0) && success;
|
| + success = Should("context.listener.positionY.value", context.listener.positionY.value)
|
| + .beEqualTo(0) && success;
|
| + success = Should("context.listener.positionZ.value", context.listener.positionZ.value)
|
| + .beEqualTo(0) && success;
|
| + success = Should("context.listener.forwardX.value", context.listener.forwardX.value)
|
| + .beEqualTo(0) && success;
|
| + success = Should("context.listener.forwardY.value", context.listener.forwardY.value)
|
| + .beEqualTo(0) && success;
|
| + success = Should("context.listener.forwardZ.value", context.listener.forwardZ.value)
|
| + .beEqualTo(-1) && success;
|
| + success = Should("context.listener.upX.value", context.listener.upX.value)
|
| + .beEqualTo(0) && success;
|
| + success = Should("context.listener.upY.value", context.listener.upY.value)
|
| + .beEqualTo(1) && success;
|
| + success = Should("context.listener.upZ.value", context.listener.upZ.value)
|
| + .beEqualTo(0) && success;
|
| +
|
| + success = Should("node.channelCount", node.channelCount)
|
| + .beEqualTo(2) && success;
|
| + success = Should("node.channelCountMode", node.channelCountMode)
|
| + .beEqualTo("clamped-max") && success;
|
| + success = Should("node.channelInterpretation", node.channelInterpretation)
|
| + .beEqualTo("speakers") && success;
|
| +
|
| + Should("new PannerNode(context)", success)
|
| + .summarize(
|
| + "constructed node with correct attributes",
|
| + "did not construct correct node correctly")
|
| +
|
| + taskDone();
|
| + });
|
| +
|
| + audit.defineTask("test AudioNodeOptions", function (taskDone) {
|
| + // Can't use testAudioNodeOptions because the constraints for this node
|
| + // are not supported there.
|
| + var node;
|
| + var success = true;
|
| +
|
| + // Test that we can set the channel count to 1 or 2.
|
| + success = Should("new PannerNode(c, {channelCount: 1})",
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelCount: 1
|
| + });
|
| + }).notThrow() && success;
|
| + success = Should("node.channelCount", node.channelCount)
|
| + .beEqualTo(1) && success;
|
| +
|
| + success = Should("new PannerNode(c, {channelCount: 2})",
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelCount: 2
|
| + });
|
| + }).notThrow() && success;
|
| + success = Should("node.channelCount", node.channelCount)
|
| + .beEqualTo(2) && success;
|
| +
|
| + // Test that other channel counts throw an error
|
| + success = Should("new PannerNode(c, {channelCount: 0})",
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelCount: 0
|
| + });
|
| + }).throw("NotSupportedError") && success;
|
| + success = Should("new PannerNode(c, {channelCount: 3})",
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelCount: 3
|
| + });
|
| + }).throw("NotSupportedError") && success;
|
| + success = Should("new PannerNode(c, {channelCount: 99})",
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelCount: 99
|
| + });
|
| + }).throw("NotSupportedError") && success;
|
| +
|
| + // Test channelCountMode. A mode of "max" is illegal, but others are ok.
|
| + success = Should('new PannerNode(c, {channelCountMode: "clamped-max"})',
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelCountMode: "clamped-max"
|
| + });
|
| + }).notThrow() && success;
|
| + success = Should("node.channelCountMode", node.channelCountMode)
|
| + .beEqualTo("clamped-max") && success;
|
| +
|
| + success = Should('new PannerNode(c, {channelCountMode: "explicit"})',
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelCountMode: "explicit"
|
| + });
|
| + }).notThrow() && success;
|
| + success = Should("node.channelCountMode", node.channelCountMode)
|
| + .beEqualTo("explicit") && success;
|
| +
|
| + success = Should('new PannerNode(c, {channelCountMode: "max"})',
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelCountMode: "max"
|
| + });
|
| + }).throw("NotSupportedError") && success;
|
| + success = Should('new PannerNode(c, {channelCountMode: "foobar"})',
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelCountMode: "foobar"
|
| + });
|
| + }).throw("TypeError") && success;
|
| +
|
| + // Test channelInterpretation.
|
| + success = Should('new PannerNode(c, {channelInterpretation: "speakers"})',
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelInterpretation: "speakers"
|
| + });
|
| + }).notThrow() && success;
|
| + success = Should("node.channelInterpretation", node.channelInterpretation)
|
| + .beEqualTo("speakers") && success;
|
| + success = Should('new PannerNode(c, {channelInterpretation: "discrete"})',
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelInterpretation: "discrete"
|
| + });
|
| + }).notThrow() && success;
|
| + success = Should("node.channelInterpretation", node.channelInterpretation)
|
| + .beEqualTo("discrete") && success;
|
| + success = Should('new PannerNode(c, {channelInterpretation: "foobar"})',
|
| + function () {
|
| + node = new PannerNode(context, {
|
| + channelInterpretation: "foobar"
|
| + });
|
| + }).throw("TypeError") && success;
|
| +
|
| + Should("AudioNodeOptions for PannerNode", success)
|
| + .summarize(
|
| + "were correctly handled",
|
| + "were not correctly handled");
|
| +
|
| + taskDone();
|
| + });
|
| +
|
| + audit.defineTask("constructor with options", function (taskDone) {
|
| + var node;
|
| + var success = true;
|
| + var options = {
|
| + panningModel: "HRTF",
|
| + positionX: 3,
|
| + positionY: 4,
|
| + positionZ: 5,
|
| + orientationX: -3,
|
| + orientationY: -4,
|
| + orientationZ: -5,
|
| + distanceModel: "linear",
|
| + refDistance: 42,
|
| + maxDistance: 99,
|
| + rolloffFactor: .25,
|
| + coneInnerAngle: 10,
|
| + coneOuterAngle: 50,
|
| + coneOuterGain: .25
|
| + };
|
| +
|
| + success = Should("node = new PannerNode(context, <options>)", function () {
|
| + node = new PannerNode(context, options);
|
| + }).notThrow();
|
| + success = Should("node instanceof PannerNode", node instanceof PannerNode)
|
| + .beEqualTo(true) && success;
|
| +
|
| + success = Should("node.panningModel", node.panningModel)
|
| + .beEqualTo(options.panningModel) && success;
|
| + success = Should("node.positionX.value", node.positionX.value)
|
| + .beEqualTo(options.positionX) && success;
|
| + success = Should("node.positionY.value", node.positionY.value)
|
| + .beEqualTo(options.positionY) && success;
|
| + success = Should("node.positionZ.value", node.positionZ.value)
|
| + .beEqualTo(options.positionZ) && success;
|
| + success = Should("node.orientationX.value", node.orientationX.value)
|
| + .beEqualTo(options.orientationX) && success;
|
| + success = Should("node.orientationY.value", node.orientationY.value)
|
| + .beEqualTo(options.orientationY) && success;
|
| + success = Should("node.orientationZ.value", node.orientationZ.value)
|
| + .beEqualTo(options.orientationZ) && success;
|
| + success = Should("node.distanceModel", node.distanceModel)
|
| + .beEqualTo(options.distanceModel) && success;
|
| + success = Should("node.refDistance", node.refDistance)
|
| + .beEqualTo(options.refDistance) && success;
|
| + success = Should("node.maxDistance", node.maxDistance)
|
| + .beEqualTo(options.maxDistance) && success;
|
| + success = Should("node.rolloffFactor", node.rolloffFactor)
|
| + .beEqualTo(options.rolloffFactor) && success;
|
| + success = Should("node.coneInnerAngle", node.coneInnerAngle)
|
| + .beEqualTo(options.coneInnerAngle) && success;
|
| + success = Should("node.coneOuterAngle", node.coneOuterAngle)
|
| + .beEqualTo(options.coneOuterAngle) && success;
|
| + success = Should("node.coneOuterGain", node.coneOuterGain)
|
| + .beEqualTo(options.coneOuterGain) && success;
|
| +
|
| + success = Should("node.channelCount", node.channelCount)
|
| + .beEqualTo(2) && success;
|
| + success = Should("node.channelCountMode", node.channelCountMode)
|
| + .beEqualTo("clamped-max") && success;
|
| + success = Should("node.channelInterpretation", node.channelInterpretation)
|
| + .beEqualTo("speakers") && success;
|
| +
|
| + Should("new PannerNode() with options", success)
|
| + .summarize(
|
| + "constructed with correct attributes",
|
| + "was not constructed correctly");
|
| +
|
| + taskDone();
|
| + });
|
| +
|
| + audit.runTasks();
|
| + </script>
|
| + </body>
|
| +</html>
|
|
|