| // META: script=/resources/test-only-api.js |
| // META: script=/serial/resources/common.js |
| // META: script=resources/automation.js |
| |
| async function readInto(reader, buffer) { |
| let offset = 0; |
| while (offset < buffer.byteLength) { |
| const {value: view, done} = |
| await reader.read(new Uint8Array(buffer, offset)); |
| buffer = view.buffer; |
| if (done) { |
| break; |
| } |
| offset += view.byteLength; |
| } |
| return buffer; |
| } |
| |
| serial_test(async (t, fake) => { |
| const {port, fakePort} = await getFakeSerialPort(fake); |
| const bufferSize = 1024; |
| await port.open({baudRate: 9600, bufferSize}); |
| |
| const reader = port.readable.getReader({mode: 'byob'}); |
| assert_true(reader instanceof ReadableStreamBYOBReader); |
| |
| await fakePort.writable(); |
| const data = new Uint8Array(bufferSize); |
| for (let i = 0; i < data.byteLength; ++i) |
| data[i] = i & 0xff; |
| fakePort.write(data); |
| |
| let buffer = new ArrayBuffer(512); |
| buffer = await readInto(reader, buffer); |
| assert_equals(512, buffer.byteLength, 'original size retained'); |
| compareArrays(data.subarray(0, 512), new Uint8Array(buffer)); |
| |
| buffer = await readInto(reader, buffer); |
| assert_equals(512, buffer.byteLength, 'original size retained'); |
| compareArrays(data.subarray(512), new Uint8Array(buffer)); |
| reader.releaseLock(); |
| |
| await port.close(); |
| }, 'Can read specific subsets of the available data'); |
| |
| serial_test(async (t, fake) => { |
| const {port, fakePort} = await getFakeSerialPort(fake); |
| await port.open({baudRate: 9600, bufferSize: 64}); |
| |
| const reader = port.readable.getReader({mode: 'byob'}); |
| assert_true(reader instanceof ReadableStreamBYOBReader); |
| |
| await fakePort.writable(); |
| const data = new Uint8Array(1024); |
| for (let i = 0; i < data.byteLength; ++i) |
| data[i] = i & 0xff; |
| fakePort.write(data); |
| |
| let buffer = new ArrayBuffer(1024); |
| buffer = await readInto(reader, buffer); |
| compareArrays(data, new Uint8Array(buffer)); |
| reader.releaseLock(); |
| |
| await port.close(); |
| }, 'Can read a large amount of data over multiple iterations'); |