<!-- Generated by //third_party/blink/web_tests/bluetooth/generate.py -->
<!DOCTYPE html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../resources/testdriver.js"></script>
<script src="../../../resources/testdriver-vendor.js"></script>
<script src="../../../external/wpt/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
const test_desc = 'disconnect() called during a readValue call that ' +
    'fails. Reject with NetworkError.';
const value = new Uint8Array([1]);
const expected = new DOMException(
    'GATT Server is disconnected. Cannot perform GATT operations. ' +
    '(Re)connect first with `device.gatt.connect`.',
    'NetworkError');
let fake_descriptor, device, descriptor;

bluetooth_test(() => getUserDescriptionDescriptor()
    .then(_ => ({fake_descriptor, device, descriptor} = _))
    .then(() => {
      switch ('readValue') {
        case 'readValue':
          return fake_descriptor.setNextReadResponse(GATT_INVALID_HANDLE, null);
        case 'writeValue':
          return fake_descriptor.setNextWriteResponse(GATT_INVALID_HANDLE);
        default:
      }
    })
    .then(() => {
        let promise = assert_promise_rejects_with_message(
            descriptor.readValue(), expected);
        device.gatt.disconnect();
        return promise;
    }),
    test_desc);

</script>
