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");
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 connectPromise = new Promise(resolve => {
navigator.serial.addEventListener("connect", e => resolve(e.target), {
once: true,
});
});
self.postMessage({ type: "ready_for_connect" });
const connectedPort = await connectPromise;
test(connectedPort === port, "Reconnected port should be the same object");
test(
connectedPort.connected,
"Port should be connected after connect event"
);
self.postMessage({ type: "done" });
} catch (e) {
self.postMessage({
type: "error",
message: `Test failed: ${e.name}: ${e.message}`,
});
}
}
runTests();