<!DOCTYPE html>
<html>
  <head>
    <title>
      Test Constructor: MediaStreamAudioSource
    </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>
    <script src="../resources/audionodeoptions.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let context;

      let audit = Audit.createTaskRunner();

      audit.define('initialize', (task, should) => {
        // Need AudioContext, not OfflineAudioContext, for these tests.
        should(() => {
          context = new AudioContext();
        }, 'context = new AudioContext()').notThrow();
        task.done();
      });

      audit.define('invalid constructor', (task, should) => {
        testInvalidConstructor(should, 'MediaStreamAudioSourceNode', context);
        task.done();
      });

      audit.define('constructor options', (task, should) => {
        let node;

        let options = {mediaStream: new MediaStream()};

        // We throw because the mediaStream has no tracks. But otherwise the
        // constructor worked.
        should(
            () => {
              node = new MediaStreamAudioSourceNode(context, options);
            },
            'node = new MediaStreamAudioSourceNode(context, ' +
                JSON.stringify(options) + ')')
            .throw(DOMException, 'InvalidStateError');

        task.done();
      });

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