<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script src="resources/audio-testing.js"></script>
<script src="../resources/js-test.js"></script>
</head>

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

<script>
description("Tests that JavaScriptAudioNode accepts 0 input channels.");

var sampleRate = 44100.0;
var renderLengthInFrames = 512;
var bufferSize = 512;

function checkResult(e)
{
    testPassed("JavaScriptAudioNode accepts 0 input channels.");

    finishJSTest();
}

function runTest()
{
    window.jsTestIsAsync = true;

    var context = new webkitOfflineAudioContext(1, renderLengthInFrames, sampleRate);

    var node;

    try {  
        node = context.createScriptProcessor(bufferSize, 0, 1);
        testPassed("Successfully created JavaScriptAudioNode.");
    } catch (e) {
        testFailed("Failed to create JavaScriptAudioNode.");
    }

    var source = context.createBufferSource();
    source.buffer = createImpulseBuffer(context, bufferSize);

    // The onaudioprocess function doesn't need to do anything.  We just need the process to start
    // to test that implementation accepts 0 input channels.
    //
    // FIXME: check the .inputBuffer attribute of the AudioProcessingEvent.
    node.onaudioprocess = function(e) { };
    source.connect(node);
    node.connect(context.destination);
    source.start(0);

    context.oncomplete = checkResult;
    context.startRendering();
}

runTest();
</script>
</body>
</html>
