gecko-dev/devtools/client/shared/test/browser_dbg_debugger-statem...

68 строки
1.9 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
/**
* Tests the behavior of the debugger statement.
*/
// Import helpers for the workers
/* import-globals-from helper_workers.js */
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js",
this
);
const TAB_URL = TEST_URI_ROOT + "doc_inline-debugger-statement.html";
add_task(async () => {
const tab = await addTab(TAB_URL);
const target = await TargetFactory.forTab(tab);
await target.attach();
const { client } = target;
const threadFront = await testEarlyDebuggerStatement(client, tab, target);
await testDebuggerStatement(client, tab, threadFront);
await target.destroy();
});
async function testEarlyDebuggerStatement(client, tab, targetFront) {
const onPaused = function(packet) {
ok(false, "Pause shouldn't be called before we've attached!");
};
// using the DebuggerClient to listen to the pause packet, as the
// threadFront is not yet attached.
client.on("paused", onPaused);
// This should continue without nesting an event loop and calling
// the onPaused hook, because we haven't attached yet.
callInTab(tab, "runDebuggerStatement");
client.off("paused", onPaused);
// Now attach and resume...
const [, threadFront] = await targetFront.attachThread();
await threadFront.resume();
ok(true, "Pause wasn't called before we've attached.");
return threadFront;
}
async function testDebuggerStatement(client, tab, threadFront) {
const onPaused = new Promise(resolve => {
threadFront.on("paused", async packet => {
await threadFront.resume();
ok(true, "The pause handler was triggered on a debugger statement.");
resolve();
});
});
// Reach around the debugging protocol and execute the debugger statement.
callInTab(tab, "runDebuggerStatement");
return onPaused;
}