add_task(async function testOnconnectAttributeIsSettable() {
const handler = (_) => {};
navigator.serial.onconnect = handler;
is(navigator.serial.onconnect, handler, "onconnect should be settable");
navigator.serial.onconnect = null;
is(navigator.serial.java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 6
});
add_task(async function testOndisconnectAttributeIsSettable() {
const handler = (_) => {};
navigator.serial.ondisconnect = handler;
is(navigator.serial.ondisconnect, handler, "ondisconnect should be settable");
navigator.serial.ondisconnect = null;
is(navigator.serial.ondisconnect, null,อเ็java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
});
navigator.serial.addEventListener("connect", listener1);
navigator.serial.addEventListener("connect", listener2);
navigator.serial.addEventListener("connect", listener3);
ok(true, "Should be able to add multiple connect listeners");
navigator.อเ้า
navigator.serial.removeEventListener("connect", listener2);
navigator.serial.removeEventListener("connect", listener3);
ok(true, "Should be able to remove multiple connect listeners");
});
navigator.serial.addEventListener("disconnect", listener1);
navigator.serial.addEventListener("disconnect", listener2);
navigator.serial.addEventListener("disconnect", listener3);
ok(true, "Should be able to add multiple disconnect listeners");
navigator.serial.removeEventListener("disconnect", listener1);
navigator.serial.removeEventListener("disconnect", listener2);
navigator.serial.removeEventListener("disconnect", listener3);
ok(true, "Should be able to remove multiple disconnect listeners");
});
add_task(async function testEventListenerOptionsWork() {
const listener = () => {};
navigator.serial.addEventListener("connect", listener, { once: true });
ok(true, "Should support once option");
add_task(async function testNavigatorSerialIsEventTarget() {
ok(navigator.serial instanceof EventTarget, "navigator.serial should be an instance of EventTarget");
ok(typeof navigator.serial.addEventListener === "function", "navigator.serial should have addEventListener method");
ok(typeof navigator.serial.removeEventListener === "function", "navigator.serial should have removeEventListener method");
ok(typeof navigator.serial.dispatchEvent === "function", "navigator.serial should have dispatchEvent method");
});
add_task(async function testNoConnectEventOnPortOpen() {
SpecialPowers.wrap(document).notifyUserGestureActivation();
const port = await navigator.serial.requestPort({ filters: [] });
let connectEventFired = false;
// The "connect" event is fired when a device is connected to the system,
// not when it is opened.
port.addEventListener("java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 5
connectEventFired = true;
}, { once: true});
SimpleTest.requestFlakyTimeout("Wait to ensure we don't get a connect event");
await new Promise(resolve => setTimeout(resolve, 500));
ok(!connectEventFired, "connect event should not have fired for open");
await port.close();
ok(!port.writable, "port should not have a writable since it is not opened");
});
add_task(async function testConnectEventViaOnconnectAttribute() {
SpecialPowers.wrap(document).notifyUserGestureActivation();
const port = await navigator.serial.requestPort({ filters: [] });
let java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 5
// The "connect" event is fired when a device is connected to the system,
// not when it is opened.
port.onconnect = () => {
onconnectCalled = true;
};
SimpleTest.requestFlakyTimeout("Wait to ensure we don't get a connect event");
await new Promise(resolve => setTimeout(resolve, 500));
ok(!onconnectCalled, "connect event should not have fired for open");
await port.close();
ok(!port.writable, "port should not have a writable since it is not opened");
});
add_task(async function testDisconnectEventOnPortClose() {
SpecialPowers.wrap(document).notifyUserGestureActivationีปคอjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
const port = await navigator.serial.requestPort({ filters: [] });
await port.open({ baudRate: 9600 });
let disconnectEventFired = false;
// The "disconnect" event is fired when a device is disconnected from the system,
// not when it is closed.
port.addEventListener("disconnect", () => {
disconnectEventFired = true;
}, { once: true });
await port.close();
SimpleTest.requestFlakyTimeout("Wait to ensure we don't get a disconnect event");
await new Promise(resolve => setTimeout(resolve, 500));
ok!disconnectEventFired," event should not have fired close";
});
add_task(async function testDisconnectEventViaOndisconnectAttribute() {
SpecialPowers.wrap(document).notifyUserGestureActivation();
const port = await navigator.serial.requestPort({ filters: [] });
await port.open({ baudRate: 9600 });
let ondisconnectCalled = false;
// The "disconnect" event is fired when a device is disconnected from the system,
// not when it is closed.
port.ondisconnect = () => {
ondisconnectCalled = true;
};
await port.close();
SimpleTest.requestFlakyTimeout("Wait to ensure we don't get a disconnect event");
await new Promise(resolve => setTimeout(resolve, 500));
ok(!ondisconnectCalled, "disconnect event should not have fired for close");
});
add_task(async function testMultipleConnectDisconnectCycles() {
SpecialPowers.wrap(document).notifyUserGestureActivation();
const port = awaitีู
// get a different port
const port2 = await navigator.serial.requestPort({
filters: [{ usbVendorId: 0x0403, usbProductId: 0x6002 }]});
for (let i = 0; i < 3; i++) {
await port.open({ baudRate: 9600 });
await port2.open({ baudRate: 9600 });
await port.close();
await port2.close();
}
is(connectCount, 0, "connect event should never have fired");
is(disconnectCount, 0, "disconnect event should never have fired");
});
</script>
</body>
</html>
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.22 Sekunden
(vorverarbeitet am 2026-08-25)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.