summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg_split-console-keypress.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg_split-console-keypress.js')
-rw-r--r--devtools/client/debugger/test/mochitest/browser_dbg_split-console-keypress.js108
1 files changed, 108 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_split-console-keypress.js b/devtools/client/debugger/test/mochitest/browser_dbg_split-console-keypress.js
new file mode 100644
index 000000000..5bfe0a61e
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg_split-console-keypress.js
@@ -0,0 +1,108 @@
+/* -*- 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/ */
+
+/**
+ * When the split console is focused and the debugger is open,
+ * debugger shortcut keys like F11 should work
+ */
+const TAB_URL = EXAMPLE_URL + "doc_step-many-statements.html";
+
+function test() {
+ // This does the same assertions over a series of sub-tests, and it
+ // can timeout in linux e10s. No sense in breaking it up into multiple
+ // tests, so request extra time.
+ requestLongerTimeout(2);
+
+ let gDebugger, gToolbox, gThreadClient, gTab, gPanel;
+ let options = {
+ source: TAB_URL,
+ line: 1
+ };
+ initDebugger(TAB_URL, options).then(([aTab, debuggeeWin, aPanel]) => {
+ gPanel = aPanel;
+ gDebugger = aPanel.panelWin;
+ gToolbox = gDevTools.getToolbox(aPanel.target);
+ gTab = aTab;
+ gThreadClient = gDebugger.DebuggerController.activeThread;
+ testConsole();
+ });
+ let testConsole = Task.async(function* () {
+ // We need to open the split console (with an ESC keypress),
+ // then get the script into a paused state by pressing a button in the page,
+ // ensure focus is in the split console,
+ // synthesize a few keys - important ones we share listener for are
+ // "resumeKey", "stepOverKey", "stepInKey", "stepOutKey"
+ // then check that
+ // * The input cursor remains in the console's input box
+ // * The paused state is as expected
+ // * the debugger cursor is where we want it
+ let jsterm = yield getSplitConsole(gToolbox, gDebugger);
+ // The console is now open (if not make the test fail already)
+ ok(gToolbox.splitConsole, "Split console is shown.");
+
+ // Information for sub-tests. When 'key' is synthesized 'keyRepeat' times,
+ // cursor should be at 'caretLine' of this test..
+ let stepTests = [
+ {key: "VK_F11", keyRepeat: 1, caretLine: 16},
+ {key: "VK_F11", keyRepeat: 2, caretLine: 18},
+ {key: "VK_F11", keyRepeat: 2, caretLine: 27},
+ {key: "VK_F10", keyRepeat: 1, caretLine: 27},
+ {key: "VK_F11", keyRepeat: 1, caretLine: 18},
+ {key: "VK_F11", keyRepeat: 5, caretLine: 32},
+ {key: "VK_F11", modifier:"Shift", keyRepeat: 1, caretLine: 29},
+ {key: "VK_F11", modifier:"Shift", keyRepeat: 2, caretLine: 34},
+ {key: "VK_F11", modifier:"Shift", keyRepeat: 2, caretLine: 34}
+ ];
+ // Trigger script that stops at debugger statement
+ executeSoon(() => generateMouseClickInTab(gTab,
+ "content.document.getElementById('start')"));
+ yield waitForPause(gThreadClient);
+
+ // Focus the console and add event listener to track whether it loses focus
+ // (Must happen after generateMouseClickInTab() call)
+ let consoleLostFocus = false;
+ jsterm.focus();
+ jsterm.inputNode.addEventListener("blur", () => {consoleLostFocus = true;});
+
+ is(gThreadClient.paused, true,
+ "Should be paused at debugger statement.");
+ // As long as we have test work to do..
+ for (let i = 0, thisTest; thisTest = stepTests[i]; i++) {
+ // First we send another key event if required by the test
+ while (thisTest.keyRepeat > 0) {
+ thisTest.keyRepeat --;
+ let keyMods = thisTest.modifier === "Shift" ? {shiftKey:true} : {};
+ executeSoon(() => {EventUtils.synthesizeKey(thisTest.key, keyMods);});
+ yield waitForPause(gThreadClient);
+ }
+
+ // We've sent the required number of keys
+ // Here are the conditions we're interested in: paused state,
+ // cursor still in console (tested later), caret correct in editor
+ is(gThreadClient.paused, true,
+ "Should still be paused");
+ // ok(isCaretPos(gPanel, thisTest.caretLine),
+ // "Test " + i + ": CaretPos at line " + thisTest.caretLine);
+ ok(isDebugPos(gPanel, thisTest.caretLine),
+ "Test " + i + ": DebugPos at line " + thisTest.caretLine);
+ }
+ // Did focus go missing while we were stepping?
+ is(consoleLostFocus, false, "Console input should not lose focus");
+ // We're done with the tests in the stepTests array
+ // Last key we test is "resume"
+ executeSoon(() => EventUtils.synthesizeKey("VK_F8", {}));
+
+ // We reset the variable tracking loss of focus to test the resume case
+ consoleLostFocus = false;
+
+ gPanel.target.on("thread-resumed", () => {
+ is(gThreadClient.paused, false,
+ "Should not be paused after resume");
+ // Final test: did we preserve console inputNode focus during resume?
+ is(consoleLostFocus, false, "Resume - console should keep focus");
+ closeDebuggerAndFinish(gPanel);
+ });
+ });
+}