Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html - WPT Dashboard Interop Dashboard
<!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>