Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(270)

Side by Side Diff: third_party/WebKit/LayoutTests/usb/usb.html

Issue 2816663002: Ensure tests don't depend on fake devices being added synchronously (Closed)
Patch Set: Address ortuno@ comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/fake-devices.js"></script> 4 <script src="resources/fake-devices.js"></script>
5 <script src="resources/usb-helpers.js"></script> 5 <script src="resources/usb-helpers.js"></script>
6 <script src="resources/webusb-test.js"></script> 6 <script src="resources/webusb-test.js"></script>
7 <script> 7 <script>
8 'use strict'; 8 'use strict';
9 9
10 // Returns a promise that is resolved when the next USBConnectionEvent of the 10 usb_test(() => {
11 // given type is received. 11 return getFakeDevice().then(device => {
12 function connectionEventPromise(eventType) { 12 return navigator.usb.getDevices().then(devices => {
13 return new Promise(resolve => { 13 assert_equals(devices.length, 1);
14 let eventHandler = e => { 14 assert_equals(device, devices[0]);
15 assert_true(e instanceof USBConnectionEvent); 15 assertDeviceInfoEquals(devices[0], fakeDeviceInit);
16 navigator.usb.removeEventListener(eventType, eventHandler); 16 });
17 resolve(e.device);
18 };
19 navigator.usb.addEventListener(eventType, eventHandler);
20 }); 17 });
21 } 18 }, 'getDevices returns devices that are connected');
22 19
23 usb_test(() => { 20 usb_test(() => {
24 navigator.usb.test.addFakeDevice(fakeDeviceInit); 21 return getFakeDevice().then(() => {
25 22 return navigator.usb.getDevices().then(devicesFirstTime => {
26 return navigator.usb.getDevices().then(devices => { 23 assert_equals(devicesFirstTime.length, 1);
27 assert_equals(devices.length, 1); 24 return navigator.usb.getDevices().then(devicesSecondTime => {
28 assertDeviceInfoEquals(devices[0], fakeDeviceInit); 25 assert_array_equals(devicesSecondTime, devicesFirstTime);
29 }); 26 });
30 }, 'getDevices returns devices exposed by the DeviceManager service');
31
32 usb_test(() => {
33 navigator.usb.test.addFakeDevice(fakeDeviceInit);
34
35 return navigator.usb.getDevices().then(devicesFirstTime => {
36 assert_equals(devicesFirstTime.length, 1);
37 return navigator.usb.getDevices().then(devicesSecondTime => {
38 assert_array_equals(devicesSecondTime, devicesFirstTime);
39 }); 27 });
40 }); 28 });
41 }, 'getDevices returns the same objects for each USB device'); 29 }, 'getDevices returns the same objects for each USB device');
42 30
43 usb_test(() => { 31 usb_test(() => {
44 return navigator.usb.requestDevice({ filters: [] }) 32 return navigator.usb.requestDevice({ filters: [] })
45 .then(device => { 33 .then(device => {
46 assert_unreachable('requestDevice should reject without a user gesture'); 34 assert_unreachable('requestDevice should reject without a user gesture');
47 }) 35 })
48 .catch(error => { 36 .catch(error => {
49 assert_equals(error.code, DOMException.SECURITY_ERR); 37 assert_equals(error.code, DOMException.SECURITY_ERR);
50 }); 38 });
51 }, 'requestDevice rejects when called without a user gesture'); 39 }, 'requestDevice rejects when called without a user gesture');
52 40
53 usb_test(() => { 41 usb_test(() => {
54 return callWithKeyDown(() => navigator.usb.requestDevice({ filters: [] }) 42 return callWithKeyDown(() => navigator.usb.requestDevice({ filters: [] })
55 .then(device => { 43 .then(device => {
56 assert_unreachable('requestDevice should reject when no device selected'); 44 assert_unreachable('requestDevice should reject when no device selected');
57 }) 45 })
58 .catch(error => { 46 .catch(error => {
59 assert_equals(error.code, DOMException.NOT_FOUND_ERR); 47 assert_equals(error.code, DOMException.NOT_FOUND_ERR);
60 }) 48 })
61 ); 49 );
62 }, 'requestDevice rejects when no device is chosen'); 50 }, 'requestDevice rejects when no device is chosen');
63 51
64 usb_test(() => { 52 usb_test(() => {
65 let guid = navigator.usb.test.addFakeDevice(fakeDeviceInit); 53 return getFakeDeviceAndGuid().then(({ device, guid }) => {
66 navigator.usb.test.chosenDevice = guid; 54 navigator.usb.test.chosenDevice = guid;
67 55 return callWithKeyDown(() => {
68 return callWithKeyDown(() => navigator.usb.requestDevice({ filters: [] }) 56 return navigator.usb.requestDevice({ filters: [] }).then(chosenDevice => {
ortuno 2017/04/18 00:44:22 out of topic: Out of curiosity, how do you test th
Reilly Grant (use Gerrit) 2017/04/18 01:27:52 https://cs.chromium.org/chromium/src/chrome/browse
ortuno 2017/04/18 03:04:06 hmm so for Web Bluetooth we have tests to make sur
Reilly Grant (use Gerrit) 2017/04/18 18:21:38 What devices appear in the chooser isn't visible t
ortuno 2017/04/18 21:27:16 No need to change anything, but why isn't this tes
69 .then(device => { 57 assert_equals(chosenDevice, device);
70 assertDeviceInfoEquals(device, fakeDeviceInit); 58 });
71 }) 59 });
72 ); 60 });
73 }, 'requestDevice returns the device chosen by the user'); 61 }, 'requestDevice returns the device chosen by the user');
74 62
75 usb_test(() => { 63 usb_test(() => {
76 let guid = navigator.usb.test.addFakeDevice(fakeDeviceInit); 64 return getFakeDeviceAndGuid().then(({ device, guid }) => {
77 navigator.usb.test.chosenDevice = guid; 65 navigator.usb.test.chosenDevice = guid;
78 66 return callWithKeyDown(() => {
79 return callWithKeyDown(() => navigator.usb.requestDevice({ filters: [] }) 67 return navigator.usb.requestDevice({ filters: [] }).then(chosenDevice => {
80 .then(device => navigator.usb.getDevices().then(devices => { 68 assert_equals(chosenDevice, device);
81 assert_equals(devices.length, 1); 69 return navigator.usb.getDevices().then(devices => {
82 assert_equals(devices[0], device); 70 assert_equals(devices.length, 1);
83 })) 71 assert_equals(devices[0], chosenDevice);
84 ); 72 });
73 });
74 });
75 });
85 }, 'getDevices returns the same object as requestDevice'); 76 }, 'getDevices returns the same object as requestDevice');
86 77
87 usb_test(() => { 78 usb_test(() => {
88 const expectedFilters = [ 79 const expectedFilters = [
89 { vendorId: 1234, classCode: 0xFF, serialNumber: "123ABC" }, 80 { vendorId: 1234, classCode: 0xFF, serialNumber: "123ABC" },
90 { vendorId: 5678, productId: 0xF00F } 81 { vendorId: 5678, productId: 0xF00F }
91 ]; 82 ];
92 83
93 return callWithKeyDown(() => navigator.usb.requestDevice({ filters: expectedFi lters }) 84 return callWithKeyDown(() => navigator.usb.requestDevice({ filters: expectedFi lters })
94 .then(device => { 85 .then(device => {
95 assert_unreachable('requestDevice should reject because no device selected '); 86 assert_unreachable('requestDevice should reject because no device selected ');
96 }) 87 })
97 .catch(error => { 88 .catch(error => {
98 assert_equals(error.code, DOMException.NOT_FOUND_ERR); 89 assert_equals(error.code, DOMException.NOT_FOUND_ERR);
99 let actualFilters = navigator.usb.test.lastFilters; 90 let actualFilters = navigator.usb.test.lastFilters;
100 assert_equals(actualFilters.length, expectedFilters.length); 91 assert_equals(actualFilters.length, expectedFilters.length);
101 for (var i = 0; i < actualFilters.length; ++i) 92 for (var i = 0; i < actualFilters.length; ++i)
102 assert_object_equals(actualFilters[i], expectedFilters[i]); 93 assert_object_equals(actualFilters[i], expectedFilters[i]);
103 }) 94 })
104 ); 95 );
105 }, 'filters are sent correctly'); 96 }, 'filters are sent correctly');
106 97
107 usb_test(() => { 98 usb_test(() => {
108 let promise = connectionEventPromise('connect'); 99 return getFakeDevice().then(device => {
109 navigator.usb.test.addFakeDevice(fakeDeviceInit);
110
111 return promise.then(device => {
112 assertDeviceInfoEquals(device, fakeDeviceInit); 100 assertDeviceInfoEquals(device, fakeDeviceInit);
113 return device.open().then(() => device.close()); 101 return device.open().then(() => device.close());
114 }); 102 });
115 }, 'onconnect event is trigged by adding a device'); 103 }, 'onconnect event is trigged by adding a device');
116 104
117 usb_test(usb => { 105 usb_test(usb => {
118 let promise = connectionEventPromise('connect'); 106 return getFakeDeviceAndGuid().then(({ device, guid }) => {
119 navigator.usb.test.addFakeDevice(fakeDeviceInit); 107 return waitForDisconnect(guid).then(removedDevice => {
120
121 return promise
122 .then(device => navigator.usb.getDevices().then(devices => {
123 assert_equals(devices.length, 1);
124 assert_equals(devices[0], device);
125 }));
126 }, 'getDevices returns the same object as sent in the onconnect event');
127
128 usb_test(usb => {
129 let deviceAdded = connectionEventPromise('connect');
130 let guid = navigator.usb.test.addFakeDevice(fakeDeviceInit);
131
132 return deviceAdded.then(device => {
133 let deviceRemoved = connectionEventPromise('disconnect');
134 navigator.usb.test.removeFakeDevice(guid);
135 return deviceRemoved.then(removedDevice => {
136 assertDeviceInfoEquals(removedDevice, fakeDeviceInit); 108 assertDeviceInfoEquals(removedDevice, fakeDeviceInit);
137 assert_equals(removedDevice, device); 109 assert_equals(removedDevice, device);
138 return removedDevice.open().then(() => { 110 return removedDevice.open().then(() => {
139 assert_unreachable('should not be able to open a disconnected device'); 111 assert_unreachable('should not be able to open a disconnected device');
140 }, error => { 112 }, error => {
141 assert_equals(error.code, DOMException.NOT_FOUND_ERR); 113 assert_equals(error.code, DOMException.NOT_FOUND_ERR);
142 }); 114 });
143 }); 115 });
144 }); 116 });
145 }, 'ondisconnect event is triggered by removing a device'); 117 }, 'ondisconnect event is triggered by removing a device');
146 </script> 118 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698