| // 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 = 'If a site disconnects from a device while the platform is ' + |
| 'disconnecting that device, only one gattserverdisconnected event should ' + |
| 'fire.'; |
| |
| bluetooth_test(async () => { |
| const {device, fake_peripheral} = await getConnectedHealthThermometerDevice(); |
| let num_events = 0; |
| |
| // 1. Listen for disconnections. |
| device.addEventListener('gattserverdisconnected', () => num_events++); |
| |
| // 2. Disconnect several times. |
| await Promise.all([ |
| eventPromise(device, 'gattserverdisconnected'), |
| fake_peripheral.simulateGATTDisconnection(), |
| device.gatt.disconnect(), |
| device.gatt.disconnect(), |
| ]); |
| |
| // 3. Wait to catch disconnect events. |
| await new Promise(resolve => step_timeout(resolve, 50)); |
| |
| // 4. Ensure there is exactly 1 disconnection recorded. |
| assert_equals(num_events, 1); |
| }, test_desc); |