| <!DOCTYPE html> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> |
| <script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> |
| <script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> |
| <script src="resources/serial-test-utils.js"></script> |
| <script> |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| |
| assert_equals(port.readable, null); |
| |
| await port.open({ baudrate: 9600 }); |
| const readable = port.readable; |
| assert_true(readable instanceof ReadableStream); |
| |
| await port.close(); |
| assert_equals(port.readable, null); |
| |
| const reader = readable.getReader(); |
| const { value, done } = await reader.read(); |
| assert_true(done); |
| assert_equals(value, undefined); |
| }, 'SerialPort.readable is set by open() and closes on port close'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| |
| await port.open({ baudrate: 9600 }); |
| assert_true(port.readable instanceof ReadableStream); |
| |
| const reader = port.readable.getReader(); |
| await promise_rejects(t, new TypeError(), port.close()); |
| |
| reader.releaseLock(); |
| await port.close(); |
| assert_equals(port.readable, null); |
| }, 'Port cannot be closed while readable is locked'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| // Select a buffer size larger than the amount of data transferred. |
| await port.open({ baudrate: 9600, buffersize: 64 }); |
| |
| const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); |
| fakePort.write(data); |
| |
| const reader = port.readable.getReader(); |
| let { value, done } = await reader.read(); |
| assert_false(done); |
| compareArrays(data, value); |
| reader.releaseLock(); |
| |
| await port.close(); |
| }, 'Can read a small amount of data'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| // Select a buffer size smaller than the amount of data transferred. |
| await port.open({ baudrate: 9600, buffersize: 64 }); |
| |
| const data = new Uint8Array(1024); // Much larger than buffersize above. |
| for (let i = 0; i < data.byteLength; ++i) |
| data[i] = i & 0xff; |
| fakePort.write(data); |
| |
| const reader = port.readable.getReader(); |
| const value = await readWithLength(reader, data.byteLength); |
| compareArrays(data, value); |
| reader.releaseLock(); |
| |
| await port.close(); |
| }, 'Can read a large amount of data'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| // Select a buffer size smaller than the amount of data transferred. |
| await port.open({ baudrate: 9600, buffersize: 64 }); |
| |
| const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); |
| fakePort.write(data); |
| fakePort.simulateParityError(); |
| |
| let readable = port.readable; |
| let reader = readable.getReader(); |
| let { value, done } = await reader.read(); |
| assert_false(done); |
| compareArrays(data, value); |
| |
| await promise_rejects(t, new DOMException('', 'ParityError'), reader.read()); |
| assert_not_equals(port.readable, readable); |
| |
| readable = port.readable; |
| assert_true(readable instanceof ReadableStream); |
| reader = port.readable.getReader(); |
| |
| await fakePort.waitForErrorCleared(); |
| fakePort.write(data); |
| |
| ({ value, done } = await reader.read()); |
| assert_false(done); |
| compareArrays(data, value); |
| reader.releaseLock(); |
| |
| await port.close(); |
| assert_equals(port.readable, null); |
| }, 'Parity error closes readable and replaces it with a new stream'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| // Select a buffer size larger than the amount of data transferred. |
| await port.open({ baudrate: 9600, buffersize: 64 }); |
| |
| fakePort.write(new TextEncoder().encode("Hello world!")); |
| |
| const reader = port.readable.pipeThrough(new TextDecoderStream()).getReader(); |
| let { value, done } = await reader.read(); |
| assert_false(done); |
| assert_equals("Hello world!", value); |
| await reader.cancel(); |
| |
| await port.close(); |
| }, 'Can pipe readable through a transform stream.') |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| // Select a buffer size smaller than the amount of data transferred. |
| await port.open({ baudrate: 9600, buffersize: 64 }); |
| |
| const reader = port.readable.getReader(); |
| const readPromise = reader.read(); |
| await reader.cancel(); |
| let { value, done } = await readPromise; |
| assert_true(done); |
| assert_equals(undefined, value); |
| |
| await port.close(); |
| }, 'Can cancel while reading'); |
| |
| </script> |