blob: a55042b71550bc29cf99818b76de83120e45d32a [file] [log] [blame] [edit]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--
Create an oscillator of each type and verify that the type is set correctly.
-->
<html>
<head>
<script src="resources/compatibility.js"></script>
<script type="text/javascript" src="resources/audio-testing.js"></script>
<script type="text/javascript" src="../resources/js-test.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script>
description("Basic test of setting Oscillator node types.");
var sampleRate = 44100;
var renderLengthSeconds = 0.25;
var oscTypes = ["sine", "square", "sawtooth", "triangle", "custom"];
function runTest()
{
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
window.jsTestIsAsync = true;
// Create offline audio context.
var context = new OfflineAudioContext(2, sampleRate * renderLengthSeconds, sampleRate);
var osc = context.createOscillator();
// Set each possible oscillator type (except CUSTOM) and verify that the type is correct.
// Here we're setting the type using WebIDL enum values which are strings.
for (var k = 0; k < oscTypes.length - 1; ++k) {
osc.type = oscTypes[k];
Should("osc.type = '" + oscTypes[k] + "'", osc.type).beEqualTo(oscTypes[k]);
}
// Verify that setting a custom type directly does not set the custom type. This test has to be
// done before using setPeriodicWave.
Should("osc.type = 'custom'", function () {
osc.type = "custom";
}).throw('InvalidStateError');
// Now set a custom oscillator
var coeffA = new Float32Array([0, 1, 0.5]);
var coeffB = new Float32Array([0, 0, 0]);
var wave = context.createPeriodicWave(coeffA, coeffB);
Should("osc.setPeriodicWave(wave)", function () {
osc.setPeriodicWave(wave);
}).notThrow();
Should("osc.type", osc.type).beEqualTo("custom");
// Check that numerical values are no longer supported
var oldType = osc.type;
osc.type = 0;
Should("osc.type = 0", osc.type).notBeEqualTo(0);
Should("osc.type", osc.type).beEqualTo(oldType);
finishJSTest();
}
runTest();
successfullyParsed = true;
</script>
</body>
</html>