| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <script src="../resources/testharness.js"></script> | 2 <script src="../resources/testharness.js"></script> |
| 3 <script src="../resources/testharnessreport.js"></script> | 3 <script src="../resources/testharnessreport.js"></script> |
| 4 <script src="../resources/mojo-helpers.js"></script> | 4 <script src="../resources/mojo-helpers.js"></script> |
| 5 <script src="resources/fake-devices.js"></script> | 5 <script src="resources/fake-devices.js"></script> |
| 6 <script src="resources/usb-helpers.js"></script> | 6 <script src="resources/usb-helpers.js"></script> |
| 7 <script> | 7 <script> |
| 8 'use strict'; | 8 'use strict'; |
| 9 | 9 |
| 10 function assertRejectsWithError(promise, name, message) { |
| 11 return promise.then(() => { |
| 12 assert_unreached('expected promise to reject with ' + name); |
| 13 }, error => { |
| 14 assert_equals(error.name, name); |
| 15 if (message !== undefined) |
| 16 assert_equals(error.message, message); |
| 17 }); |
| 18 } |
| 19 |
| 10 function assertRejectsWithNotFoundError(promise) { | 20 function assertRejectsWithNotFoundError(promise) { |
| 11 return promise.then(() => { | 21 return assertRejectsWithError(promise, 'NotFoundError'); |
| 12 assert_unreached('promise should reject'); | 22 } |
| 13 }, error => { | 23 |
| 14 assert_equals(error.code, DOMException.NOT_FOUND_ERR); | 24 function assertRejectsWithNotOpenError(promise) { |
| 15 }); | 25 return assertRejectsWithError( |
| 26 promise, 'InvalidStateError', 'The device must be open()ed first.') |
| 16 } | 27 } |
| 17 | 28 |
| 18 usb_test(usb => { | 29 usb_test(usb => { |
| 19 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); | 30 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 20 return navigator.usb.getDevices().then(devices => { | 31 return navigator.usb.getDevices().then(devices => { |
| 21 assert_equals(1, devices.length); | 32 assert_equals(1, devices.length); |
| 22 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); | 33 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); |
| 23 return assertRejectsWithNotFoundError(devices[0].open()); | 34 return assertRejectsWithNotFoundError(devices[0].open()); |
| 24 }); | 35 }); |
| 25 }, 'open rejects when called on a disconnected device'); | 36 }, 'open rejects when called on a disconnected device'); |
| 26 | 37 |
| 27 usb_test(usb => { | 38 usb_test(usb => { |
| 28 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); | 39 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 29 return navigator.usb.getDevices().then(devices => { | 40 return navigator.usb.getDevices().then(devices => { |
| 30 assert_equals(1, devices.length); | 41 assert_equals(1, devices.length); |
| 31 let device = devices[0]; | 42 let device = devices[0]; |
| 32 return device.open().then(() => device.close()); | 43 assert_false(device.opened); |
| 44 return device.open().then(() => { |
| 45 assert_true(device.opened); |
| 46 return device.close().then(() => { |
| 47 assert_false(device.opened); |
| 48 }); |
| 49 }); |
| 33 }); | 50 }); |
| 34 }, 'a device can be opened and closed'); | 51 }, 'a device can be opened and closed'); |
| 35 | 52 |
| 36 usb_test(usb => { | 53 usb_test(usb => { |
| 37 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); | 54 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 38 return navigator.usb.getDevices().then(devices => { | 55 return navigator.usb.getDevices().then(devices => { |
| 39 assert_equals(1, devices.length); | 56 assert_equals(1, devices.length); |
| 40 let device = devices[0]; | 57 let device = devices[0]; |
| 58 return device.open() |
| 59 .then(() => device.open()) |
| 60 .then(() => device.open()) |
| 61 .then(() => device.open()) |
| 62 .then(() => device.close()) |
| 63 .then(() => device.close()) |
| 64 .then(() => device.close()) |
| 65 .then(() => device.close()); |
| 66 }); |
| 67 }, 'open and close can be called multiple times'); |
| 68 |
| 69 usb_test(usb => { |
| 70 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 71 return navigator.usb.getDevices().then(devices => { |
| 72 assert_equals(1, devices.length); |
| 73 let device = devices[0]; |
| 74 return Promise.all([ |
| 75 device.open(), |
| 76 assertRejectsWithError(device.open(), 'InvalidStateError', |
| 77 'An open() or close() task is in progress.'), |
| 78 assertRejectsWithError(device.close(), 'InvalidStateError', |
| 79 'An open() or close() task is in progress.'), |
| 80 ]).then(() => Promise.all([ |
| 81 device.close(), |
| 82 assertRejectsWithError(device.open(), 'InvalidStateError', |
| 83 'An open() or close() task is in progress.'), |
| 84 assertRejectsWithError(device.close(), 'InvalidStateError', |
| 85 'An open() or close() task is in progress.'), |
| 86 ])); |
| 87 }); |
| 88 }, 'open and close cannot be called again while open or close are in progress'); |
| 89 |
| 90 usb_test(usb => { |
| 91 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 92 return navigator.usb.getDevices().then(devices => { |
| 93 assert_equals(1, devices.length); |
| 94 let device = devices[0]; |
| 41 return device.open().then(() => { | 95 return device.open().then(() => { |
| 42 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); | 96 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); |
| 43 return assertRejectsWithNotFoundError(device.close()); | 97 return assertRejectsWithNotFoundError(device.close()); |
| 44 }); | 98 }); |
| 45 }); | 99 }); |
| 46 }, 'close rejects when called on a disconnected device'); | 100 }, 'close rejects when called on a disconnected device'); |
| 47 | 101 |
| 48 usb_test(usb => { | 102 usb_test(usb => { |
| 49 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); | 103 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 50 return navigator.usb.getDevices().then(devices => { | 104 return navigator.usb.getDevices().then(devices => { |
| 51 assert_equals(1, devices.length); | 105 assert_equals(1, devices.length); |
| 52 var device = devices[0]; | 106 var device = devices[0]; |
| 53 return device.open() | 107 return device.open() |
| 54 .then(() => { | 108 .then(() => { |
| 55 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); | 109 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); |
| 56 return assertRejectsWithNotFoundError(device.setConfiguration(1)); | 110 return assertRejectsWithNotFoundError(device.setConfiguration(1)); |
| 57 }); | 111 }); |
| 58 }); | 112 }); |
| 59 }, 'setConfiguration rejects when called on a disconnected device'); | 113 }, 'setConfiguration rejects when called on a disconnected device'); |
| 60 | 114 |
| 61 usb_test(usb => { | 115 usb_test(usb => { |
| 62 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); | 116 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 63 return navigator.usb.getDevices().then(devices => { | 117 return navigator.usb.getDevices().then(devices => { |
| 64 assert_equals(1, devices.length); | 118 assert_equals(1, devices.length); |
| 119 var device = devices[0]; |
| 120 return Promise.all([ |
| 121 assertRejectsWithNotOpenError(device.setConfiguration(1)), |
| 122 assertRejectsWithNotOpenError(device.claimInterface(0)), |
| 123 assertRejectsWithNotOpenError(device.releaseInterface(0)), |
| 124 assertRejectsWithNotOpenError(device.setInterface(0, 1)), |
| 125 assertRejectsWithNotOpenError(device.controlTransferIn({ |
| 126 requestType: 'vendor', |
| 127 recipient: 'device', |
| 128 request: 0x42, |
| 129 value: 0x1234, |
| 130 index: 0x5678 |
| 131 }, 7)), |
| 132 assertRejectsWithNotOpenError(device.controlTransferOut({ |
| 133 requestType: 'vendor', |
| 134 recipient: 'device', |
| 135 request: 0x42, |
| 136 value: 0x1234, |
| 137 index: 0x5678 |
| 138 }, new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]))), |
| 139 assertRejectsWithNotOpenError(device.clearHalt(1)), |
| 140 assertRejectsWithNotOpenError(device.transferIn(1, 8)), |
| 141 assertRejectsWithNotOpenError( |
| 142 device.transferOut(1, new ArrayBuffer(8))), |
| 143 assertRejectsWithNotOpenError(device.isochronousTransferIn(1, [8])), |
| 144 assertRejectsWithNotOpenError( |
| 145 device.isochronousTransferOut(1, new ArrayBuffer(8), [8])), |
| 146 assertRejectsWithNotOpenError(device.reset()) |
| 147 ]); |
| 148 }); |
| 149 }, 'methods requiring it reject when the device is not open'); |
| 150 |
| 151 usb_test(usb => { |
| 152 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 153 return navigator.usb.getDevices().then(devices => { |
| 154 assert_equals(1, devices.length); |
| 65 let device = devices[0]; | 155 let device = devices[0]; |
| 66 return device.open() | 156 return device.open() |
| 67 .then(() => device.setConfiguration(1)) | 157 .then(() => device.setConfiguration(1)) |
| 68 .then(() => device.getConfiguration()) | 158 .then(() => device.getConfiguration()) |
| 69 .then(config => { | 159 .then(config => { |
| 70 usb.assertConfigurationInfoEquals( | 160 usb.assertConfigurationInfoEquals( |
| 71 config, usb.fakeDevices[0].configurations[0]); | 161 config, usb.fakeDevices[0].configurations[0]); |
| 72 }) | 162 }) |
| 73 .then(() => device.close()); | 163 .then(() => device.close()); |
| 74 }); | 164 }); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 90 }); | 180 }); |
| 91 }); | 181 }); |
| 92 }, 'getConfiguration rejects when called on a disconnected device'); | 182 }, 'getConfiguration rejects when called on a disconnected device'); |
| 93 | 183 |
| 94 usb_test(usb => { | 184 usb_test(usb => { |
| 95 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); | 185 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 96 return navigator.usb.getDevices().then(devices => { | 186 return navigator.usb.getDevices().then(devices => { |
| 97 assert_equals(devices.length, 1); | 187 assert_equals(devices.length, 1); |
| 98 let device = devices[0]; | 188 let device = devices[0]; |
| 99 return device.open() | 189 return device.open() |
| 100 .then(() => device.getConfiguration() | 190 .then(() => |
| 101 .then(() => { | 191 assertRejectsWithError(device.getConfiguration(), 'NotFoundError')) |
| 102 assert_unreached('getConfiguration should reject'); | |
| 103 }) | |
| 104 .catch(error => { | |
| 105 assert_equals(error.code, DOMException.NOT_FOUND_ERR); | |
| 106 return Promise.resolve(); | |
| 107 })) | |
| 108 .then(() => device.close()); | 192 .then(() => device.close()); |
| 109 }); | 193 }); |
| 110 }, 'querying an unset configuration raises NotFoundError'); | 194 }, 'querying an unset configuration raises NotFoundError'); |
| 111 | 195 |
| 112 usb_test(usb => { | 196 usb_test(usb => { |
| 113 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); | 197 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 114 return navigator.usb.getDevices().then(devices => { | 198 return navigator.usb.getDevices().then(devices => { |
| 115 assert_equals(1, devices.length); | 199 assert_equals(1, devices.length); |
| 116 let device = devices[0]; | 200 let device = devices[0]; |
| 117 return device.open() | 201 return device.open() |
| 118 .then(() => device.setConfiguration(1)) | 202 .then(() => device.setConfiguration(1)) |
| 119 .then(() => device.claimInterface(0)) | 203 .then(() => device.claimInterface(0)) |
| 120 .then(() => device.releaseInterface(0)) | 204 .then(() => device.releaseInterface(0)) |
| 121 .then(() => device.close()); | 205 .then(() => device.close()); |
| 122 }); | 206 }); |
| 123 }, 'an interface can be claimed and released'); | 207 }, 'an interface can be claimed and released'); |
| 124 | 208 |
| 125 usb_test(usb => { | 209 usb_test(usb => { |
| 126 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); | 210 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 127 return navigator.usb.getDevices().then(devices => { | 211 return navigator.usb.getDevices().then(devices => { |
| 128 assert_equals(1, devices.length); | 212 assert_equals(1, devices.length); |
| 129 let device = devices[0]; | 213 let device = devices[0]; |
| 130 return device.open() | 214 return device.open() |
| 131 .then(() => device.claimInterface(0) | 215 .then(() => |
| 132 .then(() => { | |
| 133 assert_unreached('claimInterface should reject'); | |
| 134 }) | |
| 135 .catch(error => { | |
| 136 // TODO(reillyg): This should be INVALID_STATE_ERR. | 216 // TODO(reillyg): This should be INVALID_STATE_ERR. |
| 137 assert_equals(error.code, DOMException.NETWORK_ERR); | 217 assertRejectsWithError(device.claimInterface(0), 'NetworkError')) |
| 138 return Promise.resolve(); | |
| 139 })) | |
| 140 .then(() => device.close()); | 218 .then(() => device.close()); |
| 141 }); | 219 }); |
| 142 }, 'claiming an interface fails without an active configuration'); | 220 }, 'claiming an interface fails without an active configuration'); |
| 143 | 221 |
| 144 usb_test(usb => { | 222 usb_test(usb => { |
| 145 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); | 223 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); |
| 146 return navigator.usb.getDevices().then(devices => { | 224 return navigator.usb.getDevices().then(devices => { |
| 147 assert_equals(1, devices.length); | 225 assert_equals(1, devices.length); |
| 148 var device = devices[0]; | 226 var device = devices[0]; |
| 149 return device.open() | 227 return device.open() |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 528 return navigator.usb.getDevices().then(devices => { | 606 return navigator.usb.getDevices().then(devices => { |
| 529 assert_equals(1, devices.length); | 607 assert_equals(1, devices.length); |
| 530 let device = devices[0]; | 608 let device = devices[0]; |
| 531 return device.open().then(() => { | 609 return device.open().then(() => { |
| 532 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); | 610 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); |
| 533 return assertRejectsWithNotFoundError(device.reset()); | 611 return assertRejectsWithNotFoundError(device.reset()); |
| 534 }); | 612 }); |
| 535 }); | 613 }); |
| 536 }, 'resetDevice rejects when called on a disconnected device'); | 614 }, 'resetDevice rejects when called on a disconnected device'); |
| 537 </script> | 615 </script> |
| OLD | NEW |