diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_jsterm_editor_reverse_search_keyboard_navigation.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_jsterm_editor_reverse_search_keyboard_navigation.js | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_jsterm_editor_reverse_search_keyboard_navigation.js b/devtools/client/webconsole/test/browser/browser_jsterm_editor_reverse_search_keyboard_navigation.js new file mode 100644 index 0000000000..0b9b828ce3 --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_jsterm_editor_reverse_search_keyboard_navigation.js @@ -0,0 +1,123 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Ensure keyboard navigation works in editor mode and does +// not trigger reader mode (See 1682340). + +const TEST_URI = `http://example.com/browser/toolkit/components/reader/test/readerModeArticle.html`; +const isMacOS = AppConstants.platform === "macosx"; + +add_task(async function () { + await pushPref("devtools.webconsole.input.editor", true); + await pushPref("reader.parse-on-load.enabled", true); + // Disable eager evaluation to avoid intermittent failures due to pending + // requests to evaluateJSAsync. + await pushPref("devtools.webconsole.input.eagerEvaluation", false); + + const readerModeButtonEl = document.querySelector("#reader-mode-button"); + + const hud = await openNewTabAndConsole(TEST_URI); + await waitFor( + () => !readerModeButtonEl.hidden, + "wait for the reader mode button to be displayed" + ); + + const jstermHistory = [ + `document + .querySelectorAll("*") + .forEach(console.log)`, + `Dog = "Snoopy"`, + ]; + + const onLastMessage = waitForMessageByType(hud, `"Snoopy"`, ".result"); + for (const input of jstermHistory) { + execute(hud, input); + } + await onLastMessage; + await openReverseSearch(hud); + + // Wait for a bit so reader mode would have some time to initialize. + await wait(1000); + is( + readerModeButtonEl.getAttribute("readeractive"), + "", + "reader mode wasn't activated" + ); + + EventUtils.sendString("d"); + const infoElement = await waitFor(() => getReverseSearchInfoElement(hud)); + is( + infoElement.textContent, + "2 of 2 results", + "The reverse info has the expected text" + ); + + is(getInputValue(hud), jstermHistory[1], "JsTerm has the expected input"); + + await navigateResultsAndCheckState(hud, { + direction: "previous", + expectedInfoText: "1 of 2 results", + expectedJsTermInputValue: jstermHistory[0], + }); + + await navigateResultsAndCheckState(hud, { + direction: "next", + expectedInfoText: "2 of 2 results", + expectedJsTermInputValue: jstermHistory[1], + }); + + // Wait for a bit so reader mode would have some time to initialize. + await wait(1000); + is( + readerModeButtonEl.getAttribute("readeractive"), + "", + "reader mode still wasn't activated" + ); + + await closeToolbox(); +}); + +async function navigateResultsAndCheckState( + hud, + { direction, expectedInfoText, expectedJsTermInputValue } +) { + const onJsTermValueChanged = hud.jsterm.once("set-input-value"); + if (direction === "previous") { + triggerPreviousResultShortcut(); + } else { + triggerNextResultShortcut(); + } + await onJsTermValueChanged; + + is(getInputValue(hud), expectedJsTermInputValue, "JsTerm has expected value"); + + const infoElement = getReverseSearchInfoElement(hud); + is( + infoElement.textContent, + expectedInfoText, + "The reverse info has the expected text" + ); + is( + isReverseSearchInputFocused(hud), + true, + "reverse search input is still focused" + ); +} + +function triggerPreviousResultShortcut() { + if (isMacOS) { + EventUtils.synthesizeKey("r", { ctrlKey: true }); + } else { + EventUtils.synthesizeKey("VK_F9"); + } +} + +function triggerNextResultShortcut() { + if (isMacOS) { + EventUtils.synthesizeKey("s", { ctrlKey: true }); + } else { + EventUtils.synthesizeKey("VK_F9", { shiftKey: true }); + } +} |