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];
test(port.connected, "Port should be connected initially");
await port.open({ baudRate: 9600 });
test(true, "port.open() should resolve");
const disconnectPromise = new Promise(resolve => {
port.ondisconnect = () => resolve();
});
self.postMessage({ type: "ready_for_disconnect" });
await disconnectPromise;
test(!port.connected, "Port should be disconnected after disconnect event");
const reconnectPromise = new Promise(resolve => {
port.onconnect = () => resolve();
});
self.postMessage({ type: "ready_for_reconnect" });
await reconnectPromise;
test(port.connected, "Port should be connected after reconnect");
await port.open({ baudRate: 9600 });
test(true, "port.open() should succeed after reconnect");
await port.close();
test(true, "port.close() should succeed after reopen");
self.postMessage({ type: "done" });
} catch (e) {
self.postMessage({
type: "error",
message: `Test failed: ${e.name}: ${e.message}`,
});
}
}
runTests();