Source code
Revision control
Copy as Markdown
Other Tools
/* Any copyright is dedicated to the Public Domain.
"use strict";
function test(condition, message) {
self.postMessage({ type: "test", result: condition, message });
}
async function runTests() {
try {
const ports = await navigator.serial.getPorts();
test(
ports.length === 1,
"Worker should see the port granted from the window"
);
const port = ports[0];
await port.open({ baudRate: 9600 });
test(true, "port.open() should resolve");
test(
!!port.readable,
"port.readable should be non-null after open in worker"
);
test(
!!port.writable,
"port.writable should be non-null after open in worker"
);
const writer = port.writable.getWriter();
test(!!writer, "port.writable.getWriter() should be non-null");
const encoder = new TextEncoder();
await writer.write(encoder.encode("Echo"));
writer.releaseLock();
const reader = port.readable.getReader();
test(!!reader, "Should get readable stream reader");
const { value, done } = await reader.read();
test(!done, "Read should not be done");
test(value instanceof Uint8Array, "Should receive Uint8Array");
const decoder = new TextDecoder();
const received = decoder.decode(value);
test(received === "Echo", "Should receive echoed data");
reader.releaseLock();
await port.close();
test(true, "port.close() should resolve");
self.postMessage({ type: "done" });
} catch (e) {
self.postMessage({
type: "error",
message: `Test failed: ${e.name}: ${e.message}`,
});
}
}
runTests();