69 lines
1.7 KiB
JavaScript
69 lines
1.7 KiB
JavaScript
/* 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");
|
|
}
|