diff options
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_selectedEngine.js')
-rw-r--r-- | toolkit/components/search/tests/xpcshell/test_selectedEngine.js | 165 |
1 files changed, 165 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 000000000..a1c0f363e --- /dev/null +++ b/toolkit/components/search/tests/xpcshell/test_selectedEngine.js @@ -0,0 +1,165 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +Components.utils.import("resource://gre/modules/osfile.jsm"); + +const kSelectedEnginePref = "browser.search.selectedEngine"; + +// Check that the default engine matches the defaultenginename pref +add_task(function* test_defaultEngine() { + yield asyncInit(); + + do_check_eq(Services.search.currentEngine.name, getDefaultEngineName()); +}); + +// Giving prefs a user value shouldn't change the selected engine. +add_task(function* test_selectedEngine() { + let defaultEngineName = getDefaultEngineName(); + // Test the selectedEngine pref. + Services.prefs.setCharPref(kSelectedEnginePref, kTestEngineName); + + yield asyncReInit(); + do_check_eq(Services.search.currentEngine.name, defaultEngineName); + + Services.prefs.clearUserPref(kSelectedEnginePref); + + // Test the defaultenginename pref. + Services.prefs.setCharPref(kDefaultenginenamePref, kTestEngineName); + + yield asyncReInit(); + do_check_eq(Services.search.currentEngine.name, defaultEngineName); + + Services.prefs.clearUserPref(kDefaultenginenamePref); +}); + +// Setting the search engine should be persisted across restarts. +add_task(function* test_persistAcrossRestarts() { + // Set the engine through the API. + Services.search.currentEngine = Services.search.getEngineByName(kTestEngineName); + do_check_eq(Services.search.currentEngine.name, kTestEngineName); + yield promiseAfterCache(); + + // Check that the a hash was saved. + let metadata = yield promiseGlobalMetadata(); + do_check_eq(metadata.hash.length, 44); + + // Re-init and check the engine is still the same. + yield asyncReInit(); + do_check_eq(Services.search.currentEngine.name, kTestEngineName); + + // Cleanup (set the engine back to default). + Services.search.resetToOriginalDefaultEngine(); + do_check_eq(Services.search.currentEngine.name, getDefaultEngineName()); +}); + +// An engine set without a valid hash should be ignored. +add_task(function* test_ignoreInvalidHash() { + // Set the engine through the API. + Services.search.currentEngine = Services.search.getEngineByName(kTestEngineName); + do_check_eq(Services.search.currentEngine.name, kTestEngineName); + yield promiseAfterCache(); + + // Then mess with the file (make the hash invalid). + let metadata = yield promiseGlobalMetadata(); + metadata.hash = "invalid"; + yield promiseSaveGlobalMetadata(metadata); + + // Re-init the search service, and check that the json file is ignored. + yield asyncReInit(); + do_check_eq(Services.search.currentEngine.name, getDefaultEngineName()); +}); + +// Resetting the engine to the default should remove the saved value. +add_task(function* test_settingToDefault() { + // Set the engine through the API. + Services.search.currentEngine = Services.search.getEngineByName(kTestEngineName); + do_check_eq(Services.search.currentEngine.name, kTestEngineName); + yield promiseAfterCache(); + + // Check that the current engine was saved. + let metadata = yield promiseGlobalMetadata(); + do_check_eq(metadata.current, kTestEngineName); + + // Then set the engine back to the default through the API. + Services.search.currentEngine = + Services.search.getEngineByName(getDefaultEngineName()); + yield promiseAfterCache(); + + // Check that the current engine is no longer saved in the JSON file. + metadata = yield promiseGlobalMetadata(); + do_check_eq(metadata.current, ""); +}); + +add_task(function* test_resetToOriginalDefaultEngine() { + let defaultName = getDefaultEngineName(); + do_check_eq(Services.search.currentEngine.name, defaultName); + + Services.search.currentEngine = + Services.search.getEngineByName(kTestEngineName); + do_check_eq(Services.search.currentEngine.name, kTestEngineName); + yield promiseAfterCache(); + + Services.search.resetToOriginalDefaultEngine(); + do_check_eq(Services.search.currentEngine.name, defaultName); + yield promiseAfterCache(); +}); + +add_task(function* test_fallback_kept_after_restart() { + // Set current engine to a default engine that isn't the original default. + let builtInEngines = Services.search.getDefaultEngines(); + let defaultName = getDefaultEngineName(); + let nonDefaultBuiltInEngine; + for (let engine of builtInEngines) { + if (engine.name != defaultName) { + nonDefaultBuiltInEngine = engine; + break; + } + } + Services.search.currentEngine = nonDefaultBuiltInEngine; + do_check_eq(Services.search.currentEngine.name, nonDefaultBuiltInEngine.name); + yield promiseAfterCache(); + + // Remove that engine... + Services.search.removeEngine(nonDefaultBuiltInEngine); + // The engine being a default (built-in) one, it should be hidden + // rather than actually removed. + do_check_true(nonDefaultBuiltInEngine.hidden); + + // Using the currentEngine getter should force a fallback to the + // original default engine. + do_check_eq(Services.search.currentEngine.name, defaultName); + + // Restoring the default engines should unhide our built-in test + // engine, but not change the value of currentEngine. + Services.search.restoreDefaultEngines(); + do_check_false(nonDefaultBuiltInEngine.hidden); + do_check_eq(Services.search.currentEngine.name, defaultName); + yield promiseAfterCache(); + + // After a restart, the currentEngine value should still be unchanged. + yield asyncReInit(); + do_check_eq(Services.search.currentEngine.name, defaultName); +}); + + +function run_test() { + removeMetadata(); + removeCacheFile(); + + do_check_false(Services.search.isInitialized); + + let engineDummyFile = gProfD.clone(); + engineDummyFile.append("searchplugins"); + engineDummyFile.append("test-search-engine.xml"); + let engineDir = engineDummyFile.parent; + engineDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY); + + do_get_file("data/engine.xml").copyTo(engineDir, "engine.xml"); + + do_register_cleanup(function() { + removeMetadata(); + removeCacheFile(); + }); + + run_next_test(); +} |