<!DOCTYPE html>
<html>
  <head>
    <title>
      Test the construction of AudioWorkletNode with real-time context
    </title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/webaudio/resources/audit.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let audit = Audit.createTaskRunner();

      let realtimeContext = new AudioContext();

      let filePath = 'processors/dummy-processor.js';

      // Test if an exception is thrown correctly when AWN constructor is
      // invoked before resolving |.addModule()| promise.
      audit.define(
          {label: 'construction-before-module-loading'},
          (task, should) => {
            should(() => new AudioWorkletNode(realtimeContext, 'dummy'),
                   'Creating a node before loading a module should throw.')
                .throw(DOMException, 'InvalidStateError');

            task.done();
          });

      // Test the construction of AudioWorkletNode after the resolution of
      // |.addModule()|. Also the constructor must throw an exception when
      // a unregistered node name was given.
      audit.define(
          {label: 'construction-after-module-loading'},
          (task, should) => {
            realtimeContext.audioWorklet.addModule(filePath).then(() => {
              let dummyWorkletNode =
                  new AudioWorkletNode(realtimeContext, 'dummy');
              should(dummyWorkletNode instanceof AudioWorkletNode,
                     '"dummyWorkletNode" is an instance of AudioWorkletNode')
                  .beTrue();
              should(() => new AudioWorkletNode(realtimeContext, 'foobar'),
                     'Unregistered name "foobar" must throw an exception.')
                  .throw();
              task.done();
            });
          });

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