<!DOCTYPE html>
<html>
  <head>
    <title>
      delaynode-maxdelay.html
    </title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/webaudio/resources/audit-util.js"></script>
    <script src="/webaudio/resources/audit.js"></script>
    <script src="/webaudio/resources/delay-testing.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let audit = Audit.createTaskRunner();

      audit.define(
          {
            label: 'test',
            description:
                'Basic functionality of DelayNode with a non-default max delay time'
          },
          function(task, should) {

            // Create offline audio context.
            let context = new OfflineAudioContext(
                1, sampleRate * renderLengthSeconds, sampleRate);
            let toneBuffer = createToneBuffer(
                context, 20, 20 * toneLengthSeconds, sampleRate);  // 20Hz tone

            let bufferSource = context.createBufferSource();
            bufferSource.buffer = toneBuffer;

            // Create a delay node with an explicit max delay time (greater than
            // the default of 1 second).
            let delay = context.createDelay(2);
            // Set the delay time to a value greater than the default max delay
            // so we can verify the delay is working for this case.
            delayTimeSeconds = 1.5;
            delay.delayTime.value = delayTimeSeconds;

            bufferSource.connect(delay);
            delay.connect(context.destination);
            bufferSource.start(0);

            context.startRendering()
                .then(buffer => checkDelayedResult(buffer, toneBuffer, should))
                .then(() => task.done());
          });

      audit.run();
    </script>
  </body>
</html>
