/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ /* global SerialPort */ "use strict"; function test(condition, message) { self.postMessage({ type: "test", result: condition, message, }); } async function runTests() { try { // Note that most of this is tested in idlharness tests in // testing/web-platform/tests/serial/idlharness.https.any.js, this is just // a few extra tests test(!!navigator.serial, "navigator.serial should be defined in worker"); test( navigator.serial instanceof EventTarget, "navigator.serial should be an EventTarget in worker" ); let initialOnConnect = navigator.serial.onconnect; navigator.serial.onconnect = () => {}; test( typeof navigator.serial.onconnect === "function", "Should be able to assign onconnect event handler in worker" ); navigator.serial.onconnect = initialOnConnect; let initialOnDisconnect = navigator.serial.ondisconnect; navigator.serial.ondisconnect = () => {}; test( typeof navigator.serial.ondisconnect === "function", "Should be able to assign ondisconnect event handler in worker" ); navigator.serial.ondisconnect = initialOnDisconnect; let eventListenerCalled = false; const testListener = () => { eventListenerCalled = true; }; navigator.serial.addEventListener("connect", testListener); navigator.serial.removeEventListener("connect", testListener); test( !eventListenerCalled, "Should be able to add and remove event listeners without errors" ); let ports = await navigator.serial.getPorts(); test(Array.isArray(ports), "getPorts() should return an array in worker"); test( ports.length === 0, "getPorts() should return empty array initially in worker" ); self.postMessage({ type: "done" }); } catch (e) { self.postMessage({ type: "error", message: `Test failed: ${e.message}`, }); } } runTests();