| 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> | 3 <script src="../resources/testharness-helpers.js"></script> |
| 4 <script src="../resources/testharnessreport.js"></script> | 4 <script src="../resources/testharnessreport.js"></script> |
| 5 <script src="bluetooth-helpers.js"></script> | 5 <script src="bluetooth-helpers.js"></script> |
| 6 <script> | 6 <script> |
| 7 test(function(t) { assert_true(window.testRunner instanceof Object); t.done(); }
, | 7 test(function(t) { assert_true(window.testRunner instanceof Object); t.done(); }
, |
| 8 "window.testRunner is required for the following tests."); | 8 "window.testRunner is required for the following tests."); |
| 9 | 9 |
| 10 sequential_promise_test(function() { | 10 promise_test(function() { |
| 11 testRunner.setBluetoothMockDataSet('EmptyAdapter'); | 11 testRunner.setBluetoothMockDataSet('EmptyAdapter'); |
| 12 return assert_promise_rejects(navigator.bluetooth.requestDevice(), | 12 return assert_promise_rejects(navigator.bluetooth.requestDevice(), |
| 13 new TypeError()); | 13 new TypeError()); |
| 14 }, 'Requires an argument.'); | 14 }, 'Requires an argument.'); |
| 15 | 15 |
| 16 sequential_promise_test(function() { | 16 promise_test(function() { |
| 17 testRunner.setBluetoothMockDataSet('EmptyAdapter'); | 17 testRunner.setBluetoothMockDataSet('EmptyAdapter'); |
| 18 return assert_promise_rejects(navigator.bluetooth.requestDevice({}), | 18 return assert_promise_rejects(navigator.bluetooth.requestDevice({}), |
| 19 new TypeError()); | 19 new TypeError()); |
| 20 }, 'RequestDeviceOptions requires a |filters| member.'); | 20 }, 'RequestDeviceOptions requires a |filters| member.'); |
| 21 | 21 |
| 22 sequential_promise_test(function() { | 22 promise_test(function() { |
| 23 testRunner.setBluetoothMockDataSet('EmptyAdapter'); | 23 testRunner.setBluetoothMockDataSet('EmptyAdapter'); |
| 24 return navigator.bluetooth.requestDevice({ | 24 return navigator.bluetooth.requestDevice({ |
| 25 filters: [{services: [genericAccessServiceUuid]}] | 25 filters: [{services: [genericAccessServiceUuid]}] |
| 26 }).then(function() { | 26 }).then(function() { |
| 27 assert_unreached('Expected no devices but one was returned.'); | 27 assert_unreached('Expected no devices but one was returned.'); |
| 28 }, function(e) { | 28 }, function(e) { |
| 29 assert_equals(e.name, 'NotFoundError'); | 29 assert_equals(e.name, 'NotFoundError'); |
| 30 assert_equals(e.message, 'No Bluetooth devices in range.'); | 30 assert_equals(e.message, 'No Bluetooth devices in range.'); |
| 31 }); | 31 }); |
| 32 }, 'Reject with NotFoundError.'); | 32 }, 'Reject with NotFoundError.'); |
| 33 | 33 |
| 34 sequential_promise_test(function() { | 34 promise_test(function() { |
| 35 testRunner.setBluetoothMockDataSet('SingleEmptyDeviceAdapter'); | 35 testRunner.setBluetoothMockDataSet('SingleEmptyDeviceAdapter'); |
| 36 return navigator.bluetooth.requestDevice({ | 36 return navigator.bluetooth.requestDevice({ |
| 37 filters: [{services: [genericAccessServiceUuid]}] | 37 filters: [{services: [genericAccessServiceUuid]}] |
| 38 }).then(function(device) { | 38 }).then(function(device) { |
| 39 assert_equals(device.constructor.name, "BluetoothDevice"); | 39 assert_equals(device.constructor.name, "BluetoothDevice"); |
| 40 }); | 40 }); |
| 41 }, 'Mock will resolve.'); | 41 }, 'Mock will resolve.'); |
| 42 | 42 |
| 43 sequential_promise_test(function() { | 43 promise_test(function() { |
| 44 testRunner.setBluetoothMockDataSet('ScanFilterCheckingAdapter'); | 44 testRunner.setBluetoothMockDataSet('ScanFilterCheckingAdapter'); |
| 45 // The work of this test is done in the ScanFilterCheckingAdapter. It asserts | 45 // The work of this test is done in the ScanFilterCheckingAdapter. It asserts |
| 46 // that this requestDevice() call tells the platform to scan for only devices | 46 // that this requestDevice() call tells the platform to scan for only devices |
| 47 // that include the Battery, Glucose, or Heart Rate services. | 47 // that include the Battery, Glucose, or Heart Rate services. |
| 48 return navigator.bluetooth.requestDevice({ | 48 return navigator.bluetooth.requestDevice({ |
| 49 filters: [ | 49 filters: [ |
| 50 {services: [batteryServiceUuid]}, | 50 {services: [batteryServiceUuid]}, |
| 51 {services: [glucoseServiceUuid, heartRateServiceUuid]} | 51 {services: [glucoseServiceUuid, heartRateServiceUuid]} |
| 52 ], | 52 ], |
| 53 // The optionalServices shouldn't affect the platform's scan. | 53 // The optionalServices shouldn't affect the platform's scan. |
| 54 optionalServices: [genericAccessServiceUuid] | 54 optionalServices: [genericAccessServiceUuid] |
| 55 }); | 55 }); |
| 56 }, 'Filters restrict the platform\'s Bluetooth scan.'); | 56 }, 'Filters restrict the platform\'s Bluetooth scan.'); |
| 57 | 57 |
| 58 sequential_promise_test(function() { | 58 promise_test(function() { |
| 59 testRunner.setBluetoothMockDataSet('MultiDeviceAdapter'); | 59 testRunner.setBluetoothMockDataSet('MultiDeviceAdapter'); |
| 60 return navigator.bluetooth.requestDevice({ | 60 return navigator.bluetooth.requestDevice({ |
| 61 filters: [{services: [glucoseServiceUuid]}] | 61 filters: [{services: [glucoseServiceUuid]}] |
| 62 }).then(function(device) { | 62 }).then(function(device) { |
| 63 assert_equals(device.name, "Glucose Device"); | 63 assert_equals(device.name, "Glucose Device"); |
| 64 }); | 64 }); |
| 65 }, 'Simple filter selects matching device.'); | 65 }, 'Simple filter selects matching device.'); |
| 66 | 66 |
| 67 sequential_promise_test(function() { | 67 promise_test(function() { |
| 68 testRunner.setBluetoothMockDataSet('MultiDeviceAdapter'); | 68 testRunner.setBluetoothMockDataSet('MultiDeviceAdapter'); |
| 69 return navigator.bluetooth.requestDevice({ | 69 return navigator.bluetooth.requestDevice({ |
| 70 filters: [{services: [genericAccessServiceUuid, heartRateServiceUuid]}] | 70 filters: [{services: [genericAccessServiceUuid, heartRateServiceUuid]}] |
| 71 }).then(function(device) { | 71 }).then(function(device) { |
| 72 assert_equals(device.name, "Heart Rate Device"); | 72 assert_equals(device.name, "Heart Rate Device"); |
| 73 }); | 73 }); |
| 74 }, 'Filter with 2 services returns a matching device.'); | 74 }, 'Filter with 2 services returns a matching device.'); |
| 75 | 75 |
| 76 sequential_promise_test(function() { | 76 promise_test(function() { |
| 77 testRunner.setBluetoothMockDataSet('MultiDeviceAdapter'); | 77 testRunner.setBluetoothMockDataSet('MultiDeviceAdapter'); |
| 78 return navigator.bluetooth.requestDevice({ | 78 return navigator.bluetooth.requestDevice({ |
| 79 filters: [{services: [batteryServiceUuid]}, | 79 filters: [{services: [batteryServiceUuid]}, |
| 80 {services: [heartRateServiceUuid]}] | 80 {services: [heartRateServiceUuid]}] |
| 81 }).then(function(device) { | 81 }).then(function(device) { |
| 82 assert_equals(device.name, "Heart Rate Device"); | 82 assert_equals(device.name, "Heart Rate Device"); |
| 83 }); | 83 }); |
| 84 }, 'An extra filter doesn\'t prevent matching.'); | 84 }, 'An extra filter doesn\'t prevent matching.'); |
| 85 | 85 |
| 86 sequential_promise_test(function() { | 86 promise_test(function() { |
| 87 testRunner.setBluetoothMockDataSet('MultiDeviceAdapter'); | 87 testRunner.setBluetoothMockDataSet('MultiDeviceAdapter'); |
| 88 // Both devices support the Generic Access service, but things need to | 88 // Both devices support the Generic Access service, but things need to |
| 89 // support both services to pass the filter, and neither has a Battery | 89 // support both services to pass the filter, and neither has a Battery |
| 90 // service. | 90 // service. |
| 91 return assert_promise_rejects(navigator.bluetooth.requestDevice({ | 91 return assert_promise_rejects(navigator.bluetooth.requestDevice({ |
| 92 filters: [{services: [genericAccessServiceUuid, batteryServiceUuid]}] | 92 filters: [{services: [genericAccessServiceUuid, batteryServiceUuid]}] |
| 93 }), 'NotFoundError'); | 93 }), 'NotFoundError'); |
| 94 }, 'Too-strict filters do prevent matching.'); | 94 }, 'Too-strict filters do prevent matching.'); |
| 95 | 95 |
| 96 </script> | 96 </script> |
| OLD | NEW |