Update web-platform-tests to revision 8119bc10583682676a3db9806c82ed4044e88e13

This commit is contained in:
WPT Sync Bot 2019-07-09 10:22:34 +00:00
parent 56f1e7cbc5
commit 3c256580fa
189 changed files with 4341 additions and 1030 deletions

View file

@ -24,9 +24,9 @@ infrastructure.
[Web Bluetooth Testing API]: https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY/
# Generated gen-* files from generator.py
# Generated gen-* files from generate.py
`generator.py` builds `gen-*.html` tests using templates in
`generate.py` builds `gen-*.html` tests using templates in
`script-tests/*/*.js`.
The subdirectory structure in `bluetooth/script-test/*` is recreated into

View file

@ -1,29 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'HeartRate device properties';
bluetooth_test(
() => getHealthThermometerService()
.then(({service}) => Promise.all([
service.getCharacteristic('temperature_measurement'),
service.getCharacteristic('measurement_interval')
]))
.then(([temperature_measurement, measurement_interval]) => {
let tm_expected_properties =
new TestCharacteristicProperties(['indicate']);
assert_properties_equal(
temperature_measurement.properties, tm_expected_properties);
let mi_expected_properties = new TestCharacteristicProperties(
['read', 'write', 'indicate']);
assert_properties_equal(
measurement_interval.properties, mi_expected_properties);
}),
test_desc);
</script>

View file

@ -0,0 +1,23 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'HeartRate device properties';
bluetooth_test(async () => {
const {service} = await getHealthThermometerService()
const [temperature_measurement, measurement_interval] = await Promise.all([
service.getCharacteristic('temperature_measurement'),
service.getCharacteristic('measurement_interval')
]);
const tm_expected_properties = new TestCharacteristicProperties(['indicate']);
assert_properties_equal(
temperature_measurement.properties, tm_expected_properties);
const mi_expected_properties =
new TestCharacteristicProperties(['read', 'write', 'indicate']);
assert_properties_equal(
measurement_interval.properties, mi_expected_properties);
}, test_desc);

View file

@ -1,22 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Characteristic is removed. Reject with InvalidStateError.';
const expected = new DOMException('GATT Characteristic no longer exists.',
'InvalidStateError');
let characteristic, fake_characteristic;
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(_ => ({characteristic, fake_characteristic} = _))
.then(() => fake_characteristic.remove())
.then(() => assert_promise_rejects_with_message(
characteristic.startNotifications(),
expected,
'Characteristic got removed.')),
test_desc);
</script>

View file

@ -0,0 +1,18 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'Characteristic is removed. Reject with InvalidStateError.';
const expected = new DOMException(
'GATT Characteristic no longer exists.', 'InvalidStateError');
bluetooth_test(async () => {
const {characteristic, fake_characteristic} =
await getMeasurementIntervalCharacteristic();
await fake_characteristic.remove();
await assert_promise_rejects_with_message(
characteristic.startNotifications(), expected,
'Characteristic got removed.');
}, test_desc);

View file

@ -1,23 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Service is removed. Reject with InvalidStateError.';
const expected = new DOMException('GATT Service no longer exists.',
'InvalidStateError');
let characteristic, fake_peripheral, fake_service;
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(_ => ({characteristic, fake_peripheral, fake_service} = _))
.then(() => fake_service.remove())
.then(() => fake_peripheral.simulateGATTServicesChanged())
.then(() => assert_promise_rejects_with_message(
characteristic.startNotifications(),
expected,
'Service got removed.')),
test_desc);
</script>

View file

@ -0,0 +1,18 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'Service is removed. Reject with InvalidStateError.';
const expected =
new DOMException('GATT Service no longer exists.', 'InvalidStateError');
bluetooth_test(async () => {
const {characteristic, fake_peripheral, fake_service} =
await getMeasurementIntervalCharacteristic();
await fake_service.remove();
await fake_peripheral.simulateGATTServicesChanged();
await assert_promise_rejects_with_message(
characteristic.startNotifications(), expected, 'Service got removed.');
}, test_desc);

View file

@ -1,28 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Add multiple event listeners then readValue().';
let characteristic, fake_characteristic;
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(_ => ({characteristic, fake_characteristic} = _))
.then(() => fake_characteristic.setNextReadResponse(GATT_SUCCESS, [0,1,2]))
.then(() => assert_promise_resolves_after_event(
characteristic,
'readValue',
'characteristicvaluechanged',
3 /* attach 3 listeners */))
.then(results => {
let read_value = new Uint8Array(results[0].buffer);
let event_values = results.slice(1).map(v => new Uint8Array(v.buffer));
for (let event_value of event_values) {
assert_equals(event_value.buffer, read_value.buffer);
assert_array_equals(event_value, read_value);
}
}), test_desc);
</script>

View file

