| <!DOCTYPE html> |
| <html> |
| <head> |
| <title> |
| Test Constructor: StereoPanner |
| </title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/webaudio/resources/audit-util.js"></script> |
| <script src="/webaudio/resources/audit.js"></script> |
| <script src="/webaudio/resources/audionodeoptions.js"></script> |
| </head> |
| <body> |
| <script id="layout-test-code"> |
| let context; |
| |
| let audit = Audit.createTaskRunner(); |
| |
| audit.define('initialize', (task, should) => { |
| context = initializeContext(should); |
| task.done(); |
| }); |
| |
| audit.define('invalid constructor', (task, should) => { |
| testInvalidConstructor(should, 'StereoPannerNode', context); |
| task.done(); |
| }); |
| |
| audit.define('default constructor', (task, should) => { |
| let prefix = 'node0'; |
| let node = testDefaultConstructor(should, 'StereoPannerNode', context, { |
| prefix: prefix, |
| numberOfInputs: 1, |
| numberOfOutputs: 1, |
| channelCount: 2, |
| channelCountMode: 'clamped-max', |
| channelInterpretation: 'speakers' |
| }); |
| |
| testDefaultAttributes(should, node, prefix, [{name: 'pan', value: 0}]); |
| |
| task.done(); |
| }); |
| |
| audit.define('test AudioNodeOptions', (task, should) => { |
| // Can't use testAudioNodeOptions because the constraints for this node |
| // are not supported there. |
| let node; |
| |
| // An array of tests. |
| [{ |
| // Test that we can set the channel count to 1 or 2 and that other |
| // channel counts throw an error. |
| attribute: 'channelCount', |
| tests: [ |
| {value: 1}, {value: 2}, {value: 0, error: 'NotSupportedError'}, |
| {value: 3, error: 'NotSupportedError'}, |
| {value: 99, error: 'NotSupportedError'} |
| ] |
| }, |
| { |
| // Test channelCountMode. A mode of "max" is illegal, but others are |
| // ok. But also throw an error of unknown values. |
| attribute: 'channelCountMode', |
| tests: [ |
| {value: 'clamped-max'}, {value: 'explicit'}, |
| {value: 'max', error: 'NotSupportedError'}, |
| {value: 'foobar', error: TypeError} |
| ] |
| }, |
| { |
| // Test channelInterpretation can be set for valid values and an |
| // error is thrown for others. |
| attribute: 'channelInterpretation', |
| tests: [ |
| {value: 'speakers'}, {value: 'discrete'}, |
| {value: 'foobar', error: TypeError} |
| ] |
| }].forEach(entry => { |
| entry.tests.forEach(testItem => { |
| let options = {}; |
| options[entry.attribute] = testItem.value; |
| |
| const testFunction = () => { |
| node = new StereoPannerNode(context, options); |
| }; |
| const testDescription = |
| `new StereoPannerNode(c, ${JSON.stringify(options)})`; |
| |
| if (testItem.error) { |
| testItem.error === TypeError |
| ? should(testFunction, testDescription).throw(TypeError) |
| : should(testFunction, testDescription) |
| .throw(DOMException, 'NotSupportedError'); |
| } else { |
| should(testFunction, testDescription).notThrow(); |
| should(node[entry.attribute], `node.${entry.attribute}`) |
| .beEqualTo(options[entry.attribute]); |
| } |
| }); |
| }); |
| |
| task.done(); |
| }); |
| |
| audit.define('constructor with options', (task, should) => { |
| let node; |
| let options = { |
| pan: 0.75, |
| }; |
| |
| should( |
| () => { |
| node = new StereoPannerNode(context, options); |
| }, |
| 'node1 = new StereoPannerNode(, ' + JSON.stringify(options) + ')') |
| .notThrow(); |
| should( |
| node instanceof StereoPannerNode, |
| 'node1 instanceof StereoPannerNode') |
| .beEqualTo(true); |
| |
| should(node.pan.value, 'node1.pan.value').beEqualTo(options.pan); |
| |
| task.done(); |
| }); |
| |
| audit.run(); |
| </script> |
| </body> |
| </html> |