| // 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 = '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); |