<!DOCTYPE html>

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

<body>

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

<script>
description("This tests that we don't trigger an assertion failure due to AudioNode connection order.");

var sampleRate = 44100.0;
var renderLengthSeconds = 0.125;
var delayTimeSeconds = 0.1;

function createSinWaveBuffer(context, lengthInSeconds, frequency) {
    var audioBuffer = context.createBuffer(1, lengthInSeconds * sampleRate, sampleRate);

    var n = audioBuffer.length;
    var data = audioBuffer.getChannelData(0);

    for (var i = 0; i < n; ++i) {
        data[i] = Math.sin(frequency * 2 * Math.PI * i / sampleRate);
    }

    return audioBuffer;
}

function runTest() {
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }
    
    window.jsTestIsAsync = true;
        
    // Create offline audio context.
    var context = new webkitOfflineAudioContext(1, sampleRate * renderLengthSeconds, sampleRate);
    var toneBuffer = createSinWaveBuffer(context, renderLengthSeconds, 880);
    
    var bufferSource = context.createBufferSource();
    bufferSource.buffer = toneBuffer;
    bufferSource.connect(context.destination);

    var delay = context.createDelayNode();
    delay.delayTime.value = delayTimeSeconds;

    // We connect delay node to gain node before anything is connected to delay node itself.
    // We do this because we try to trigger the ASSERT which might be fired due to AudioNode connection order,
    // especially when gain node and delay node is involved e.g. https://bugs.webkit.org/show_bug.cgi?id=76685.

    var gain = context.createGainNode();
    gain.connect(context.destination);
    delay.connect(gain);

    bufferSource.noteOn(0);

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

runTest();

</script>

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