forked from mirrors/gecko-dev
96 lines
3.1 KiB
JavaScript
96 lines
3.1 KiB
JavaScript
"use strict";
|
|
|
|
// This test makes sure that when a page offers many search engines, the search
|
|
// popup shows a submenu that lists them instead of showing them in the popup
|
|
// itself.
|
|
|
|
const searchPopup = document.getElementById("PopupSearchAutoComplete");
|
|
const oneOffsContainer =
|
|
document.getAnonymousElementByAttribute(searchPopup, "anonid",
|
|
"search-one-off-buttons");
|
|
|
|
add_task(async function test_setup() {
|
|
await gCUITestUtils.addSearchBar();
|
|
registerCleanupFunction(() => {
|
|
gCUITestUtils.removeSearchBar();
|
|
});
|
|
});
|
|
|
|
add_task(async function test() {
|
|
let searchbar = BrowserSearch.searchBar;
|
|
|
|
let rootDir = getRootDirectory(gTestPath);
|
|
let url = rootDir + "tooManyEnginesOffered.html";
|
|
await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
|
|
|
|
// Open the search popup.
|
|
let promise = promiseEvent(searchPopup, "popupshown");
|
|
info("Opening search panel");
|
|
searchbar.focus();
|
|
EventUtils.synthesizeKey("KEY_ArrowDown");
|
|
await promise;
|
|
|
|
// Make sure it has only one add-engine menu button item.
|
|
let items = getOpenSearchItems();
|
|
Assert.equal(items.length, 1, "A single button");
|
|
let menuButton = items[0];
|
|
Assert.equal(menuButton.type, "menu", "A menu button");
|
|
|
|
// Mouse over the menu button to open it.
|
|
let buttonPopup = menuButton.firstChild;
|
|
promise = promiseEvent(buttonPopup, "popupshown");
|
|
EventUtils.synthesizeMouse(menuButton, 5, 5, { type: "mousemove" });
|
|
await promise;
|
|
|
|
Assert.ok(menuButton.open, "Submenu should be open");
|
|
|
|
// Check the engines inside the submenu.
|
|
Assert.equal(buttonPopup.childNodes.length, 6, "Expected number of engines");
|
|
for (let i = 0; i < buttonPopup.childNodes.length; i++) {
|
|
let item = buttonPopup.childNodes[i];
|
|
Assert.equal(item.getAttribute("title"), "engine" + (i + 1),
|
|
"Expected engine title");
|
|
}
|
|
|
|
// Mouse out of the menu button to close it.
|
|
promise = promiseEvent(buttonPopup, "popuphidden");
|
|
EventUtils.synthesizeMouse(searchbar, 5, 5, { type: "mousemove" });
|
|
await promise;
|
|
|
|
Assert.ok(!menuButton.open, "Submenu should be closed");
|
|
|
|
// Key up until the menu button is selected.
|
|
for (let button = null;
|
|
button != menuButton;
|
|
button = searchbar.textbox.popup.oneOffButtons.selectedButton) {
|
|
EventUtils.synthesizeKey("KEY_ArrowUp");
|
|
}
|
|
|
|
// Press the Right arrow key. The submenu should open.
|
|
promise = promiseEvent(buttonPopup, "popupshown");
|
|
EventUtils.synthesizeKey("KEY_ArrowRight");
|
|
await promise;
|
|
|
|
Assert.ok(menuButton.open, "Submenu should be open");
|
|
|
|
// Press the Esc key. The submenu should close.
|
|
promise = promiseEvent(buttonPopup, "popuphidden");
|
|
EventUtils.synthesizeKey("KEY_Escape");
|
|
await promise;
|
|
|
|
Assert.ok(!menuButton.open, "Submenu should be closed");
|
|
|
|
gBrowser.removeCurrentTab();
|
|
});
|
|
|
|
function getOpenSearchItems() {
|
|
let os = [];
|
|
|
|
let addEngineList =
|
|
document.getAnonymousElementByAttribute(oneOffsContainer, "anonid",
|
|
"add-engines");
|
|
for (let item = addEngineList.firstChild; item; item = item.nextSibling)
|
|
os.push(item);
|
|
|
|
return os;
|
|
}
|