<!doctype html>
<html>
<head>
<title>
Test Panner.setPosition and Panner.setOrientation Errors
</title>
<script src="../../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: 'Panner setPosition X error',
options: {paramName: 'positionX', curveDuration: renderDuration}
},
{
name: 'Panner setPosition X no error',
options: {
paramName: 'positionX',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
{
name: 'Panner setPosition Y error',
options: {paramName: 'positionY', curveDuration: renderDuration}
},
{
name: 'Panner setPosition Y no error',
options: {
paramName: 'positionY',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
{
name: 'Panner setPosition Z error',
options: {paramName: 'positionZ', curveDuration: renderDuration}
},
{
name: 'Panner setPosition Z no error',
options: {
paramName: 'positionZ',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
// Now do the same with setOrientation.
{
name: 'Panner setOrientation X error',
options: {paramName: 'orientationX', curveDuration: renderDuration}
},
{
name: 'Panner setOrientation X no error',
options: {
paramName: 'orientationX',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
{
name: 'Panner setOrientation Y error',
options: {paramName: 'orientationY', curveDuration: renderDuration}
},
{
name: 'Panner setOrientation Y no error',
options: {
paramName: 'orientationY',
curveDuration: curveDuration,
suspendFrame: suspendFrame
}
},
{
name: 'Panner setOrientation Z error',
options: {paramName: 'orientationZ', curveDuration: renderDuration}
},
{
name: 'Panner setOrientation Z no error',
options: {
paramName: 'orientationZ',
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: 'panner'}, test.options))
.then(() => task.done());
});
});
audit.run();
</script>
</body>
</html>