<!-- 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="/bluetooth/resources/bluetooth-test.js"></script>
<script src="/bluetooth/resources/bluetooth-fake-devices.js"></script>
<script>
'use strict';
const test_desc = 'disconnect() called before writeValueWithoutResponse. ' +
    'Reject with NetworkError.';
const value = new Uint8Array([1]);
let device, characteristic, fake_peripheral;

function createDOMException(func) {
  return new DOMException(
      `Failed to execute '${func}' on 'BluetoothRemoteGATTCharacteristic': ` +
      `GATT Server is disconnected. Cannot perform GATT operations. ` +
      `(Re)connect first with \`device.gatt.connect\`.`,
      'NetworkError');
}

bluetooth_test(() => getMeasurementIntervalCharacteristic()
    .then(_ => ({device, characteristic, fake_peripheral} = _))
    .then(() => {
      device.gatt.disconnect();
      return assert_promise_rejects_with_message(
        characteristic.writeValueWithoutResponse(value),
        createDOMException('writeValueWithoutResponse'));
    }),
    test_desc);

</script>
