summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_selectionKeyNavigation.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_selectionKeyNavigation.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_selectionKeyNavigation.js200
1 files changed, 200 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_selectionKeyNavigation.js b/browser/components/urlbar/tests/browser/browser_selectionKeyNavigation.js
new file mode 100644
index 0000000000..7399e3b4de
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_selectionKeyNavigation.js
@@ -0,0 +1,200 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// This test makes sure that the up/down and page-up/down properly adjust the
+// selection. See also browser_caret_navigation.js and
+// browser_urlbar_tabKeyBehavior.js.
+
+"use strict";
+
+const MAX_RESULTS = UrlbarPrefs.get("maxRichResults");
+
+add_setup(async function() {
+ for (let i = 0; i < MAX_RESULTS; i++) {
+ await PlacesTestUtils.addVisits("http://example.com/" + i);
+ }
+ registerCleanupFunction(async function() {
+ await PlacesUtils.history.clear();
+ });
+});
+
+add_task(async function downKey() {
+ for (const ctrlKey of [false, true]) {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "exam",
+ fireInputEvent: true,
+ });
+ Assert.equal(
+ UrlbarTestUtils.getSelectedRowIndex(window),
+ 0,
+ "The heuristic autofill result should be selected initially"
+ );
+ for (let i = 1; i < MAX_RESULTS; i++) {
+ EventUtils.synthesizeKey("KEY_ArrowDown", { ctrlKey });
+ Assert.equal(UrlbarTestUtils.getSelectedRowIndex(window), i);
+ }
+ EventUtils.synthesizeKey("KEY_ArrowDown", { ctrlKey });
+ let oneOffs = UrlbarTestUtils.getOneOffSearchButtons(window);
+ Assert.ok(oneOffs.selectedButton, "A one-off should now be selected");
+ while (oneOffs.selectedButton) {
+ EventUtils.synthesizeKey("KEY_ArrowDown", { ctrlKey });
+ }
+ Assert.equal(
+ UrlbarTestUtils.getSelectedRowIndex(window),
+ 0,
+ "The heuristic autofill result should be selected again"
+ );
+ }
+});
+
+add_task(async function upKey() {
+ for (const ctrlKey of [false, true]) {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "exam",
+ fireInputEvent: true,
+ });
+ Assert.equal(
+ UrlbarTestUtils.getSelectedRowIndex(window),
+ 0,
+ "The heuristic autofill result should be selected initially"
+ );
+ EventUtils.synthesizeKey("KEY_ArrowUp", { ctrlKey });
+ let oneOffs = UrlbarTestUtils.getOneOffSearchButtons(window);
+ Assert.ok(oneOffs.selectedButton, "A one-off should now be selected");
+ while (oneOffs.selectedButton) {
+ EventUtils.synthesizeKey("KEY_ArrowUp", { ctrlKey });
+ }
+ Assert.equal(
+ UrlbarTestUtils.getSelectedRowIndex(window),
+ MAX_RESULTS - 1,
+ "The last result should be selected"
+ );
+ for (let i = 1; i < MAX_RESULTS; i++) {
+ EventUtils.synthesizeKey("KEY_ArrowUp", { ctrlKey });
+ Assert.equal(
+ UrlbarTestUtils.getSelectedRowIndex(window),
+ MAX_RESULTS - i - 1
+ );
+ }
+ }
+});
+
+add_task(async function pageDownKey() {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "exam",
+ fireInputEvent: true,
+ });
+ Assert.equal(
+ UrlbarTestUtils.getSelectedRowIndex(window),
+ 0,
+ "The heuristic autofill result should be selected initially"
+ );
+ let pageCount = Math.ceil((MAX_RESULTS - 1) / UrlbarUtils.PAGE_UP_DOWN_DELTA);
+ for (let i = 0; i < pageCount; i++) {
+ EventUtils.synthesizeKey("KEY_PageDown");
+ Assert.equal(
+ UrlbarTestUtils.getSelectedRowIndex(window),
+ Math.min((i + 1) * UrlbarUtils.PAGE_UP_DOWN_DELTA, MAX_RESULTS - 1)
+ );
+ }
+ EventUtils.synthesizeKey("KEY_PageDown");
+ Assert.equal(
+ UrlbarTestUtils.getSelectedRowIndex(window),
+ 0,
+ "Page down at end should wrap around to first result"
+ );
+});
+
+add_task(async function pageUpKey() {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "exam",
+ fireInputEvent: true,
+ });
+ Assert.equal(
+ UrlbarTestUtils.getSelectedRowIndex(window),
+ 0,
+ "The heuristic autofill result should be selected initially"
+ );
+ EventUtils.synthesizeKey("KEY_PageUp");
+ Assert.equal(
+ UrlbarTestUtils.getSelectedRowIndex(window),
+ MAX_RESULTS - 1,
+ "Page up at start should wrap around to last result"
+ );
+ let pageCount = Math.ceil((MAX_RESULTS - 1) / UrlbarUtils.PAGE_UP_DOWN_DELTA);
+ for (let i = 0; i < pageCount; i++) {
+ EventUtils.synthesizeKey("KEY_PageUp");
+ Assert.equal(
+ UrlbarTestUtils.getSelectedRowIndex(window),
+ Math.max(MAX_RESULTS - 1 - (i + 1) * UrlbarUtils.PAGE_UP_DOWN_DELTA, 0)
+ );
+ }
+});
+
+add_task(async function pageDownKeyShowsView() {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "exam",
+ fireInputEvent: true,
+ });
+ await UrlbarTestUtils.promisePopupClose(window);
+ EventUtils.synthesizeKey("KEY_PageDown");
+ await UrlbarTestUtils.promiseSearchComplete(window);
+ Assert.ok(UrlbarTestUtils.isPopupOpen(window));
+ Assert.equal(UrlbarTestUtils.getSelectedRowIndex(window), 0);
+});
+
+add_task(async function pageUpKeyShowsView() {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "exam",
+ fireInputEvent: true,
+ });
+ await UrlbarTestUtils.promisePopupClose(window);
+ EventUtils.synthesizeKey("KEY_PageUp");
+ await UrlbarTestUtils.promiseSearchComplete(window);
+ Assert.ok(UrlbarTestUtils.isPopupOpen(window));
+ Assert.equal(UrlbarTestUtils.getSelectedRowIndex(window), 0);
+});
+
+add_task(async function pageDownKeyWithCtrlKey() {
+ const previousTab = gBrowser.selectedTab;
+ const currentTab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:blank"
+ );
+
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "exam",
+ fireInputEvent: true,
+ });
+ EventUtils.synthesizeKey("KEY_PageDown", { ctrlKey: true });
+ await UrlbarTestUtils.promisePopupClose(window);
+ await UrlbarTestUtils.promiseSearchComplete(window);
+ Assert.equal(gBrowser.selectedTab, previousTab);
+ BrowserTestUtils.removeTab(currentTab);
+});
+
+add_task(async function pageUpKeyWithCtrlKey() {
+ const previousTab = gBrowser.selectedTab;
+ const currentTab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:blank"
+ );
+
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "exam",
+ fireInputEvent: true,
+ });
+ EventUtils.synthesizeKey("KEY_PageUp", { ctrlKey: true });
+ await UrlbarTestUtils.promisePopupClose(window);
+ await UrlbarTestUtils.promiseSearchComplete(window);
+ Assert.equal(gBrowser.selectedTab, previousTab);
+ BrowserTestUtils.removeTab(currentTab);
+});