Bug 1371294 - Add a SearchTestUtils.jsm file and stop duplicating promiseNewSearchEngine. r?mikedeboer
MozReview-Commit-ID: IP5iRstshrM
--- a/browser/base/content/test/general/browser_contentSearchUI.js
+++ b/browser/base/content/test/general/browser_contentSearchUI.js
@@ -4,16 +4,21 @@
const TEST_PAGE_BASENAME = "contentSearchUI.html";
const TEST_CONTENT_SCRIPT_BASENAME = "contentSearchUI.js";
const TEST_ENGINE_PREFIX = "browser_searchSuggestionEngine";
const TEST_ENGINE_BASENAME = "searchSuggestionEngine.xml";
const TEST_ENGINE_2_BASENAME = "searchSuggestionEngine2.xml";
const TEST_MSG = "ContentSearchUIControllerTest";
+let {SearchTestUtils} = ChromeUtils.import(
+ "resource://testing-common/SearchTestUtils.jsm", {});
+
+SearchTestUtils.init(Assert, registerCleanupFunction);
+
requestLongerTimeout(2);
add_task(async function emptyInput() {
await setUp();
let state = await msg("key", { key: "x", waitForSuggestions: true });
checkState(state, "x", ["xfoo", "xbar"], -1);
@@ -386,16 +391,17 @@ add_task(async function cycleEngines() {
await msg("key", { key: "VK_DOWN", waitForSuggestions: true });
let promiseEngineChange = function(newEngineName) {
return new Promise(resolve => {
Services.obs.addObserver(function resolver(subj, topic, data) {
if (data != "engine-current") {
return;
}
+ subj.QueryInterface(Ci.nsISearchEngine);
SimpleTest.is(subj.name, newEngineName, "Engine cycled correctly");
Services.obs.removeObserver(resolver, "browser-search-engine-modified");
resolve();
}, "browser-search-engine-modified");
});
};
let p = promiseEngineChange(TEST_ENGINE_PREFIX + " " + TEST_ENGINE_2_BASENAME);
@@ -734,18 +740,21 @@ function promiseMsg(name, type, msgMan)
}
function setUpEngines() {
return (async function() {
info("Removing default search engines");
let currentEngineName = Services.search.currentEngine.name;
let currentEngines = Services.search.getVisibleEngines();
info("Adding test search engines");
- let engine1 = await promiseNewSearchEngine(TEST_ENGINE_BASENAME);
- await promiseNewSearchEngine(TEST_ENGINE_2_BASENAME);
+ let rootDir = getRootDirectory(gTestPath);
+ let engine1 = await SearchTestUtils.promiseNewSearchEngine(
+ rootDir + TEST_ENGINE_BASENAME);
+ await SearchTestUtils.promiseNewSearchEngine(
+ rootDir + TEST_ENGINE_2_BASENAME);
Services.search.currentEngine = engine1;
for (let engine of currentEngines) {
Services.search.removeEngine(engine);
}
registerCleanupFunction(() => {
Services.search.restoreDefaultEngines();
Services.search.currentEngine = Services.search.getEngineByName(currentEngineName);
});
--- a/browser/base/content/test/general/head.js
+++ b/browser/base/content/test/general/head.js
@@ -521,34 +521,16 @@ function promiseNotificationShown(notifi
if (win.PopupNotifications.panel.state == "open") {
return Promise.resolve();
}
let panelPromise = promisePopupShown(win.PopupNotifications.panel);
notification.reshow();
return panelPromise;
}
-function promiseNewSearchEngine(basename) {
- return new Promise((resolve, reject) => {
- info("Waiting for engine to be added: " + basename);
- let url = getRootDirectory(gTestPath) + basename;
- Services.search.addEngine(url, null, "", false, {
- onSuccess(engine) {
- info("Search engine added: " + basename);
- registerCleanupFunction(() => Services.search.removeEngine(engine));
- resolve(engine);
- },
- onError(errCode) {
- Assert.ok(false, "addEngine failed with error code " + errCode);
- reject();
- },
- });
- });
-}
-
/**
* Resolves when a bookmark with the given uri is added.
*/
function promiseOnBookmarkItemAdded(aExpectedURI) {
return new Promise((resolve, reject) => {
let bookmarksObserver = {
onItemAdded(aItemId, aFolderId, aIndex, aItemType, aURI) {
info("Added a bookmark to " + aURI.spec);
--- a/browser/base/content/test/urlbar/browser_autocomplete_a11y_label.js
+++ b/browser/base/content/test/urlbar/browser_autocomplete_a11y_label.js
@@ -14,17 +14,18 @@ add_task(async function switchToTab() {
is(result.label, "about:about about:about Tab", "Result a11y label should be: <title> <url> Tab");
gURLBar.popup.hidePopup();
await promisePopupHidden(gURLBar.popup);
gBrowser.removeTab(tab);
});
add_task(async function searchSuggestions() {
- let engine = await promiseNewSearchEngine(TEST_ENGINE_BASENAME);
+ let engine = await SearchTestUtils.promiseNewSearchEngine(
+ getRootDirectory(gTestPath) + TEST_ENGINE_BASENAME);
let oldCurrentEngine = Services.search.currentEngine;
Services.search.currentEngine = engine;
Services.prefs.setBoolPref(SUGGEST_ALL_PREF, true);
let suggestionsEnabled = Services.prefs.getBoolPref(SUGGEST_URLBAR_PREF);
Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, true);
registerCleanupFunction(function() {
Services.search.currentEngine = oldCurrentEngine;
Services.prefs.clearUserPref(SUGGEST_ALL_PREF);
--- a/browser/base/content/test/urlbar/browser_urlbarOneOffs.js
+++ b/browser/base/content/test/urlbar/browser_urlbarOneOffs.js
@@ -3,17 +3,18 @@ const TEST_ENGINE_BASENAME = "searchSugg
let gMaxResults;
add_task(async function init() {
Services.prefs.setBoolPref("browser.urlbar.oneOffSearches", true);
gMaxResults = Services.prefs.getIntPref("browser.urlbar.maxRichResults");
// Add a search suggestion engine and move it to the front so that it appears
// as the first one-off.
- let engine = await promiseNewSearchEngine(TEST_ENGINE_BASENAME);
+ let engine = await SearchTestUtils.promiseNewSearchEngine(
+ getRootDirectory(gTestPath) + TEST_ENGINE_BASENAME);
Services.search.moveEngine(engine, 0);
registerCleanupFunction(async function() {
await hidePopup();
await PlacesUtils.history.clear();
});
await PlacesUtils.history.clear();
--- a/browser/base/content/test/urlbar/browser_urlbarOneOffs_searchSuggestions.js
+++ b/browser/base/content/test/urlbar/browser_urlbarOneOffs_searchSuggestions.js
@@ -1,17 +1,18 @@
const TEST_ENGINE_BASENAME = "searchSuggestionEngine.xml";
add_task(async function init() {
await PlacesUtils.history.clear();
await SpecialPowers.pushPrefEnv({
set: [["browser.urlbar.oneOffSearches", true],
["browser.urlbar.suggest.searches", true]],
});
- let engine = await promiseNewSearchEngine(TEST_ENGINE_BASENAME);
+ let engine = await SearchTestUtils.promiseNewSearchEngine(
+ getRootDirectory(gTestPath) + TEST_ENGINE_BASENAME);
let oldCurrentEngine = Services.search.currentEngine;
Services.search.moveEngine(engine, 0);
Services.search.currentEngine = engine;
registerCleanupFunction(async function() {
Services.search.currentEngine = oldCurrentEngine;
await PlacesUtils.history.clear();
// Make sure the popup is closed for the next test.
--- a/browser/base/content/test/urlbar/browser_urlbarPlaceholder.js
+++ b/browser/base/content/test/urlbar/browser_urlbarPlaceholder.js
@@ -12,17 +12,18 @@ const TEST_ENGINE_BASENAME = "searchSugg
const originalEngine = Services.search.currentEngine;
const expectedString = gBrowserBundle.formatStringFromName("urlbar.placeholder",
[originalEngine.name], 1);
var extraEngine;
var tabs = [];
add_task(async function setup() {
- extraEngine = await promiseNewSearchEngine(TEST_ENGINE_BASENAME);
+ let rootDir = getRootDirectory(gTestPath);
+ extraEngine = await SearchTestUtils.promiseNewSearchEngine(rootDir + TEST_ENGINE_BASENAME);
// Force display of a tab with a URL bar, to clear out any possible placeholder
// initialization listeners that happen on startup.
let urlTab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
BrowserTestUtils.removeTab(urlTab);
registerCleanupFunction(() => {
Services.search.currentEngine = originalEngine;
--- a/browser/base/content/test/urlbar/browser_urlbarSearchSuggestions.js
+++ b/browser/base/content/test/urlbar/browser_urlbarSearchSuggestions.js
@@ -1,16 +1,17 @@
const SUGGEST_URLBAR_PREF = "browser.urlbar.suggest.searches";
const TEST_ENGINE_BASENAME = "searchSuggestionEngine.xml";
// Must run first.
add_task(async function prepare() {
let suggestionsEnabled = Services.prefs.getBoolPref(SUGGEST_URLBAR_PREF);
Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, true);
- let engine = await promiseNewSearchEngine(TEST_ENGINE_BASENAME);
+ let engine = await SearchTestUtils.promiseNewSearchEngine(
+ getRootDirectory(gTestPath) + TEST_ENGINE_BASENAME);
let oldCurrentEngine = Services.search.currentEngine;
Services.search.currentEngine = engine;
registerCleanupFunction(async function() {
Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, suggestionsEnabled);
Services.search.currentEngine = oldCurrentEngine;
// Clicking suggestions causes visits to search results pages, so clear that
// history now.
--- a/browser/base/content/test/urlbar/browser_urlbarSearchSuggestions_opt-out.js
+++ b/browser/base/content/test/urlbar/browser_urlbarSearchSuggestions_opt-out.js
@@ -4,17 +4,18 @@
const SUGGEST_ALL_PREF = "browser.search.suggest.enabled";
const SUGGEST_URLBAR_PREF = "browser.urlbar.suggest.searches";
const CHOICE_PREF = "browser.urlbar.userMadeSearchSuggestionsChoice";
const TIMES_PREF = "browser.urlbar.timesBeforeHidingSuggestionsHint";
const TEST_ENGINE_BASENAME = "searchSuggestionEngine.xml";
const ONEOFF_PREF = "browser.urlbar.oneOffSearches";
add_task(async function prepare() {
- let engine = await promiseNewSearchEngine(TEST_ENGINE_BASENAME);
+ let engine = await SearchTestUtils.promiseNewSearchEngine(
+ getRootDirectory(gTestPath) + TEST_ENGINE_BASENAME);
let oldCurrentEngine = Services.search.currentEngine;
Services.search.currentEngine = engine;
let suggestionsEnabled = Services.prefs.getBoolPref(SUGGEST_URLBAR_PREF);
let defaults = Services.prefs.getDefaultBranch("browser.urlbar.");
let searchSuggestionsDefault = defaults.getBoolPref("suggest.searches");
defaults.setBoolPref("suggest.searches", true);
let suggestionsChoice = Services.prefs.getBoolPref(CHOICE_PREF);
Services.prefs.setBoolPref(CHOICE_PREF, false);
--- a/browser/base/content/test/urlbar/browser_urlbarSearchTelemetry.js
+++ b/browser/base/content/test/urlbar/browser_urlbarSearchTelemetry.js
@@ -4,17 +4,18 @@ ChromeUtils.import("resource:///modules/
const SUGGEST_URLBAR_PREF = "browser.urlbar.suggest.searches";
const TEST_ENGINE_BASENAME = "searchSuggestionEngine.xml";
// Must run first.
add_task(async function prepare() {
let suggestionsEnabled = Services.prefs.getBoolPref(SUGGEST_URLBAR_PREF);
Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, true);
- let engine = await promiseNewSearchEngine(TEST_ENGINE_BASENAME);
+ let engine = await SearchTestUtils.promiseNewSearchEngine(
+ getRootDirectory(gTestPath) + TEST_ENGINE_BASENAME);
let oldCurrentEngine = Services.search.currentEngine;
Services.search.currentEngine = engine;
registerCleanupFunction(async function() {
Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, suggestionsEnabled);
Services.search.currentEngine = oldCurrentEngine;
// Clicking urlbar results causes visits to their associated pages, so clear
--- a/browser/base/content/test/urlbar/browser_urlbarStopSearchOnSelection.js
+++ b/browser/base/content/test/urlbar/browser_urlbarStopSearchOnSelection.js
@@ -14,17 +14,18 @@ const TEST_ENGINE_SUGGESTIONS_TIMEOUT =
const TEST_ENGINE_NUM_EXPECTED_RESULTS = 2;
add_task(async function init() {
await PlacesUtils.history.clear();
await SpecialPowers.pushPrefEnv({
set: [["browser.urlbar.suggest.searches", true]],
});
// Add a test search engine that returns suggestions on a delay.
- let engine = await promiseNewSearchEngine(TEST_ENGINE_BASENAME);
+ let engine = await SearchTestUtils.promiseNewSearchEngine(
+ getRootDirectory(gTestPath) + TEST_ENGINE_BASENAME);
let oldCurrentEngine = Services.search.currentEngine;
Services.search.moveEngine(engine, 0);
Services.search.currentEngine = engine;
registerCleanupFunction(async () => {
Services.search.currentEngine = oldCurrentEngine;
await PlacesUtils.history.clear();
// Make sure the popup is closed for the next test.
gURLBar.blur();
--- a/browser/base/content/test/urlbar/browser_urlbar_search_speculative_connect_engine.js
+++ b/browser/base/content/test/urlbar/browser_urlbar_search_speculative_connect_engine.js
@@ -24,17 +24,18 @@ add_task(async function setup() {
["browser.urlbar.speculativeConnect.enabled", true],
// In mochitest this number is 0 by default but we have to turn it on.
["network.http.speculative-parallel-limit", 6],
// The http server is using IPv4, so it's better to disable IPv6 to avoid weird
// networking problem.
["network.dns.disableIPv6", true]],
});
- let engine = await promiseNewSearchEngine(TEST_ENGINE_BASENAME);
+ let engine = await SearchTestUtils.promiseNewSearchEngine(
+ getRootDirectory(gTestPath) + TEST_ENGINE_BASENAME);
let oldCurrentEngine = Services.search.currentEngine;
Services.search.currentEngine = engine;
registerCleanupFunction(async function() {
await PlacesUtils.history.clear();
Services.search.currentEngine = oldCurrentEngine;
gHttpServer.identity.remove(gScheme, gHost, gPort);
gHttpServer.stop(() => {
@@ -48,9 +49,8 @@ add_task(async function connect_search_e
await promiseAutocompleteResultPopup("foo", window, true);
// Check if the first result is with type "searchengine"
let controller = gURLBar.popup.input.controller;
let style = controller.getStyleAt(0);
is(style.includes("searchengine"), true, "The first result type is searchengine");
await promiseSpeculativeConnection(gHttpServer);
is(gHttpServer.connectionNumber, 1, `${gHttpServer.connectionNumber} speculative connection has been setup.`);
});
-
--- a/browser/base/content/test/urlbar/head.js
+++ b/browser/base/content/test/urlbar/head.js
@@ -5,16 +5,20 @@ ChromeUtils.import("resource://gre/modul
ChromeUtils.defineModuleGetter(this, "PlacesUtils",
"resource://gre/modules/PlacesUtils.jsm");
ChromeUtils.defineModuleGetter(this, "PlacesTestUtils",
"resource://testing-common/PlacesTestUtils.jsm");
ChromeUtils.defineModuleGetter(this, "Preferences",
"resource://gre/modules/Preferences.jsm");
ChromeUtils.defineModuleGetter(this, "HttpServer",
"resource://testing-common/httpd.js");
+ChromeUtils.defineModuleGetter(this, "SearchTestUtils",
+ "resource://testing-common/SearchTestUtils.jsm");
+
+SearchTestUtils.init(Assert, registerCleanupFunction);
/**
* Waits for the next top-level document load in the current browser. The URI
* of the document is compared against aExpectedURL. The load is then stopped
* before it actually starts.
*
* @param aExpectedURL
* The URL of the document that is expected to load.
@@ -199,34 +203,16 @@ function promiseAutocompleteResultPopup(
win.gURLBar.dispatchEvent(event);
}
win.gURLBar.controller.startSearch(inputText);
}, win);
return promiseSearchComplete(win, dontAnimate);
}
-function promiseNewSearchEngine(basename) {
- return new Promise((resolve, reject) => {
- info("Waiting for engine to be added: " + basename);
- let url = getRootDirectory(gTestPath) + basename;
- Services.search.addEngine(url, null, "", false, {
- onSuccess(engine) {
- info("Search engine added: " + basename);
- registerCleanupFunction(() => Services.search.removeEngine(engine));
- resolve(engine);
- },
- onError(errCode) {
- Assert.ok(false, "addEngine failed with error code " + errCode);
- reject();
- },
- });
- });
-}
-
function promisePageActionPanelOpen() {
let dwu = window.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils);
return BrowserTestUtils.waitForCondition(() => {
// Wait for the main page action button to become visible. It's hidden for
// some URIs, so depending on when this is called, it may not yet be quite
// visible. It's up to the caller to make sure it will be visible.
info("Waiting for main page action button to have non-0 size");
--- a/browser/components/search/moz.build
+++ b/browser/components/search/moz.build
@@ -5,12 +5,16 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
BROWSER_CHROME_MANIFESTS += [
'test/browser.ini',
'test/google_codes/browser.ini',
'test/google_nocodes/browser.ini',
]
+TESTING_JS_MODULES += [
+ 'test/SearchTestUtils.jsm',
+]
+
JAR_MANIFESTS += ['jar.mn']
with Files('**'):
BUG_COMPONENT = ('Firefox', 'Search')
new file mode 100644
--- /dev/null
+++ b/browser/components/search/test/SearchTestUtils.jsm
@@ -0,0 +1,43 @@
+"use strict";
+
+ChromeUtils.import("resource://gre/modules/Services.jsm");
+
+var EXPORTED_SYMBOLS = [
+ "SearchTestUtils",
+];
+
+var gTestGlobals;
+
+var SearchTestUtils = Object.freeze({
+ init(Assert, registerCleanupFunction) {
+ gTestGlobals = {
+ Assert,
+ registerCleanupFunction
+ };
+ },
+
+ /**
+ * Adds a search engine to the search service. It will remove the engine
+ * at the end of the test.
+ *
+ * @param {String} url The URL of the engine to add.
+ * @param {Function} registerCleanupFunction Pass the registerCleanupFunction
+ * from the test's scope.
+ * @returns {Promise} Returns a promise that is resolved with the new engine
+ * or rejected if it fails.
+ */
+ promiseNewSearchEngine(url) {
+ return new Promise((resolve, reject) => {
+ Services.search.addEngine(url, null, "", false, {
+ onSuccess(engine) {
+ gTestGlobals.registerCleanupFunction(() => Services.search.removeEngine(engine));
+ resolve(engine);
+ },
+ onError(errCode) {
+ gTestGlobals.Assert.ok(false, `addEngine failed with error code ${errCode}`);
+ reject();
+ },
+ });
+ });
+ }
+});