diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /devtools/shared/tests/xpcshell/test_debugger_client.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/shared/tests/xpcshell/test_debugger_client.js')
-rw-r--r-- | devtools/shared/tests/xpcshell/test_debugger_client.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/devtools/shared/tests/xpcshell/test_debugger_client.js b/devtools/shared/tests/xpcshell/test_debugger_client.js new file mode 100644 index 0000000000..d908ddfb27 --- /dev/null +++ b/devtools/shared/tests/xpcshell/test_debugger_client.js @@ -0,0 +1,69 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// DevToolsClient tests + +const { + DevToolsServer, +} = require("resource://devtools/server/devtools-server.js"); +const { + DevToolsClient, +} = require("resource://devtools/client/devtools-client.js"); + +add_task(async function () { + await testCloseLoops(); + await fakeTransportShutdown(); +}); + +function createClient() { + DevToolsServer.init(); + DevToolsServer.registerAllActors(); + const client = new DevToolsClient(DevToolsServer.connectPipe()); + return client; +} + +// Ensure that closing the client while it is closing doesn't loop +async function testCloseLoops() { + const client = createClient(); + await client.connect(); + + await new Promise(resolve => { + let called = false; + client.on("closed", async () => { + dump(">> CLOSED\n"); + if (called) { + ok( + false, + "Calling client.close from closed event listener introduce loops" + ); + return; + } + called = true; + await client.close(); + resolve(); + }); + client.close(); + }); +} + +// Check that, if we fake a transport shutdown (like if a device is unplugged) +// the client is automatically closed, and we can still call client.close. +async function fakeTransportShutdown() { + const client = createClient(); + await client.connect(); + + await new Promise(resolve => { + const onClosed = async function () { + client.off("closed", onClosed); + ok(true, "Client emitted 'closed' event"); + resolve(); + }; + client.on("closed", onClosed); + client.transport.close(); + }); + + await client.close(); + ok(true, "client.close() successfully resolves"); +} |