From cd1dfe6c680b25ac26f3f80af9e75a98bf88ae99 Mon Sep 17 00:00:00 2001 From: Julian Descottes Date: Mon, 4 Dec 2017 18:55:55 +0100 Subject: [PATCH] Bug 1408933 - enable and rename browser_webconsole_ctrl_key_nav.js;r=bgrins Initially tried to port the test to work on all OSes, relying on HOME/END/PAGEUP/PAGEDOWN, but the behavior is not really consistent (at least not on Linux). The shortcuts listed on MDN at https://developer.mozilla.org/en-US/docs/Tools/Web_Console/Keyboard_shortcuts seem a bit out of sync. Not sure why we cannot use home/end/pageup/pagedown on all platforms here but as it is not the purpose of this migration, I will leave that up for a follow up. MozReview-Commit-ID: DJbmYzYZUok --HG-- rename : devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_ctrl_key_nav.js => devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_ctrl_key_nav.js extra : rebase_source : 3d91fef9f40e43a40b8f24f0f261726e09a77f2a --- .../test/mochitest/browser.ini | 2 + ..._nav.js => browser_jsterm_ctrl_key_nav.js} | 123 ++++++++++-------- 2 files changed, 71 insertions(+), 54 deletions(-) rename devtools/client/webconsole/new-console-output/test/mochitest/{browser_webconsole_ctrl_key_nav.js => browser_jsterm_ctrl_key_nav.js} (78%) diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini b/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini index 6f5ffeea46e6..5598be5c390c 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini @@ -213,6 +213,8 @@ skip-if = true # Bug 1403188 [browser_jsterm_autocomplete-properties-with-non-alphanumeric-names.js] [browser_jsterm_completion.js] [browser_jsterm_copy_command.js] +[browser_jsterm_ctrl_key_nav.js] +skip-if = os != 'mac' # The tested ctrl+key shortcuts are OSX only [browser_jsterm_dollar.js] [browser_jsterm_history.js] [browser_jsterm_history_persist.js] diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_ctrl_key_nav.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_ctrl_key_nav.js similarity index 78% rename from devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_ctrl_key_nav.js rename to devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_ctrl_key_nav.js index b040e63144e8..1a0a2da0dfa3 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_ctrl_key_nav.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_ctrl_key_nav.js @@ -5,46 +5,39 @@ // Test navigation of webconsole contents via ctrl-a, ctrl-e, ctrl-p, ctrl-n // see https://bugzilla.mozilla.org/show_bug.cgi?id=804845 +// +// The shortcuts tested here have platform limitations: +// - ctrl-e does not work on windows, +// - ctrl-a, ctrl-p and ctrl-n only work on OSX "use strict"; const TEST_URI = "data:text/html;charset=utf-8,Web Console test for " + "bug 804845 and bug 619598"; -var jsterm, inputNode; +add_task(async function () { + const {jsterm} = await openNewTabAndConsole(TEST_URI); -add_task(function* () { - yield loadTab(TEST_URI); - - let hud = yield openConsole(); - - doTests(hud); - - jsterm = inputNode = null; -}); - -function doTests(HUD) { - jsterm = HUD.jsterm; - inputNode = jsterm.inputNode; ok(!jsterm.getInputValue(), "jsterm.getInputValue() is empty"); is(jsterm.inputNode.selectionStart, 0); is(jsterm.inputNode.selectionEnd, 0); - testSingleLineInputNavNoHistory(); - testMultiLineInputNavNoHistory(); - testNavWithHistory(); -} + testSingleLineInputNavNoHistory(jsterm); + testMultiLineInputNavNoHistory(jsterm); + testNavWithHistory(jsterm); +}); -function testSingleLineInputNavNoHistory() { +function testSingleLineInputNavNoHistory(jsterm) { + let inputNode = jsterm.inputNode; // Single char input EventUtils.synthesizeKey("1", {}); is(inputNode.selectionStart, 1, "caret location after single char input"); // nav to start/end with ctrl-a and ctrl-e; - EventUtils.synthesizeKey("a", { ctrlKey: true }); + synthesizeLineStartKey(); is(inputNode.selectionStart, 0, "caret location after single char input and ctrl-a"); - EventUtils.synthesizeKey("e", { ctrlKey: true }); + synthesizeLineEndKey(); is(inputNode.selectionStart, 1, "caret location after single char input and ctrl-e"); @@ -58,34 +51,35 @@ function testSingleLineInputNavNoHistory() { is(inputNode.selectionStart, 2, "caret location after two char input and VK_DOWN"); - EventUtils.synthesizeKey("a", { ctrlKey: true }); + synthesizeLineStartKey(); is(inputNode.selectionStart, 0, "move caret to beginning of 2 char input with ctrl-a"); - EventUtils.synthesizeKey("a", { ctrlKey: true }); + synthesizeLineStartKey(); is(inputNode.selectionStart, 0, "no change of caret location on repeat ctrl-a"); - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineUpKey(); is(inputNode.selectionStart, 0, "no change of caret location on ctrl-p from beginning of line"); - EventUtils.synthesizeKey("e", { ctrlKey: true }); + synthesizeLineEndKey(); is(inputNode.selectionStart, 2, "move caret to end of 2 char input with ctrl-e"); - EventUtils.synthesizeKey("e", { ctrlKey: true }); + synthesizeLineEndKey(); is(inputNode.selectionStart, 2, "no change of caret location on repeat ctrl-e"); - EventUtils.synthesizeKey("n", { ctrlKey: true }); + synthesizeLineDownKey(); is(inputNode.selectionStart, 2, "no change of caret location on ctrl-n from end of line"); - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineUpKey(); is(inputNode.selectionStart, 0, "ctrl-p moves to start of line"); - EventUtils.synthesizeKey("n", { ctrlKey: true }); + synthesizeLineDownKey(); is(inputNode.selectionStart, 2, "ctrl-n moves to end of line"); } -function testMultiLineInputNavNoHistory() { +function testMultiLineInputNavNoHistory(jsterm) { + let inputNode = jsterm.inputNode; let lineValues = ["one", "2", "something longer", "", "", "three!"]; jsterm.setInputValue(""); // simulate shift-return @@ -113,43 +107,43 @@ function testMultiLineInputNavNoHistory() { "down arrow from within multiline"); // navigate up through input lines - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineUpKey(); is(jsterm.getInputValue().slice(inputNode.selectionStart), expectedStringAfterCarat, "ctrl-p from end of multiline"); for (let i = 4; i >= 0; i--) { - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineUpKey(); expectedStringAfterCarat = lineValues[i] + newlineString + expectedStringAfterCarat; is(jsterm.getInputValue().slice(inputNode.selectionStart), expectedStringAfterCarat, "ctrl-p from within line " + i + " of multiline input"); } - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineUpKey(); is(inputNode.selectionStart, 0, "reached start of input"); is(jsterm.getInputValue(), inputValue, "no change to multiline input on ctrl-p from beginning of multiline"); // navigate to end of first line - EventUtils.synthesizeKey("e", { ctrlKey: true }); + synthesizeLineEndKey(); let caretPos = inputNode.selectionStart; let expectedStringBeforeCarat = lineValues[0]; is(jsterm.getInputValue().slice(0, caretPos), expectedStringBeforeCarat, "ctrl-e into multiline input"); - EventUtils.synthesizeKey("e", { ctrlKey: true }); + synthesizeLineEndKey(); is(inputNode.selectionStart, caretPos, "repeat ctrl-e doesn't change caret position in multiline input"); // navigate down one line; ctrl-a to the beginning; ctrl-e to end for (let i = 1; i < lineValues.length; i++) { - EventUtils.synthesizeKey("n", { ctrlKey: true }); - EventUtils.synthesizeKey("a", { ctrlKey: true }); + synthesizeLineDownKey(); + synthesizeLineStartKey(); caretPos = inputNode.selectionStart; expectedStringBeforeCarat += newlineString; is(jsterm.getInputValue().slice(0, caretPos), expectedStringBeforeCarat, "ctrl-a to beginning of line " + (i + 1) + " in multiline input"); - EventUtils.synthesizeKey("e", { ctrlKey: true }); + synthesizeLineEndKey(); caretPos = inputNode.selectionStart; expectedStringBeforeCarat += lineValues[i]; is(jsterm.getInputValue().slice(0, caretPos), expectedStringBeforeCarat, @@ -157,13 +151,17 @@ function testMultiLineInputNavNoHistory() { } } -function testNavWithHistory() { +function testNavWithHistory(jsterm) { + let inputNode = jsterm.inputNode; + // NOTE: Tests does NOT currently define behaviour for ctrl-p/ctrl-n with // caret placed _within_ single line input - let values = ['"single line input"', - '"a longer single-line input to check caret repositioning"', - ['"multi-line"', '"input"', '"here!"'].join("\n"), - ]; + let values = [ + '"single line input"', + '"a longer single-line input to check caret repositioning"', + '"multi-line"\n"input"\n"here!"', + ]; + // submit to history for (let i = 0; i < values.length; i++) { jsterm.setInputValue(values[i]); @@ -171,7 +169,7 @@ function testNavWithHistory() { } is(inputNode.selectionStart, 0, "caret location at start of empty line"); - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineUpKey(); is(inputNode.selectionStart, values[values.length - 1].length, "caret location correct at end of last history input"); @@ -180,20 +178,21 @@ function testNavWithHistory() { let match = values[i].match(/(\n)/g); if (match) { // multi-line inputs won't update from history unless caret at beginning - EventUtils.synthesizeKey("a", { ctrlKey: true }); + synthesizeLineStartKey(); for (let j = 0; j < match.length; j++) { - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineUpKey(); } - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineUpKey(); } else { // single-line inputs will update from history from end of line - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineUpKey(); } is(jsterm.getInputValue(), values[i - 1], "ctrl-p updates inputNode from backwards history values[" + i - 1 + "]"); } + let inputValue = jsterm.getInputValue(); - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineUpKey(); is(inputNode.selectionStart, 0, "ctrl-p at beginning of history moves caret location to beginning " + "of line"); @@ -202,13 +201,13 @@ function testNavWithHistory() { // Navigate forwards history with ctrl-n for (let i = 1; i < values.length; i++) { - EventUtils.synthesizeKey("n", { ctrlKey: true }); + synthesizeLineDownKey(); is(jsterm.getInputValue(), values[i], "ctrl-n updates inputNode from forwards history values[" + i + "]"); is(inputNode.selectionStart, values[i].length, "caret location correct at end of history input for values[" + i + "]"); } - EventUtils.synthesizeKey("n", { ctrlKey: true }); + synthesizeLineDownKey(); ok(!jsterm.getInputValue(), "ctrl-n at end of history updates to empty input"); // Simulate editing multi-line @@ -216,12 +215,28 @@ function testNavWithHistory() { jsterm.setInputValue(inputValue); // Attempt nav within input - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineUpKey(); is(jsterm.getInputValue(), inputValue, "ctrl-p from end of multi-line does not trigger history"); - EventUtils.synthesizeKey("a", { ctrlKey: true }); - EventUtils.synthesizeKey("p", { ctrlKey: true }); + synthesizeLineStartKey(); + synthesizeLineUpKey(); is(jsterm.getInputValue(), values[values.length - 1], "ctrl-p from start of multi-line triggers history"); } + +function synthesizeLineStartKey() { + EventUtils.synthesizeKey("a", { ctrlKey: true }); +} + +function synthesizeLineEndKey() { + EventUtils.synthesizeKey("e", { ctrlKey: true }); +} + +function synthesizeLineUpKey() { + EventUtils.synthesizeKey("p", { ctrlKey: true }); +} + +function synthesizeLineDownKey() { + EventUtils.synthesizeKey("n", { ctrlKey: true }); +}