<!DOCTYPE html>
<html>
  <head>
    <meta charset=utf-8>
    <title>WebUSB IDL test</title>
    <link rel="help" href="https://wicg.github.io/webusb/">
    <script src=/resources/testharness.js></script>
    <script src=/resources/testharnessreport.js></script>
    <script src=/resources/WebIDLParser.js></script>
    <script src=/resources/idlharness.js></script>
    <script src=resources/fake-devices.js></script>
    <script src=resources/usb-helpers.js></script>
  </head>
  <body>
    <script>
      'use strict';

      // Object instances used by the IDL test.
      var usbDevice;
      var usbConfiguration;
      var usbInterface;
      var usbAlternateInterface;
      var usbEndpoint;
      var usbConnectionEvent;

      usb_test(async () => {
        let response = await fetch('/interfaces/webusb.idl');
        let idl_text = await response.text();
        let idl_array = new IdlArray();
        idl_array.add_idls(idl_text);

        // Untested IDL interfaces
        idl_array.add_untested_idls('interface Event {};');
        idl_array.add_untested_idls('interface EventHandler {};');
        idl_array.add_untested_idls('dictionary EventInit {};');
        idl_array.add_untested_idls('interface EventTarget {};');
        idl_array.add_untested_idls('interface Navigator {};');

        let {device} = await getFakeDevice();

        usbDevice = device;
        usbConfiguration = usbDevice.configurations[0];
        usbInterface = usbConfiguration.interfaces[0];
        usbAlternateInterface = usbInterface.alternates[0];
        usbEndpoint = usbAlternateInterface.endpoints[0];
        usbConnectionEvent =
            new USBConnectionEvent('connect', { device: usbDevice })

        idl_array.add_objects({
          Navigator: ['navigator'],
          USB: ['navigator.usb'],
          USBAlternateInterface: ['usbAlternateInterface'],
          USBConfiguration: ['usbConfiguration'],
          USBConnectionEvent: ['usbConnectionEvent'],
          USBDevice: ['usbDevice'],
          USBEndpoint: ['usbEndpoint'],
          USBInterface: ['usbInterface'],
          USBInTransferResult: ['new USBInTransferResult("ok")'],
          USBOutTransferResult: ['new USBOutTransferResult("ok")'],
          USBIsochronousInTransferResult: ['new USBIsochronousInTransferResult([])'],
          USBIsochronousOutTransferResult: ['new USBIsochronousOutTransferResult([])'],
          USBIsochronousInTransferPacket: ['new USBIsochronousInTransferPacket("ok")'],
          USBIsochronousOutTransferPacket: ['new USBIsochronousOutTransferPacket("ok")'],
        });

        idl_array.test();
      }, 'WebUSB IDL test');
    </script>
  </body>
</html>
