| 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/testharness-helpers.js"></script> | |
| 4 <script src="../resources/testharnessreport.js"></script> | 3 <script src="../resources/testharnessreport.js"></script> |
| 5 <script src="../resources/bluetooth/bluetooth-helpers.js"></script> | 4 <script src="../resources/bluetooth/bluetooth-helpers.js"></script> |
| 6 <script> | 5 <script> |
| 7 'use strict'; | 6 'use strict'; |
| 8 | 7 |
| 9 test(t => { assert_true(window.testRunner instanceof Object); t.done(); }, | 8 test(t => { assert_true(window.testRunner instanceof Object); t.done(); }, |
| 10 'window.testRunner is required for the following tests.'); | 9 'window.testRunner is required for the following tests.'); |
| 11 | 10 |
| 12 promise_test(() => { | 11 promise_test(() => { |
| 13 testRunner.setBluetoothManualChooser(true); | 12 testRunner.setBluetoothManualChooser(true); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 requestDeviceWithKeyDown({filters: [{services: [heart_rate.alias]}]}), | 74 requestDeviceWithKeyDown({filters: [{services: [heart_rate.alias]}]}), |
| 76 requestDeviceWithKeyDown({filters: [{services: [heart_rate.name]}]}), | 75 requestDeviceWithKeyDown({filters: [{services: [heart_rate.name]}]}), |
| 77 requestDeviceWithKeyDown({filters: [{services: [heart_rate.uuid]}]}) | 76 requestDeviceWithKeyDown({filters: [{services: [heart_rate.uuid]}]}) |
| 78 ])).then(devices => { | 77 ])).then(devices => { |
| 79 devices.forEach(device => { | 78 devices.forEach(device => { |
| 80 assert_equals(device.constructor.name, 'BluetoothDevice'); | 79 assert_equals(device.constructor.name, 'BluetoothDevice'); |
| 81 }); | 80 }); |
| 82 }); | 81 }); |
| 83 }, 'Mock will resolve.'); | 82 }, 'Mock will resolve.'); |
| 84 | 83 |
| 85 promise_test(() => { | 84 promise_test(t => { |
| 86 return setBluetoothFakeAdapter('HeartRateAdapter') | 85 return setBluetoothFakeAdapter('HeartRateAdapter') |
| 87 .then(() => assert_promise_rejects( | 86 .then(() => promise_rejects(t, |
| 87 'SecurityError', |
| 88 navigator.bluetooth.requestDevice({ | 88 navigator.bluetooth.requestDevice({ |
| 89 filters: [{services: ['heart_rate']}]}), | 89 filters: [{services: ['heart_rate']}]}))); |
| 90 new DOMException('', 'SecurityError'))); | |
| 91 }, 'Requires a user gesture.'); | 90 }, 'Requires a user gesture.'); |
| 92 | 91 |
| 93 promise_test(() => { | 92 promise_test(t => { |
| 94 return setBluetoothFakeAdapter('HeartRateAdapter') | 93 return setBluetoothFakeAdapter('HeartRateAdapter') |
| 95 .then(() => callWithKeyDown(() => { | 94 .then(() => callWithKeyDown(() => { |
| 96 var first = navigator.bluetooth.requestDevice({ | 95 var first = navigator.bluetooth.requestDevice({ |
| 97 filters: [{services: ['heart_rate']}]}); | 96 filters: [{services: ['heart_rate']}]}); |
| 98 var second = navigator.bluetooth.requestDevice({ | 97 var second = navigator.bluetooth.requestDevice({ |
| 99 filters: [{services: ['heart_rate']}]}); | 98 filters: [{services: ['heart_rate']}]}); |
| 100 return Promise.all([ | 99 return Promise.all([ |
| 101 first.then(device => assert_equals( | 100 first.then(device => assert_equals( |
| 102 device.constructor.name, 'BluetoothDevice')), | 101 device.constructor.name, 'BluetoothDevice')), |
| 103 assert_promise_rejects(second, new DOMException('', 'SecurityError')), | 102 promise_rejects(t, 'SecurityError', second), |
| 104 ]); | 103 ]); |
| 105 })); | 104 })); |
| 106 }, 'Consumes a user gesture.'); | 105 }, 'Consumes a user gesture.'); |
| 107 | 106 |
| 108 promise_test(() => { | 107 promise_test(() => { |
| 109 return setBluetoothFakeAdapter('HeartRateAdapter') | 108 return setBluetoothFakeAdapter('HeartRateAdapter') |
| 110 .then(() => Promise.all([ | 109 .then(() => Promise.all([ |
| 111 requestDeviceWithKeyDown({filters: [{services: [heart_rate.alias]}]}), | 110 requestDeviceWithKeyDown({filters: [{services: [heart_rate.alias]}]}), |
| 112 requestDeviceWithKeyDown({filters: [{services: [heart_rate.name]}]}), | 111 requestDeviceWithKeyDown({filters: [{services: [heart_rate.name]}]}), |
| 113 requestDeviceWithKeyDown({filters: [{services: [heart_rate.uuid]}]}) | 112 requestDeviceWithKeyDown({filters: [{services: [heart_rate.uuid]}]}) |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 filters: [{services: ['glucose']}], | 186 filters: [{services: ['glucose']}], |
| 188 optionalServices: ['tx_power']})) | 187 optionalServices: ['tx_power']})) |
| 189 .then(device => { | 188 .then(device => { |
| 190 assert_equals(device.uuids.length, 2); | 189 assert_equals(device.uuids.length, 2); |
| 191 assert_in_array(BluetoothUUID.getService('glucose'), device.uuids); | 190 assert_in_array(BluetoothUUID.getService('glucose'), device.uuids); |
| 192 assert_in_array(BluetoothUUID.getService('tx_power'), device.uuids); | 191 assert_in_array(BluetoothUUID.getService('tx_power'), device.uuids); |
| 193 }); | 192 }); |
| 194 }, 'We should only see UUID\'s that we\'ve been given permission for.') | 193 }, 'We should only see UUID\'s that we\'ve been given permission for.') |
| 195 | 194 |
| 196 | 195 |
| 197 promise_test(() => { | 196 promise_test(t => { |
| 198 // Both devices support the Generic Access service, but things need to | 197 // Both devices support the Generic Access service, but things need to |
| 199 // support both services to pass the filter, and neither has a Battery | 198 // support both services to pass the filter, and neither has a Battery |
| 200 // service. | 199 // service. |
| 201 return setBluetoothFakeAdapter('GlucoseHeartRateAdapter') | 200 return setBluetoothFakeAdapter('GlucoseHeartRateAdapter') |
| 202 .then(() => assert_promise_rejects( | 201 .then(() => promise_rejects(t, 'NotFoundError', |
| 203 requestDeviceWithKeyDown({ | 202 requestDeviceWithKeyDown({ |
| 204 filters: [{services: ['heart_rate', 'battery_service']}] | 203 filters: [{services: ['heart_rate', 'battery_service']}] |
| 205 }), new DOMException('', 'NotFoundError'))); | 204 }))); |
| 206 }, 'Too-strict filters do prevent matching.'); | 205 }, 'Too-strict filters do prevent matching.'); |
| 207 | 206 |
| 208 promise_test(() => { | 207 promise_test(() => { |
| 209 testRunner.setBluetoothManualChooser(true); | 208 testRunner.setBluetoothManualChooser(true); |
| 210 | 209 |
| 211 // Open the chooser, looking for a Heart Rate device. | 210 // Open the chooser, looking for a Heart Rate device. |
| 212 let requestDevicePromise = | 211 let requestDevicePromise = |
| 213 setBluetoothFakeAdapter('SecondDiscoveryFindsHeartRateAdapter') | 212 setBluetoothFakeAdapter('SecondDiscoveryFindsHeartRateAdapter') |
| 214 .then(() => requestDeviceWithKeyDown({ | 213 .then(() => requestDeviceWithKeyDown({ |
| 215 filters: [{services: ['heart_rate']}] | 214 filters: [{services: ['heart_rate']}] |
| (...skipping 18 matching lines...) Expand all Loading... |
| 234 assert_true(idsByName.has('Heart Rate Device')); | 233 assert_true(idsByName.has('Heart Rate Device')); |
| 235 assert_equals(events[2], 'discovery-idle'); | 234 assert_equals(events[2], 'discovery-idle'); |
| 236 | 235 |
| 237 // Select it and let the test complete. | 236 // Select it and let the test complete. |
| 238 testRunner.sendBluetoothManualChooserEvent('selected', | 237 testRunner.sendBluetoothManualChooserEvent('selected', |
| 239 idsByName.get('Heart Rate Device'
)); | 238 idsByName.get('Heart Rate Device'
)); |
| 240 return requestDevicePromise; | 239 return requestDevicePromise; |
| 241 }).then(device => assert_equals(device.name, 'Heart Rate Device')); | 240 }).then(device => assert_equals(device.name, 'Heart Rate Device')); |
| 242 }, 'The chooser can restart the BT scan.'); | 241 }, 'The chooser can restart the BT scan.'); |
| 243 </script> | 242 </script> |
| OLD | NEW |