// META: script=/webusb/resources/fake-devices.js
// META: script=/webusb/resources/usb-helpers.js
'use strict';

let usbDevice, devicesFirstTime, fakeDevice, removedDevice;

usb_test(() => getFakeDevice()
    .then(_ => usbDevice = _.device)
    .then(() => navigator.usb.getDevices())
    .then(devices => {
      assert_equals(devices.length, 1);
      assert_equals(usbDevice, devices[0]);
      assertDeviceInfoEquals(devices[0], fakeDeviceInit);
    }), 'getDevices returns devices that are connected');

usb_test(() => getFakeDevice()
    .then(() => navigator.usb.getDevices())
    .then(_ => devicesFirstTime = _)
    .then(() => assert_equals(devicesFirstTime.length, 1))
    .then(() => navigator.usb.getDevices())
    .then(devicesSecondTime => assert_array_equals(devicesSecondTime,
        devicesFirstTime)),
    'getDevices returns the same objects for each USB device');

usb_test(() => getFakeDevice()
    .then(_ => usbDevice = _.device)
    .then(() => assertDeviceInfoEquals(usbDevice, fakeDeviceInit))
    .then(() => usbDevice.open())
    .then(() => usbDevice.close()),
    'onconnect event is trigged by adding a device');

usb_test(() => getFakeDevice()
    .then(_ => {
      usbDevice = _.device;
      fakeDevice = _.fakeDevice;
    })
    .then(() => waitForDisconnect(fakeDevice))
    .then(_ => removedDevice = _)
    .then(() => {
      assertDeviceInfoEquals(removedDevice, fakeDeviceInit);
      assert_equals(removedDevice, usbDevice);
    })
    .then(() => removedDevice.open())
    .then(() =>
        assert_unreachable('should not be able to open a disconnected device'),
        error => assert_equals(error.code, DOMException.NOT_FOUND_ERR)),
    'ondisconnect event is triggered by removing a device');

done();