@ -0,0 +1,26 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'Add multiple event listeners then readValue().';
bluetooth_test(async () => {
const {characteristic, fake_characteristic} =
await getMeasurementIntervalCharacteristic();
await fake_characteristic.setNextReadResponse(GATT_SUCCESS, [0, 1, 2]);
// Make sure that |characteristic.readValue()| resolves after
// |characteristicvaluechanged| is fired |3| times.
const results = await assert_promise_resolves_after_event(
characteristic /* object */, 'readValue' /* func */,
'characteristicvaluechanged' /* event */, 3 /* num_listeners */);
const read_value = new Uint8Array(results[0].buffer);
const event_values = results.slice(1).map(v => new Uint8Array(v.buffer));
for (const event_value of event_values) {
assert_equals(event_value.buffer, read_value.buffer);
assert_array_equals(event_value, read_value);
}
}, test_desc);

View file

@ -1,22 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Characteristic gets removed. Reject with InvalidStateError.';
const expected = new DOMException('GATT Characteristic no longer exists.',
'InvalidStateError');
let characteristic, fake_characteristic;
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(_ => ({characteristic, fake_characteristic} = _))
.then(() => fake_characteristic.remove())
.then(() => assert_promise_rejects_with_message(
characteristic.readValue(),
expected,
'Characteristic got removed.')),
test_desc);
</script>

View file

@ -0,0 +1,17 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'Characteristic gets removed. Reject with InvalidStateError.';
const expected = new DOMException(
'GATT Characteristic no longer exists.', 'InvalidStateError');
bluetooth_test(async () => {
const {characteristic, fake_characteristic} =
await getMeasurementIntervalCharacteristic();
await fake_characteristic.remove();
await assert_promise_rejects_with_message(
characteristic.readValue(), expected, 'Characteristic got removed.');
}, test_desc);

View file

@ -1,27 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Reading a characteristic should fire an event.';
let characteristic, fake_characteristic;
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(_ => ({characteristic, fake_characteristic} = _))
.then(() => fake_characteristic.setNextReadResponse(
GATT_SUCCESS, [0, 1, 2]))
.then(() => assert_promise_resolves_after_event(
characteristic,
'readValue',
'characteristicvaluechanged'))
.then(results => new Promise(resolve => {
let read_value = new Uint8Array(results[0].buffer);
let event_value = new Uint8Array(results[1].buffer);
assert_equals(event_value.buffer, read_value.buffer);
assert_array_equals(event_value, read_value);
resolve();
})), test_desc);
</script>

View file

@ -0,0 +1,24 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'Reading a characteristic should fire an event.';
bluetooth_test(async () => {
const {characteristic, fake_characteristic} =
await getMeasurementIntervalCharacteristic();
await fake_characteristic.setNextReadResponse(GATT_SUCCESS, [0, 1, 2]);
// Make sure that |characteristic.readValue()| resolves after
// |characteristicvaluechanged| is fired.
const results = await assert_promise_resolves_after_event(
characteristic /* object */, 'readValue' /* func */,
'characteristicvaluechanged' /* event */);
const read_value = new Uint8Array(results[0].buffer);
const event_value = new Uint8Array(results[1].buffer);
assert_equals(event_value.buffer, read_value.buffer);
assert_array_equals(event_value, read_value);
}, test_desc);

View file

@ -1,24 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'A read request succeeds and returns the characteristic\'s ' +
'value.';
const EXPECTED_VALUE = [0, 1, 2];
let characteristic, fake_characteristic;
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(_ => ({characteristic, fake_characteristic} = _))
.then(() => fake_characteristic.setNextReadResponse(
GATT_SUCCESS,
EXPECTED_VALUE))
.then(() => characteristic.readValue())
.then(value => assert_array_equals(
new Uint8Array(value.buffer),
EXPECTED_VALUE)),
test_desc);
</script>

View file

@ -0,0 +1,17 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'A read request succeeds and returns the characteristic\'s ' +
'value.';
const EXPECTED_VALUE = [0, 1, 2];
bluetooth_test(async () => {
const {characteristic, fake_characteristic} =
await getMeasurementIntervalCharacteristic();
await fake_characteristic.setNextReadResponse(GATT_SUCCESS, EXPECTED_VALUE);
const value = await characteristic.readValue();
assert_array_equals(new Uint8Array(value.buffer), EXPECTED_VALUE)
}, test_desc);

View file

@ -1,23 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Succesful read should update characteristic.value';
const EXPECTED_VALUE = [0, 1, 2];
let characteristic, fake_characteristic;
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(_ => ({characteristic, fake_characteristic} = _))
.then(() => assert_equals(characteristic.value, null))
.then(() => fake_characteristic.setNextReadResponse(
GATT_SUCCESS, EXPECTED_VALUE))
.then(() => characteristic.readValue())
.then(() => assert_array_equals(
new Uint8Array(characteristic.value.buffer),
EXPECTED_VALUE)),
test_desc);
</script>

