1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/debugger/test/browser_dbg_cmd-dbg.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,100 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +/** 1.8 + * Tests that the debugger commands work as they should. 1.9 + */ 1.10 + 1.11 +const TEST_URI = EXAMPLE_URL + "doc_cmd-dbg.html"; 1.12 + 1.13 +function test() { 1.14 + return Task.spawn(function() { 1.15 + let options = yield helpers.openTab(TEST_URI); 1.16 + yield helpers.openToolbar(options); 1.17 + 1.18 + yield helpers.audit(options, [{ 1.19 + setup: "dbg open", 1.20 + exec: { output: "" } 1.21 + }]); 1.22 + 1.23 + let [gTab, gDebuggee, gPanel] = yield initDebugger(gBrowser.selectedTab); 1.24 + let gDebugger = gPanel.panelWin; 1.25 + let gThreadClient = gDebugger.gThreadClient; 1.26 + 1.27 + yield helpers.audit(options, [{ 1.28 + setup: "dbg list", 1.29 + exec: { output: /doc_cmd-dbg.html/ } 1.30 + }]); 1.31 + 1.32 + let button = gDebuggee.document.querySelector("input[type=button]"); 1.33 + let output = gDebuggee.document.querySelector("input[type=text]"); 1.34 + 1.35 + let cmd = function(aTyped, aState) { 1.36 + return promise.all([ 1.37 + waitForThreadEvents(gPanel, aState), 1.38 + helpers.audit(options, [{ setup: aTyped, exec: { output: "" } }]) 1.39 + ]); 1.40 + }; 1.41 + 1.42 + let click = function(aElement, aState) { 1.43 + return promise.all([ 1.44 + waitForThreadEvents(gPanel, aState), 1.45 + executeSoon(() => EventUtils.sendMouseEvent({ type: "click" }, aElement, gDebuggee)) 1.46 + ]); 1.47 + } 1.48 + 1.49 + yield cmd("dbg interrupt", "paused"); 1.50 + is(gThreadClient.state, "paused", "Debugger is paused."); 1.51 + 1.52 + yield cmd("dbg continue", "resumed"); 1.53 + isnot(gThreadClient.state, "paused", "Debugger has continued."); 1.54 + 1.55 + yield click(button, "paused"); 1.56 + is(gThreadClient.state, "paused", "Debugger is paused again."); 1.57 + 1.58 + yield cmd("dbg step in", "paused"); 1.59 + yield cmd("dbg step in", "paused"); 1.60 + yield cmd("dbg step in", "paused"); 1.61 + is(output.value, "step in", "Debugger stepped in."); 1.62 + 1.63 + yield cmd("dbg step over", "paused"); 1.64 + is(output.value, "step over", "Debugger stepped over."); 1.65 + 1.66 + yield cmd("dbg step out", "paused"); 1.67 + is(output.value, "step out", "Debugger stepped out."); 1.68 + 1.69 + yield cmd("dbg continue", "paused"); 1.70 + is(output.value, "dbg continue", "Debugger continued."); 1.71 + 1.72 + let closeDebugger = function() { 1.73 + let deferred = promise.defer(); 1.74 + 1.75 + helpers.audit(options, [{ 1.76 + setup: "dbg close", 1.77 + exec: { output: "" } 1.78 + }]) 1.79 + .then(() => { 1.80 + let toolbox = gDevTools.getToolbox(options.target); 1.81 + if (!toolbox) { 1.82 + ok(true, "Debugger is closed."); 1.83 + deferred.resolve(); 1.84 + } else { 1.85 + toolbox.on("destroyed", () => { 1.86 + ok(true, "Debugger just closed."); 1.87 + deferred.resolve(); 1.88 + }); 1.89 + } 1.90 + }); 1.91 + 1.92 + return deferred.promise; 1.93 + }; 1.94 + 1.95 + // We close the debugger twice to ensure 'dbg close' doesn't error when 1.96 + // toolbox is already closed. See bug 884638 for more info. 1.97 + yield closeDebugger(); 1.98 + yield closeDebugger(); 1.99 + yield helpers.closeToolbar(options); 1.100 + yield helpers.closeTab(options); 1.101 + 1.102 + }).then(finish, helpers.handleError); 1.103 +}