1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/devtools/server/tests/unit/test_dbgclient_debuggerstatement.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,76 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +Cu.import("resource://gre/modules/devtools/dbg-server.jsm"); 1.8 +Cu.import("resource://gre/modules/devtools/dbg-client.jsm"); 1.9 + 1.10 +var gClient; 1.11 +var gTabClient; 1.12 +var gDebuggee; 1.13 + 1.14 +function run_test() 1.15 +{ 1.16 + initTestDebuggerServer(); 1.17 + gDebuggee = testGlobal("test-1"); 1.18 + DebuggerServer.addTestGlobal(gDebuggee); 1.19 + 1.20 + let transport = DebuggerServer.connectPipe(); 1.21 + gClient = new DebuggerClient(transport); 1.22 + gClient.connect(function(aType, aTraits) { 1.23 + attachTestTab(gClient, "test-1", function(aReply, aTabClient) { 1.24 + gTabClient = aTabClient; 1.25 + test_threadAttach(aReply.threadActor); 1.26 + }); 1.27 + }); 1.28 + do_test_pending(); 1.29 +} 1.30 + 1.31 +function test_threadAttach(aThreadActorID) 1.32 +{ 1.33 + do_print("Trying to attach to thread " + aThreadActorID); 1.34 + gTabClient.attachThread({}, function(aResponse, aThreadClient) { 1.35 + do_check_eq(aThreadClient.state, "paused"); 1.36 + do_check_eq(aThreadClient.actor, aThreadActorID); 1.37 + aThreadClient.resume(function() { 1.38 + do_check_eq(aThreadClient.state, "attached"); 1.39 + test_debugger_statement(aThreadClient); 1.40 + }); 1.41 + }); 1.42 +} 1.43 + 1.44 +function test_debugger_statement(aThreadClient) 1.45 +{ 1.46 + aThreadClient.addListener("paused", function(aEvent, aPacket) { 1.47 + do_check_eq(aThreadClient.state, "paused"); 1.48 + // Reach around the protocol to check that the debuggee is in the state 1.49 + // we expect. 1.50 + do_check_true(gDebuggee.a); 1.51 + do_check_false(gDebuggee.b); 1.52 + 1.53 + let xpcInspector = Cc["@mozilla.org/jsinspector;1"].getService(Ci.nsIJSInspector); 1.54 + do_check_eq(xpcInspector.eventLoopNestLevel, 1); 1.55 + 1.56 + aThreadClient.resume(cleanup); 1.57 + }); 1.58 + 1.59 + Cu.evalInSandbox("var a = true; var b = false; debugger; var b = true;", gDebuggee); 1.60 + 1.61 + // Now make sure that we've run the code after the debugger statement... 1.62 + do_check_true(gDebuggee.b); 1.63 +} 1.64 + 1.65 +function cleanup() 1.66 +{ 1.67 + gClient.addListener("closed", function(aEvent) { 1.68 + do_test_finished(); 1.69 + }); 1.70 + 1.71 + try { 1.72 + let xpcInspector = Cc["@mozilla.org/jsinspector;1"].getService(Ci.nsIJSInspector); 1.73 + do_check_eq(xpcInspector.eventLoopNestLevel, 0); 1.74 + } catch(e) { 1.75 + dump(e); 1.76 + } 1.77 + 1.78 + gClient.close(); 1.79 +}