| <!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> |
| |
| // Waits for |port| to be marked closed by waiting for the ReadableStream to |
| // close. |
| async function closePortAndWait(port) { |
| const reader = port.readable.getReader(); |
| port.close(); |
| const { value, done } = await reader.read(); |
| assert_true(done); |
| } |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| |
| await port.open({ baudrate: 9600 }); |
| return promise_rejects(t, 'InvalidStateError', port.open({ baudrate: 9600 })); |
| }, 'A SerialPort cannot be opened if it is already open.'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| |
| const firstRequest = port.open({ baudrate: 9600 }); |
| await promise_rejects(t, 'InvalidStateError', port.open({ baudrate: 9600 })); |
| await firstRequest; |
| }, 'Simultaneous calls to open() are disallowed.'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| |
| await promise_rejects(t, new TypeError(), port.open({})); |
| |
| await Promise.all([-1, 0].map(baudrate => { |
| return promise_rejects(t, new TypeError(), port.open({ baudrate })) |
| })); |
| }, 'Baud rate is required and must be greater than zero.'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| |
| await Promise.all([-1, 0, 6, 9].map(databits => { |
| return promise_rejects( |
| t, new TypeError(), port.open({ baudrate: 9600, databits })); |
| })); |
| |
| await [undefined, 7, 8].reduce(async (previousTest, databits) => { |
| await previousTest; |
| await port.open({ baudrate: 9600, databits }); |
| await closePortAndWait(port); |
| }, Promise.resolve()); |
| }, 'Data bits must be 7 or 8'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| |
| await Promise.all([0, null, "cats"].map(parity => { |
| return promise_rejects( |
| t, new TypeError(), port.open({ baudrate: 9600, parity }), |
| `Should reject parity option "${parity}"`); |
| })); |
| |
| await [undefined, "none", "even", "odd"].reduce( |
| async (previousTest, parity) => { |
| await previousTest; |
| await port.open({ baudrate: 9600, parity }); |
| await closePortAndWait(port); |
| }, Promise.resolve()); |
| }, 'Parity must be "none", "even" or "odd"'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| |
| await Promise.all([-1, 0, 3, 4].map(stopbits => { |
| return promise_rejects( |
| t, new TypeError(), port.open({ baudrate: 9600, stopbits })); |
| })); |
| |
| await [undefined, 1, 2].reduce(async (previousTest, stopbits) => { |
| await previousTest; |
| await port.open({ baudrate: 9600, stopbits }); |
| await closePortAndWait(port); |
| }, Promise.resolve()); |
| }, 'Stop bits must be 1 or 2'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| |
| await promise_rejects( |
| t, new TypeError(), port.open({ baudrate: 9600, buffersize: -1 })); |
| await promise_rejects( |
| t, new TypeError(), port.open({ baudrate: 9600, buffersize: 0 })); |
| }, 'Buffer size must be greater than zero.'); |
| |
| serial_test(async (t, fake) => { |
| const { port, fakePort } = await getFakeSerialPort(fake); |
| |
| const buffersize = 1 * 1024 * 1024 * 1024 /* 1 GiB */; |
| return promise_rejects( |
| t, new TypeError(), port.open({ baudrate: 9600, buffersize })); |
| }, 'Unreasonably large buffer sizes are rejected.'); |
| |
| </script> |