summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/bluetooth/device/gattserverdisconnected-event/one-event-per-disconnection.https.window.js
blob: ab273adbc88bcd4d03c9bf5309a34cb30cf3246a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 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);