Files
tenfourfox/devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

90 lines
2.4 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* Tests the behavior of the debugger statement.
*/
const TAB_URL = EXAMPLE_URL + "doc_inline-debugger-statement.html";
var gClient;
var gTab;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}
let transport = DebuggerServer.connectPipe();
gClient = new DebuggerClient(transport);
gClient.connect((aType, aTraits) => {
is(aType, "browser",
"Root actor should identify itself as a browser.");
addTab(TAB_URL)
.then((aTab) => {
gTab = aTab;
return attachTabActorForUrl(gClient, TAB_URL)
})
.then(testEarlyDebuggerStatement)
.then(testDebuggerStatement)
.then(closeConnection)
.then(finish)
.then(null, aError => {
ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
});
});
}
function testEarlyDebuggerStatement([aGrip, aResponse]) {
let deferred = promise.defer();
let onPaused = function(aEvent, aPacket) {
ok(false, "Pause shouldn't be called before we've attached!");
deferred.reject();
};
gClient.addListener("paused", onPaused);
// This should continue without nesting an event loop and calling
// the onPaused hook, because we haven't attached yet.
callInTab(gTab, "runDebuggerStatement");
gClient.removeListener("paused", onPaused);
// Now attach and resume...
gClient.request({ to: aResponse.threadActor, type: "attach" }, () => {
gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
ok(true, "Pause wasn't called before we've attached.");
deferred.resolve([aGrip, aResponse]);
});
});
return deferred.promise;
}
function testDebuggerStatement([aGrip, aResponse]) {
let deferred = promise.defer();
gClient.addListener("paused", (aEvent, aPacket) => {
gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
ok(true, "The pause handler was triggered on a debugger statement.");
deferred.resolve();
});
});
// Reach around the debugging protocol and execute the debugger statement.
callInTab(gTab, "runDebuggerStatement");
}
function closeConnection() {
let deferred = promise.defer();
gClient.close(deferred.resolve);
return deferred.promise;
}
registerCleanupFunction(function() {
gClient = null;
});