<!DOCTYPE html>
<html>
  <head>
    <title>
      scriptprocessornode-zero-input-channels.html
    </title>
    <script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script>
    <script src="../../resources/testharnessreport.js"></script>
    <script src="../resources/audit-util.js"></script>
    <script src="../resources/audit.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let audit = Audit.createTaskRunner();

      let sampleRate = 44100.0;
      let renderLengthInFrames = 512;
      let bufferSize = 512;

      audit.define(
          {
            label: 'test',
            description:
                'Tests that ScriptProcessorNode accepts 0 input channels'
          },
          (task, should) => {
            let context =
                new OfflineAudioContext(1, renderLengthInFrames, sampleRate);

            let node;

            should(
                () => {
                  node = context.createScriptProcessor(bufferSize, 0, 1);
                },
                'node = context.createScriptProcessor(bufferSize, 0, 1)')
                .notThrow();
            let 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 = event => {
              should(true, 'ScriptProcessorNode accepts 0 input channels')
                  .beTrue();
              task.done();
            };

            context.startRendering();
          });

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