// META: script=/resources/test-only-api.js // 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();