// META: timeout=long
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: script=/webusb/resources/fake-devices.js
// META: script=/webusb/resources/usb-helpers.js

'use strict';

idl_test(
  ['webusb'],
  ['permissions', 'html', 'dom'],
  async idl_array => {
    if (self.GLOBAL.isWindow()) {
      idl_array.add_objects({ Navigator: ['navigator'] });
    } else if (self.GLOBAL.isWorker()) {
      idl_array.add_objects({ WorkerNavigator: ['navigator'] });
    }

    idl_array.add_objects({
      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")'],
    });

    return usb_test(async () => {
      // Ignored errors are surfaced in idlharness.js's test_object below.
      self.usbDevice = await getFakeDevice().device;
      self.usbConfiguration = usbDevice.configurations[0];
      self.usbInterface = usbConfiguration.interfaces[0];
      self.usbAlternateInterface = usbInterface.alternates[0];
      self.usbEndpoint = usbAlternateInterface.endpoints[0];
      self.usbConnectionEvent =
          new USBConnectionEvent('connect', { device: usbDevice });
    }, 'USB device setup');
  }
);
