<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py -->
<!DOCTYPE html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script>
<script>
'use strict';
bluetooth_test(() => {
  let val = new Uint8Array([1]);
  return setBluetoothFakeAdapter('DisconnectingHealthThermometerAdapter')
      .then(() => requestDeviceWithKeyDown({
              filters: [{services: ['health_thermometer']}],
              optionalServices: [request_disconnection_service_uuid]
            }))
      .then(device => device.gatt.connect())
      .then(gattServer => {
        let measurement_interval;
        return gattServer.getPrimaryService('health_thermometer')
            .then(ht => ht.getCharacteristic('measurement_interval'))
            .then(mi => measurement_interval = mi)
            .then(() => get_request_disconnection(gattServer))
            .then(requestDisconnection => requestDisconnection())
            .then(
                () => assert_promise_rejects_with_message(
                    measurement_interval.getDescriptor(user_description.name),
                    new DOMException(
                        'GATT Server is disconnected. Cannot retrieve descriptors. ' +
                            '(Re)connect first with `device.gatt.connect`.',
                        'NetworkError')));
      });
}, 'Device disconnects before getDescriptor. Reject with NetworkError.');

</script>
