summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_selectedEngine.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_selectedEngine.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_selectedEngine.js155
1 files changed, 155 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_selectedEngine.js b/toolkit/components/search/tests/xpcshell/test_selectedEngine.js
new file mode 100644
index 0000000000..f42670156c
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_selectedEngine.js
@@ -0,0 +1,155 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+const kDefaultEngineName = "engine1";
+
+add_setup(async function () {
+ useHttpServer();
+ await AddonTestUtils.promiseStartupManager();
+ await SearchTestUtils.useTestEngines("data1");
+ Assert.ok(!Services.search.isInitialized);
+ Services.prefs.setBoolPref(
+ "browser.search.removeEngineInfobar.enabled",
+ false
+ );
+});
+
+// Check that the default engine matches the defaultenginename pref
+add_task(async function test_defaultEngine() {
+ await Services.search.init();
+ await SearchTestUtils.promiseNewSearchEngine({
+ url: `${gDataUrl}engine.xml`,
+ });
+
+ Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
+});
+
+// Setting the search engine should be persisted across restarts.
+add_task(async function test_persistAcrossRestarts() {
+ // Set the engine through the API.
+ await Services.search.setDefault(
+ Services.search.getEngineByName(kTestEngineName),
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+ Assert.equal(Services.search.defaultEngine.name, kTestEngineName);
+ await promiseAfterSettings();
+
+ // Check that the a hash was saved.
+ let metadata = await promiseGlobalMetadata();
+ Assert.equal(metadata.defaultEngineIdHash.length, 44);
+
+ // Re-init and check the engine is still the same.
+ Services.search.wrappedJSObject.reset();
+ await Services.search.init(true);
+ Assert.equal(Services.search.defaultEngine.name, kTestEngineName);
+
+ // Cleanup (set the engine back to default).
+ Services.search.resetToAppDefaultEngine();
+ Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
+});
+
+// An engine set without a valid hash should be ignored.
+add_task(async function test_ignoreInvalidHash() {
+ // Set the engine through the API.
+ await Services.search.setDefault(
+ Services.search.getEngineByName(kTestEngineName),
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+ Assert.equal(Services.search.defaultEngine.name, kTestEngineName);
+ await promiseAfterSettings();
+
+ // Then mess with the file (make the hash invalid).
+ let metadata = await promiseGlobalMetadata();
+ metadata.defaultEngineIdHash = "invalid";
+ await promiseSaveGlobalMetadata(metadata);
+
+ // Re-init the search service, and check that the json file is ignored.
+ Services.search.wrappedJSObject.reset();
+ await Services.search.init(true);
+ Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
+});
+
+// Resetting the engine to the default should remove the saved value.
+add_task(async function test_settingToDefault() {
+ // Set the engine through the API.
+ await Services.search.setDefault(
+ Services.search.getEngineByName(kTestEngineName),
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+ Assert.equal(Services.search.defaultEngine.name, kTestEngineName);
+ await promiseAfterSettings();
+
+ // Check that the current engine was saved.
+ let metadata = await promiseGlobalMetadata();
+ let currentEngine = Services.search.getEngineByName(kTestEngineName);
+ Assert.equal(metadata.defaultEngineId, currentEngine.id);
+
+ // Then set the engine back to the default through the API.
+ await Services.search.setDefault(
+ Services.search.getEngineByName(kDefaultEngineName),
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+ await promiseAfterSettings();
+
+ // Check that the current engine is no longer saved in the JSON file.
+ metadata = await promiseGlobalMetadata();
+ Assert.equal(metadata.defaultEngineId, "");
+});
+
+add_task(async function test_resetToOriginalDefaultEngine() {
+ Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
+
+ await Services.search.setDefault(
+ Services.search.getEngineByName(kTestEngineName),
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+ Assert.equal(Services.search.defaultEngine.name, kTestEngineName);
+ await promiseAfterSettings();
+
+ Services.search.resetToAppDefaultEngine();
+ Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
+ await promiseAfterSettings();
+});
+
+add_task(async function test_fallback_kept_after_restart() {
+ // Set current engine to a default engine that isn't the original default.
+ let builtInEngines = await Services.search.getAppProvidedEngines();
+ let nonDefaultBuiltInEngine;
+ for (let engine of builtInEngines) {
+ if (engine.name != kDefaultEngineName) {
+ nonDefaultBuiltInEngine = engine;
+ break;
+ }
+ }
+ await Services.search.setDefault(
+ nonDefaultBuiltInEngine,
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+ Assert.equal(
+ Services.search.defaultEngine.name,
+ nonDefaultBuiltInEngine.name
+ );
+ await promiseAfterSettings();
+
+ // Remove that engine...
+ await Services.search.removeEngine(nonDefaultBuiltInEngine);
+ // The engine being a default (built-in) one, it should be hidden
+ // rather than actually removed.
+ Assert.ok(nonDefaultBuiltInEngine.hidden);
+
+ // Using the defaultEngine getter should force a fallback to the
+ // original default engine.
+ Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
+
+ // Restoring the default engines should unhide our built-in test
+ // engine, but not change the value of defaultEngine.
+ Services.search.restoreDefaultEngines();
+ Assert.ok(!nonDefaultBuiltInEngine.hidden);
+ Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
+ await promiseAfterSettings();
+
+ // After a restart, the defaultEngine value should still be unchanged.
+ Services.search.wrappedJSObject.reset();
+ await Services.search.init(true);
+ Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
+});