View file

@ -0,0 +1,18 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
const test_desc = 'Succesful read should update characteristic.value';
const EXPECTED_VALUE = [0, 1, 2];
bluetooth_test(async () => {
const {characteristic, fake_characteristic} =
await getMeasurementIntervalCharacteristic();
assert_equals(characteristic.value, null);
await fake_characteristic.setNextReadResponse(GATT_SUCCESS, EXPECTED_VALUE);
await characteristic.readValue();
assert_array_equals(
new Uint8Array(characteristic.value.buffer), EXPECTED_VALUE)
}, test_desc);

View file

@ -1,23 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Service gets removed. Reject with InvalidStateError.';
const expected = new DOMException('GATT Service no longer exists.',
'InvalidStateError');
let characteristic, fake_peripheral, fake_service;
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(_ => ({characteristic, fake_peripheral, fake_service} = _))
.then(() => fake_service.remove())
.then(() => fake_peripheral.simulateGATTServicesChanged())
.then(() => assert_promise_rejects_with_message(
characteristic.readValue(),
expected,
'Service got removed.')),
test_desc);
</script>

View file

@ -0,0 +1,18 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'Service gets removed. Reject with InvalidStateError.';
const expected =
new DOMException('GATT Service no longer exists.', 'InvalidStateError');
bluetooth_test(async () => {
const {characteristic, fake_peripheral, fake_service} =
await getMeasurementIntervalCharacteristic();
await fake_service.remove();
await fake_peripheral.simulateGATTServicesChanged();
await assert_promise_rejects_with_message(
characteristic.readValue(), expected, 'Service got removed.')
}, test_desc);

View file

@ -1,21 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Same parent service returned from multiple characteristics.';
bluetooth_test(
() => getHealthThermometerService()
.then(({service}) => Promise.all([
service.getCharacteristic('measurement_interval'),
service.getCharacteristic('temperature_measurement')
]))
.then(
characteristics => assert_equals(
characteristics[0].service, characteristics[1].service)),
test_desc);
</script>

View file

@ -0,0 +1,16 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'Same parent service returned from multiple characteristics.';
bluetooth_test(async () => {
const {service} = await getHealthThermometerService();
const characteristics = await Promise.all([
service.getCharacteristic('measurement_interval'),
service.getCharacteristic('temperature_measurement')
]);
assert_equals(characteristics[0].service, characteristics[1].service);
}, test_desc);

View file

@ -1,17 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = '[SameObject] test for BluetoothRemoteGATTCharacteristic ' +
'service.';
bluetooth_test(
() => getMeasurementIntervalCharacteristic().then(
({characteristic}) =>
assert_equals(characteristic.service, characteristic.service)),
test_desc);
</script>

View file

@ -0,0 +1,13 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = '[SameObject] test for BluetoothRemoteGATTCharacteristic ' +
'service.';
bluetooth_test(async () => {
const {characteristic} = await getMeasurementIntervalCharacteristic();
assert_equals(characteristic.service, characteristic.service);
}, test_desc);

View file

@ -1,28 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
function detachBuffer(buffer) {
window.postMessage('', '*', [buffer]);
}
bluetooth_test(async (t) => {
let {characteristic, fake_characteristic} =
await getMeasurementIntervalCharacteristic();
let typed_array = Uint8Array.of(1, 2);
detachBuffer(typed_array.buffer);
await promise_rejects(
t, 'InvalidStateError', characteristic.writeValue(typed_array));
let array_buffer = Uint8Array.of(3, 4).buffer;
detachBuffer(array_buffer);
await promise_rejects(
t, 'InvalidStateError', characteristic.writeValue(array_buffer));
}, 'writeValue() fails when passed a detached buffer');
</script>

View file

@ -0,0 +1,25 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'writeValue() fails when passed a detached buffer';
function detachBuffer(buffer) {
window.postMessage('', '*', [buffer]);
}
bluetooth_test(async (t) => {
const {characteristic} = await getMeasurementIntervalCharacteristic();
const typed_array = Uint8Array.of(1, 2);
detachBuffer(typed_array.buffer);
await promise_rejects(
t, 'InvalidStateError', characteristic.writeValue(typed_array));
const array_buffer = Uint8Array.of(3, 4).buffer;
detachBuffer(array_buffer);
await promise_rejects(
t, 'InvalidStateError', characteristic.writeValue(array_buffer));
}, test_desc);

View file

@ -1,22 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Characteristic gets removed. Reject with InvalidStateError.';
const expected = new DOMException('GATT Characteristic no longer exists.',
'InvalidStateError');
let characteristic, fake_characteristic;
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(_ => ({characteristic, fake_characteristic} = _))
.then(() => fake_characteristic.remove())
.then(() => assert_promise_rejects_with_message(
characteristic.writeValue(new ArrayBuffer(1 /* length */)),
expected,
'Characteristic got removed.')),
test_desc);
</script>

