gecko/browser/devtools/debugger/test/browser_dbg_debuggerstatement.js

71 lines
1.9 KiB
JavaScript

/* vim:set ts=2 sw=2 sts=2 et: */
/*
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
// Tests the behavior of the debugger statement.
var gClient = null;
var gTab = null;
const DEBUGGER_TAB_URL = EXAMPLE_URL + "browser_dbg_debuggerstatement.html";
function test()
{
let transport = DebuggerServer.connectPipe();
gClient = new DebuggerClient(transport);
gClient.connect(function(aType, aTraits) {
gTab = addTab(DEBUGGER_TAB_URL, function() {
attach_tab_actor_for_url(gClient, DEBUGGER_TAB_URL, function(actor, response) {
test_early_debugger_statement(response);
});
});
});
}
function test_early_debugger_statement(aActor)
{
let paused = function(aEvent, aPacket) {
ok(false, "Pause shouldn't be called before we've attached!\n");
finish_test();
};
gClient.addListener("paused", paused);
// This should continue without nesting an event loop and calling
// the onPaused hook, because we haven't attached yet.
gTab.linkedBrowser.contentWindow.wrappedJSObject.runDebuggerStatement();
gClient.removeListener("paused", paused);
// Now attach and resume...
gClient.request({ to: aActor.threadActor, type: "attach" }, function(aResponse) {
gClient.request({ to: aActor.threadActor, type: "resume" }, function(aResponse) {
test_debugger_statement(aActor);
});
});
}
function test_debugger_statement(aActor)
{
var stopped = false;
gClient.addListener("paused", function(aEvent, aPacket) {
stopped = true;
gClient.request({ to: aActor.threadActor, type: "resume" }, function() {
finish_test();
});
});
// Reach around the debugging protocol and execute the debugger
// statement.
gTab.linkedBrowser.contentWindow.wrappedJSObject.runDebuggerStatement();
ok(stopped, "Should trigger the pause handler on a debugger statement.");
}
function finish_test()
{
removeTab(gTab);
gClient.close(function() {
finish();
});
}