summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/tests/browser_engines.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--browser/components/preferences/tests/browser_engines.js95
1 files changed, 95 insertions, 0 deletions
diff --git a/browser/components/preferences/tests/browser_engines.js b/browser/components/preferences/tests/browser_engines.js
new file mode 100644
index 0000000000..3255d36956
--- /dev/null
+++ b/browser/components/preferences/tests/browser_engines.js
@@ -0,0 +1,95 @@
+let engineName = "engine1";
+
+function getCellText(tree, i, cellName) {
+ return tree.view.getCellText(i, tree.columns.getNamedColumn(cellName));
+}
+
+add_task(async function setup() {
+ const engine = await Services.search.addEngineWithDetails(engineName, {
+ alias: ["testing", "customkeyword"],
+ method: "get",
+ template: "http://example.com/engine1?search={searchTerms}",
+ });
+ registerCleanupFunction(async function() {
+ await Services.search.removeEngine(engine);
+ });
+});
+
+// Test Engine list
+add_task(async function() {
+ 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);
+});