<!DOCTYPE html>

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

<body>
<div id="description"></div>
<div id="console"></div>

<script>
description("Tests that AudioBufferSourceNode validates AudioBuffer in .buffer attribute setter.");

var context;
var source;

function runTest() {
    window.jsTestIsAsync = true;
    
    context = new AudioContext();
    source = context.createBufferSource();

    shouldBeNull("source.buffer");

    // Make sure we can't set to something which isn't an AudioBuffer.
    shouldThrow("source.buffer = 57");

    // Check that mono buffer can be set.
    try {
        var monoBuffer = context.createBuffer(1, 1024, context.sampleRate);
        source.buffer = monoBuffer;
        testPassed("Mono buffer can be set.");
    } catch(e) {
        testFailed("Mono buffer can not be set.");
    }

    // Check that stereo buffer can be set.
    try {
        var stereoBuffer = context.createBuffer(2, 1024, context.sampleRate);
        source.buffer = stereoBuffer;
        testFailed("Stereo buffer can be set.");
    } catch(e) {
        testPassed("Stereo buffer can not be set.");
    }
    
    // Check buffers with more than two channels.
    for (var i = 3; i < 10; ++i) {
        try {
            var buffer = context.createBuffer(i, 1024, context.sampleRate);
            source.buffer = buffer;
            var message = i + " channels buffer can be set.";
            testFailed(message);
        } catch(e) {
            var message = i + " channels buffer can not be set.";
            testPassed(message);
        }
    }

    shouldThrow("context.createBuffer(64, 1024, context.sampleRate)");

    shouldNotBe("source.buffer", "null");
    shouldNotThrow("source.buffer = null");
    shouldBeNull("source.buffer");
        
    finishJSTest();
}

runTest();

</script>
</body>
</html>
