forked from mirrors/gecko-dev
MozReview-Commit-ID: 14U7hkrBbJq --HG-- extra : rebase_source : c6a0439d253d38a776445793b235b93ba5873f48
144 lines
5.4 KiB
JavaScript
144 lines
5.4 KiB
JavaScript
"use strict";
|
|
|
|
/**
|
|
* Test keyboard navigation in the app menu panel.
|
|
*/
|
|
|
|
const {PanelMultiView} = Cu.import("resource:///modules/PanelMultiView.jsm", {});
|
|
const kHelpButtonId = "appMenu-help-button";
|
|
let gHelperInstance;
|
|
|
|
add_task(async function setup() {
|
|
gHelperInstance = new PanelMultiView(PanelUI.panel, true);
|
|
});
|
|
|
|
add_task(async function testUpDownKeys() {
|
|
let promise = promisePanelShown(window);
|
|
PanelUI.show();
|
|
await promise;
|
|
|
|
let buttons = gHelperInstance._getNavigableElements(PanelUI.mainView);
|
|
|
|
for (let button of buttons) {
|
|
if (button.disabled)
|
|
continue;
|
|
EventUtils.synthesizeKey("KEY_ArrowDown", { code: "ArrowDown" });
|
|
Assert.equal(document.commandDispatcher.focusedElement, button,
|
|
"The correct button should be focused after navigating downward");
|
|
}
|
|
|
|
EventUtils.synthesizeKey("KEY_ArrowDown", { code: "ArrowDown" });
|
|
Assert.equal(document.commandDispatcher.focusedElement, buttons[0],
|
|
"Pressing upwards should cycle around and select the first button again");
|
|
|
|
for (let i = buttons.length - 1; i >= 0; --i) {
|
|
let button = buttons[i];
|
|
if (button.disabled)
|
|
continue;
|
|
EventUtils.synthesizeKey("KEY_ArrowUp", { code: "ArrowUp" });
|
|
Assert.equal(document.commandDispatcher.focusedElement, button,
|
|
"The first button should be focused after navigating upward");
|
|
}
|
|
|
|
promise = promisePanelHidden(window);
|
|
PanelUI.hide();
|
|
await promise;
|
|
});
|
|
|
|
add_task(async function testEnterKeyBehaviors() {
|
|
let promise = promisePanelShown(window);
|
|
PanelUI.show();
|
|
await promise;
|
|
|
|
let buttons = gHelperInstance._getNavigableElements(PanelUI.mainView);
|
|
|
|
// Navigate to the 'Help' button, which points to a subview.
|
|
EventUtils.synthesizeKey("KEY_ArrowUp", { code: "ArrowUp" });
|
|
let focusedElement = document.commandDispatcher.focusedElement;
|
|
Assert.equal(focusedElement, buttons[buttons.length - 1],
|
|
"The last button should be focused after navigating upward");
|
|
|
|
promise = BrowserTestUtils.waitForEvent(PanelUI.helpView, "ViewShown");
|
|
// Make sure the Help button is in focus.
|
|
while (!focusedElement || !focusedElement.id || focusedElement.id != kHelpButtonId) {
|
|
EventUtils.synthesizeKey("KEY_ArrowUp", { code: "ArrowUp" });
|
|
focusedElement = document.commandDispatcher.focusedElement;
|
|
}
|
|
EventUtils.synthesizeKey("VK_RETURN", { code: "Enter" });
|
|
await promise;
|
|
|
|
let helpButtons = gHelperInstance._getNavigableElements(PanelUI.helpView);
|
|
Assert.ok(helpButtons[0].classList.contains("subviewbutton-back"),
|
|
"First button in help view should be a back button");
|
|
|
|
// For posterity, check navigating the subview using up/ down arrow keys as well.
|
|
for (let i = helpButtons.length - 1; i >= 0; --i) {
|
|
let button = helpButtons[i];
|
|
if (button.disabled)
|
|
continue;
|
|
EventUtils.synthesizeKey("KEY_ArrowUp", { code: "ArrowUp" });
|
|
focusedElement = document.commandDispatcher.focusedElement;
|
|
Assert.equal(focusedElement, button, "The first button should be focused after navigating upward");
|
|
}
|
|
|
|
// Make sure the back button is in focus again.
|
|
while (focusedElement != helpButtons[0]) {
|
|
EventUtils.synthesizeKey("KEY_ArrowDown", { code: "ArrowDown" });
|
|
focusedElement = document.commandDispatcher.focusedElement;
|
|
}
|
|
|
|
// The first button is the back button. Hittin Enter should navigate us back.
|
|
promise = BrowserTestUtils.waitForEvent(PanelUI.mainView, "ViewShown");
|
|
EventUtils.synthesizeKey("VK_RETURN", { code: "Enter" });
|
|
await promise;
|
|
|
|
// Let's test a 'normal' command button.
|
|
focusedElement = document.commandDispatcher.focusedElement;
|
|
const kFindButtonId = "appMenu-find-button";
|
|
while (!focusedElement || !focusedElement.id || focusedElement.id != kFindButtonId) {
|
|
EventUtils.synthesizeKey("KEY_ArrowUp", { code: "ArrowUp" });
|
|
focusedElement = document.commandDispatcher.focusedElement;
|
|
}
|
|
Assert.equal(focusedElement.id, kFindButtonId, "Find button should be selected");
|
|
|
|
promise = promisePanelHidden(window);
|
|
EventUtils.synthesizeKey("VK_RETURN", { code: "Enter" });
|
|
await promise;
|
|
|
|
Assert.ok(!gFindBar.hidden, "Findbar should have opened");
|
|
gFindBar.close();
|
|
});
|
|
|
|
add_task(async function testLeftRightKeys() {
|
|
let promise = promisePanelShown(window);
|
|
PanelUI.show();
|
|
await promise;
|
|
|
|
// Navigate to the 'Help' button, which points to a subview.
|
|
let focusedElement = document.commandDispatcher.focusedElement;
|
|
while (!focusedElement || !focusedElement.id || focusedElement.id != kHelpButtonId) {
|
|
EventUtils.synthesizeKey("KEY_ArrowUp", { code: "ArrowUp" });
|
|
focusedElement = document.commandDispatcher.focusedElement;
|
|
}
|
|
Assert.equal(focusedElement.id, kHelpButtonId, "The last button should be focused after navigating upward");
|
|
|
|
// Hitting ArrowRight on a button that points to a subview should navigate us
|
|
// there.
|
|
promise = BrowserTestUtils.waitForEvent(PanelUI.helpView, "ViewShown");
|
|
EventUtils.synthesizeKey("KEY_ArrowRight", { code: "ArrowRight" });
|
|
await promise;
|
|
|
|
// Hitting ArrowLeft should navigate us back.
|
|
promise = BrowserTestUtils.waitForEvent(PanelUI.mainView, "ViewShown");
|
|
EventUtils.synthesizeKey("KEY_ArrowLeft", { code: "ArrowLeft" });
|
|
await promise;
|
|
|
|
focusedElement = document.commandDispatcher.focusedElement;
|
|
Assert.equal(focusedElement.id, kHelpButtonId,
|
|
"Help button should be focused again now that we're back in the main view");
|
|
|
|
promise = promisePanelHidden(window);
|
|
PanelUI.hide();
|
|
await promise;
|
|
});
|
|
|