From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- .../mochitest/browser_dbg_debugger-statement.js | 87 ++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js (limited to 'devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js') diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js b/devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js new file mode 100644 index 000000000..7378123f8 --- /dev/null +++ b/devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js @@ -0,0 +1,87 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* 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().then(([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(() => gClient.close()) + .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"); + + return deferred.promise; +} + +registerCleanupFunction(function () { + gClient = null; +}); -- cgit v1.2.3