View file

@ -0,0 +1,18 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'Characteristic gets removed. Reject with InvalidStateError.';
const expected = new DOMException(
'GATT Characteristic no longer exists.', 'InvalidStateError');
bluetooth_test(async () => {
const {characteristic, fake_characteristic} =
await getMeasurementIntervalCharacteristic();
await fake_characteristic.remove();
await assert_promise_rejects_with_message(
characteristic.writeValue(new ArrayBuffer(1 /* length */)), expected,
'Characteristic got removed.');
}, test_desc);

View file

@ -1,23 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Service gets removed. Reject with InvalidStateError.';
const expected = new DOMException('GATT Service no longer exists.',
'InvalidStateError');
let characteristic, fake_peripheral, fake_service;
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(_ => ({characteristic, fake_peripheral, fake_service} = _))
.then(() => fake_service.remove())
.then(() => fake_peripheral.simulateGATTServicesChanged())
.then(() => assert_promise_rejects_with_message(
characteristic.writeValue(new ArrayBuffer(1 /* length */)),
expected,
'Service got removed.')),
test_desc);
</script>

View file

@ -0,0 +1,19 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'Service gets removed. Reject with InvalidStateError.';
const expected =
new DOMException('GATT Service no longer exists.', 'InvalidStateError');
bluetooth_test(async () => {
const {characteristic, fake_peripheral, fake_service} =
await getMeasurementIntervalCharacteristic();
await fake_service.remove();
await fake_peripheral.simulateGATTServicesChanged();
await assert_promise_rejects_with_message(
characteristic.writeValue(new ArrayBuffer(1 /* length */)), expected,
'Service got removed.');
}, test_desc);

View file

@ -1,41 +0,0 @@
<!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-helpers.js"></script>
<script>
'use strict';
const test_desc = 'A regular write request to a writable characteristic ' +
'should succeed.';
let typed_array = Uint8Array.of(1, 2);
let array_buffer = Uint8Array.of(3, 4).buffer;
let data_view = new DataView(new ArrayBuffer(2));
let characteristic, fake_characteristic;
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(_ => ({characteristic, fake_characteristic} = _))
.then(() => new Promise(resolve => {
data_view.setUint8(0, 5);
data_view.setUint8(1, 6);
resolve();
}))
.then(() => fake_characteristic.getLastWrittenValue())
.then(last_value => assert_true(last_value === null))
.then(() => fake_characteristic.setNextWriteResponse(GATT_SUCCESS))
.then(() => characteristic.writeValue(typed_array))
.then(() => fake_characteristic.getLastWrittenValue())
.then(last_value => assert_array_equals(last_value, [1, 2]))
.then(() => fake_characteristic.setNextWriteResponse(GATT_SUCCESS))
.then(() => characteristic.writeValue(array_buffer))
.then(() => fake_characteristic.getLastWrittenValue())
.then(last_value => assert_array_equals(last_value, [3, 4]))
.then(() => fake_characteristic.setNextWriteResponse(GATT_SUCCESS))
.then(() => characteristic.writeValue(data_view))
.then(() => fake_characteristic.getLastWrittenValue())
.then(last_value => assert_array_equals(last_value, [5, 6])),
test_desc);
</script>

View file

@ -0,0 +1,39 @@
// META: script=/resources/testharness.js
// META: script=/resources/testharnessreport.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=/bluetooth/resources/bluetooth-helpers.js
'use strict';
const test_desc = 'A regular write request to a writable characteristic ' +
'should succeed.';
bluetooth_test(async () => {
const {characteristic, fake_characteristic} =
await getMeasurementIntervalCharacteristic();
let last_value = await fake_characteristic.getLastWrittenValue();
assert_equals(last_value, null);
await fake_characteristic.setNextWriteResponse(GATT_SUCCESS);
const typed_array = Uint8Array.of(1, 2);
await characteristic.writeValue(typed_array);
last_value = await fake_characteristic.getLastWrittenValue();
assert_array_equals(last_value, [1, 2]);
await fake_characteristic.setNextWriteResponse(GATT_SUCCESS);
const array_buffer = Uint8Array.of(3, 4).buffer;
await characteristic.writeValue(array_buffer);
last_value = await fake_characteristic.getLastWrittenValue();
assert_array_equals(last_value, [3, 4]);
await fake_characteristic.setNextWriteResponse(GATT_SUCCESS);
const data_view = new DataView(new ArrayBuffer(2));
data_view.setUint8(0, 5);
data_view.setUint8(1, 6);
await characteristic.writeValue(data_view);
last_value = await fake_characteristic.getLastWrittenValue();
assert_array_equals(last_value, [5, 6]);
}, test_desc);