| // 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 = 'AbortController while watching advertisements for two ' + |
| 'devices stops the correct watchAdvertisements() operation.'; |
| |
| bluetooth_test(async (t) => { |
| let health_thermometer_device; |
| let heart_rate_device; |
| { |
| let {device} = await getDiscoveredHealthThermometerDevice(); |
| health_thermometer_device = device; |
| } |
| { |
| let {device} = await getHeartRateDevice( |
| {requestDeviceOptions: heartRateRequestDeviceOptionsDefault}); |
| heart_rate_device = device; |
| } |
| const healthThermometerWatcher = |
| new EventWatcher(t, health_thermometer_device, ['advertisementreceived']); |
| const heartRateWatcher = |
| new EventWatcher(t, heart_rate_device, ['advertisementreceived']); |
| |
| await health_thermometer_device.watchAdvertisements(); |
| |
| let abortController = new AbortController(); |
| await heart_rate_device.watchAdvertisements({signal: abortController.signal}); |
| |
| assert_true(health_thermometer_device.watchingAdvertisements); |
| assert_true(heart_rate_device.watchingAdvertisements); |
| |
| abortController.abort(); |
| assert_true(health_thermometer_device.watchingAdvertisements); |
| assert_false(heart_rate_device.watchingAdvertisements); |
| |
| // This should not cause |heart_rate_device| to receive an Event. |
| await fake_central.simulateAdvertisementReceived(heart_rate_ad_packet); |
| |
| let advertisementreceivedPromise = |
| healthThermometerWatcher.wait_for('advertisementreceived'); |
| await fake_central.simulateAdvertisementReceived( |
| health_thermometer_ad_packet); |
| let evt = await advertisementreceivedPromise; |
| assert_equals(evt.device, health_thermometer_device); |
| }, test_desc); |