blob: e3d43bc220c7197752b7af1e2aafa4249713e921 [file] [log] [blame]
<!doctype html>
<html>
<head>
<title>
Test AudioListener.setPosition and AudioListener.setOrientation Errors
</title>
<script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../resources/audit-util.js"></script>
<script src="../resources/audit.js"></script>
<script src="../resources/set-position-vs-curve-test.js"></script>
</head>
<body>
<script id="layout-test-code">
// Fairly arbitrary rate
let sampleRate = 16000;
// For the tests we need to render for at least two render quanta.
// Otherwise, pretty arbitrary.
let renderFrames = 256;
let renderDuration = renderFrames / sampleRate;
// The curve duration for the test. Anything less than one render quantum
// is fine. Arbitrarily choose something small.
let curveDurationFrames = 8;
let curveDuration = curveDurationFrames / sampleRate;
// When to call setPosition, after the setValueCurve has ended. Any value
// after the end of the first render quantum is fine.
let suspendFrame = 129;
let audit = Audit.createTaskRunner();
// Array of tests to do. Each element of this array is used to create a
// task to test the entry.
let tests = [
// Test |setPosition| against |positionX|, |positionY|, and |positionZ|
// setValueCurves. Include test where there's overlap and where there
// isn't.
{
name: 'Listener setPosition X error',
options: {paramName: 'positionX', curveDuration: renderDuration}
},
{
name: 'Listener setPosition X no error',
options: {
paramName: 'positionX',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
{
name: 'Listener setPosition Y error',
options: {paramName: 'positionY', curveDuration: renderDuration}
},
{
name: 'Listener setPosition Y no error',
options: {
paramName: 'positionY',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
{
name: 'Listener setPosition Z error',
options: {paramName: 'positionZ', curveDuration: renderDuration}
},
{
name: 'Listener setPosition Z no error',
options: {
paramName: 'positionZ',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
// Now do the same with |setOrientation|, for forward and up vectors.
{
name: 'Listener setOrientation forward X error',
options: {paramName: 'forwardX', curveDuration: renderDuration}
},
{
name: 'Listener setOrientation forward X no error',
options: {
paramName: 'forwardX',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
{
name: 'Listener setOrientation forward Y error',
options: {paramName: 'forwardY', curveDuration: renderDuration}
},
{
name: 'Listener setOrientation forward Y no error',
options: {
paramName: 'forwardY',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
{
name: 'Listener setOrientation forward Z error',
options: {paramName: 'forwardZ', curveDuration: renderDuration}
},
{
name: 'Listener setOrientation forward Z no error',
options: {
paramName: 'forwardZ',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
{
name: 'Listener setOrientation up X error',
options: {paramName: 'upX', curveDuration: renderDuration}
},
{
name: 'Listener setOrientation up X no error',
options: {
paramName: 'upX',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
{
name: 'Listener setOrientation up Y error',
options: {paramName: 'upY', curveDuration: renderDuration}
},
{
name: 'Listener setOrientation up Y no error',
options: {
paramName: 'upY',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
{
name: 'Listener setOrientation up Z error',
options: {paramName: 'upZ', curveDuration: renderDuration}
},
{
name: 'Listener setOrientation up Z no error',
options: {
paramName: 'upZ',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
];
// Create an audit test for each entry in |tests|.
tests.forEach(test => {
audit.define(test.name, (task, should) => {
let context = new OfflineAudioContext(1, renderFrames, sampleRate);
testPositionSetterVsCurve(
should, context,
Object.assign(
{testName: test.name, nodeName: 'listener'}, test.options))
.then(() => task.done());
});
});
audit.run();
</script>
</body>
</html>