browser/devtools/debugger/test/browser_dbg_debugger-statement.js

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:bbce911e2d15
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 /**
5 * Tests the behavior of the debugger statement.
6 */
7
8 const TAB_URL = EXAMPLE_URL + "doc_inline-debugger-statement.html";
9
10 let gClient;
11
12 function test() {
13 if (!DebuggerServer.initialized) {
14 DebuggerServer.init(() => true);
15 DebuggerServer.addBrowserActors();
16 }
17
18 let transport = DebuggerServer.connectPipe();
19 gClient = new DebuggerClient(transport);
20 gClient.connect((aType, aTraits) => {
21 is(aType, "browser",
22 "Root actor should identify itself as a browser.");
23
24 addTab(TAB_URL)
25 .then(() => attachTabActorForUrl(gClient, TAB_URL))
26 .then(testEarlyDebuggerStatement)
27 .then(testDebuggerStatement)
28 .then(closeConnection)
29 .then(finish)
30 .then(null, aError => {
31 ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
32 });
33 });
34 }
35
36 function testEarlyDebuggerStatement([aGrip, aResponse]) {
37 let deferred = promise.defer();
38
39 let onPaused = function(aEvent, aPacket) {
40 ok(false, "Pause shouldn't be called before we've attached!");
41 deferred.reject();
42 };
43
44 gClient.addListener("paused", onPaused);
45
46 // This should continue without nesting an event loop and calling
47 // the onPaused hook, because we haven't attached yet.
48 let debuggee = gBrowser.selectedTab.linkedBrowser.contentWindow.wrappedJSObject;
49 debuggee.runDebuggerStatement();
50
51 gClient.removeListener("paused", onPaused);
52
53 // Now attach and resume...
54 gClient.request({ to: aResponse.threadActor, type: "attach" }, () => {
55 gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
56 ok(true, "Pause wasn't called before we've attached.");
57 deferred.resolve([aGrip, aResponse]);
58 });
59 });
60
61 return deferred.promise;
62 }
63
64 function testDebuggerStatement([aGrip, aResponse]) {
65 let deferred = promise.defer();
66
67 gClient.addListener("paused", (aEvent, aPacket) => {
68 gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
69 ok(true, "The pause handler was triggered on a debugger statement.");
70 deferred.resolve();
71 });
72 });
73
74 // Reach around the debugging protocol and execute the debugger statement.
75 let debuggee = gBrowser.selectedTab.linkedBrowser.contentWindow.wrappedJSObject;
76 debuggee.runDebuggerStatement();
77 }
78
79 function closeConnection() {
80 let deferred = promise.defer();
81 gClient.close(deferred.resolve);
82 return deferred.promise;
83 }
84
85 registerCleanupFunction(function() {
86 removeTab(gBrowser.selectedTab);
87 gClient = null;
88 });
89

mercurial