forked from mirrors/gecko-dev
141 lines
4 KiB
JavaScript
141 lines
4 KiB
JavaScript
const { SearchTestUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/SearchTestUtils.sys.mjs"
|
|
);
|
|
|
|
SearchTestUtils.init(this);
|
|
|
|
function getCellText(tree, i, cellName) {
|
|
return tree.view.getCellText(i, tree.columns.getNamedColumn(cellName));
|
|
}
|
|
|
|
add_setup(async function () {
|
|
await SearchTestUtils.installSearchExtension({
|
|
keyword: ["testing", "customkeyword"],
|
|
search_url: "https://example.com/engine1",
|
|
search_url_get_params: "search={searchTerms}",
|
|
});
|
|
});
|
|
|
|
add_task(async function test_engine_list() {
|
|
let prefs = await openPreferencesViaOpenPreferencesAPI("search", {
|
|
leaveOpen: true,
|
|
});
|
|
is(prefs.selectedPane, "paneSearch", "Search pane is selected by default");
|
|
let doc = gBrowser.contentDocument;
|
|
|
|
let tree = doc.querySelector("#engineList");
|
|
ok(
|
|
!tree.hidden,
|
|
"The search engine list should be visible when Search is requested"
|
|
);
|
|
|
|
// Check for default search engines to be displayed in the engineList
|
|
let defaultEngines = await Services.search.getAppProvidedEngines();
|
|
for (let i = 0; i < defaultEngines.length; i++) {
|
|
let engine = defaultEngines[i];
|
|
is(
|
|
getCellText(tree, i, "engineName"),
|
|
engine.name,
|
|
"Default search engine " + engine.name + " displayed correctly"
|
|
);
|
|
}
|
|
|
|
let customEngineIndex = defaultEngines.length;
|
|
is(
|
|
getCellText(tree, customEngineIndex, "engineKeyword"),
|
|
"testing, customkeyword",
|
|
"Show internal aliases"
|
|
);
|
|
|
|
// Scroll the treeview into view since mouse operations
|
|
// off screen can act confusingly.
|
|
tree.scrollIntoView();
|
|
let rect = tree.getCoordsForCellItem(
|
|
customEngineIndex,
|
|
tree.columns.getNamedColumn("engineKeyword"),
|
|
"text"
|
|
);
|
|
let x = rect.x + rect.width / 2;
|
|
let y = rect.y + rect.height / 2;
|
|
let win = tree.ownerGlobal;
|
|
|
|
let promise = BrowserTestUtils.waitForEvent(tree, "dblclick");
|
|
EventUtils.synthesizeMouse(tree.body, x, y, { clickCount: 1 }, win);
|
|
EventUtils.synthesizeMouse(tree.body, x, y, { clickCount: 2 }, win);
|
|
await promise;
|
|
|
|
EventUtils.sendString("newkeyword");
|
|
EventUtils.sendKey("RETURN");
|
|
|
|
await TestUtils.waitForCondition(() => {
|
|
return (
|
|
getCellText(tree, customEngineIndex, "engineKeyword") ===
|
|
"newkeyword, testing, customkeyword"
|
|
);
|
|
});
|
|
|
|
// Avoid duplicated keywords
|
|
tree.view.setCellText(
|
|
0,
|
|
tree.columns.getNamedColumn("engineKeyword"),
|
|
"keyword"
|
|
);
|
|
tree.view.setCellText(
|
|
1,
|
|
tree.columns.getNamedColumn("engineKeyword"),
|
|
"keyword"
|
|
);
|
|
isnot(
|
|
getCellText(tree, 1, "engineKeyword"),
|
|
"keyword",
|
|
"Do not allow duplicated keywords"
|
|
);
|
|
|
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
|
});
|
|
|
|
add_task(async function test_remove_button_disabled_state() {
|
|
let prefs = await openPreferencesViaOpenPreferencesAPI("search", {
|
|
leaveOpen: true,
|
|
});
|
|
is(prefs.selectedPane, "paneSearch", "Search pane is selected by default");
|
|
let doc = gBrowser.contentDocument;
|
|
|
|
let tree = doc.querySelector("#engineList");
|
|
ok(
|
|
!tree.hidden,
|
|
"The search engine list should be visible when Search is requested"
|
|
);
|
|
|
|
let defaultEngines = await Services.search.getAppProvidedEngines();
|
|
for (let i = 0; i < defaultEngines.length; i++) {
|
|
let engine = defaultEngines[i];
|
|
|
|
let isDefaultSearchEngine =
|
|
engine.name == Services.search.defaultEngine.name ||
|
|
engine.name == Services.search.defaultPrivateEngine.name;
|
|
|
|
tree.scrollIntoView();
|
|
let rect = tree.getCoordsForCellItem(
|
|
i,
|
|
tree.columns.getNamedColumn("engineName"),
|
|
"text"
|
|
);
|
|
let x = rect.x + rect.width / 2;
|
|
let y = rect.y + rect.height / 2;
|
|
let win = tree.ownerGlobal;
|
|
|
|
let promise = BrowserTestUtils.waitForEvent(tree, "click");
|
|
EventUtils.synthesizeMouse(tree.body, x, y, { clickCount: 1 }, win);
|
|
await promise;
|
|
|
|
let removeButton = doc.querySelector("#removeEngineButton");
|
|
is(
|
|
removeButton.disabled,
|
|
isDefaultSearchEngine,
|
|
"Remove button is in correct disable state"
|
|
);
|
|
}
|
|
|
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
|
});
|