<!DOCTYPE html>

<html>
<head>
<script src="../resources/js-test-pre.js"></script>
<script src="resources/audio-testing.js"></script>
</head>

<body>
<script>
description("Basic tests for PeriodicWave.");

var context = new webkitAudioContext();

var zeroWaveCoef = new Float32Array(0);
var overWaveCoef = new Float32Array(4097);
var minWaveCoef = new Float32Array(1);
var maxWaveCoef = new Float32Array(4096);

try {
    var zeroPeriodicWave = context.createPeriodicWave(zeroWaveCoef, zeroWaveCoef);
    testFailed("IndexSizeError should be thrown for the length of Float32Array <= 0.");
} catch(e) {
    if (e.code === DOMException.INDEX_SIZE_ERR)
        testPassed("IndexSizeError was thrown for the length of Float32Array <= 0.");
    else
        testFailed("IndexSizeError should be thrown for the length of Float32Array <= 0.");
}

try {
    var overPeriodicWave = context.createPeriodicWave(overWaveCoef, overWaveCoef);
    testFailed("IndexSizeError should be thrown for the length of Float32Array > 4096.");
} catch(e) {
    if (e.code === DOMException.INDEX_SIZE_ERR)
        testPassed("IndexSizeError was thrown for the length of Float32Array > 4096.");
    else
        testFailed("IndexSizeError should be thrown for the length of Float32Array > 4096.");
}

try {
    var diffPeriodicWave = context.createPeriodicWave(minWaveCoef, maxWaveCoef);
    testFailed("IndexSizeError should be thrown for parameters are not eqaul lengths.");
} catch(e) {
    if (e.code === DOMException.INDEX_SIZE_ERR)
        testPassed("IndexSizeError was thrown for parameters are not eqaul lengths.");
    else
        testFailed("IndexSizeError should be thrown for parameters are not eqaul lengths.");
}

try {
    var maxPeriodicWave = context.createPeriodicWave(maxWaveCoef, maxWaveCoef);
    testPassed("PeriodicWave created successfully with the length of Float32Array = 4096.");
} catch(e) {
    testFailed("Failed to create PeriodicWave with the length of Float32Array = 4096.");
}

</script>

<script src="../resources/js-test-post.js"></script>
</body>
</html>
