| // META: script=/resources/testdriver.js |
| // META: script=/resources/testdriver-vendor.js |
| // META: script=/bluetooth/resources/bluetooth-test.js |
| // META: script=/bluetooth/resources/bluetooth-fake-devices.js |
| 'use strict'; |
| const test_desc = 'concurrent watchAdvertisements() calls results in the ' + |
| `second call rejecting with 'InvalidStateError'`; |
| |
| bluetooth_test(async (t) => { |
| let {device} = await getDiscoveredHealthThermometerDevice(); |
| const watcher = new EventWatcher(t, device, ['advertisementreceived']); |
| |
| // Start a watchAdvertisements() operation. |
| let firstWatchAdvertisementsPromise = device.watchAdvertisements(); |
| |
| // Start a second watchAdvertisements() operation. This operation should |
| // reject with 'InvalidStateError'. |
| await promise_rejects_dom( |
| t, 'InvalidStateError', device.watchAdvertisements()); |
| |
| // The first watchAdvertisements() operation should resolve successfully. |
| await firstWatchAdvertisementsPromise; |
| |
| let advertisementreceivedPromise = watcher.wait_for('advertisementreceived'); |
| await fake_central.simulateAdvertisementReceived( |
| health_thermometer_ad_packet); |
| let evt = await advertisementreceivedPromise; |
| assert_equals(evt.device, device); |
| }, test_desc); |