diff options
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_defaultEngine_fallback.js')
-rw-r--r-- | toolkit/components/search/tests/xpcshell/test_defaultEngine_fallback.js | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_defaultEngine_fallback.js b/toolkit/components/search/tests/xpcshell/test_defaultEngine_fallback.js new file mode 100644 index 0000000000..15003f1590 --- /dev/null +++ b/toolkit/components/search/tests/xpcshell/test_defaultEngine_fallback.js @@ -0,0 +1,135 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +add_task(async function setup() { + useHttpServer(); + await SearchTestUtils.useTestEngines(); + + Services.prefs.setCharPref(SearchUtils.BROWSER_SEARCH_PREF + "region", "US"); + Services.prefs.setBoolPref( + SearchUtils.BROWSER_SEARCH_PREF + "separatePrivateDefault.ui.enabled", + true + ); + Services.prefs.setBoolPref( + SearchUtils.BROWSER_SEARCH_PREF + "separatePrivateDefault", + true + ); + + await AddonTestUtils.promiseStartupManager(); +}); + +function getDefault(privateMode) { + return privateMode + ? Services.search.getDefaultPrivate() + : Services.search.getDefault(); +} + +async function checkBuiltinFallback(privateMode) { + info( + `Testing ${ + privateMode ? "private" : "normal" + } default engine fallback (builtin)` + ); + + Assert.ok((await Services.search.getVisibleEngines()).length > 1); + Assert.ok(Services.search.isInitialized); + + let defaultEngine = await getDefault(privateMode); + await Services.search.removeEngine(defaultEngine); + + Assert.notEqual( + (await getDefault(privateMode)).name, + defaultEngine.name, + "Should have changed the default to a different engine" + ); + Assert.ok(defaultEngine.hidden, "Should have hidden the removed engine"); + + for (let engine of await Services.search.getVisibleEngines()) { + await Services.search.removeEngine(engine); + } + Assert.strictEqual( + (await Services.search.getVisibleEngines()).length, + 0, + "Should have no visible engines left after removal" + ); + + Assert.equal( + (await getDefault(privateMode)).name, + defaultEngine.name, + "Should fallback to the original default engine after removing all engines" + ); + Assert.ok( + !defaultEngine.hidden, + "Should have unhidden the original default engine" + ); + Assert.equal( + (await Services.search.getVisibleEngines()).length, + 1, + "Should now have one engine visible" + ); + if (privateMode) { + // When all engines have been hidden, and the default is re-obtained, + // then it first looks at visible engines, as the private engine has been + // re-established, we get that here. + Assert.equal( + (await getDefault(false)).name, + defaultEngine.name, + "Should still have the correct default in normal mode after adjusting the private mode default" + ); + await Services.search.setDefault( + await Services.search.originalDefaultEngine + ); + } else { + await Services.search.setDefaultPrivate( + await Services.search.originalPrivateDefaultEngine + ); + } + + // Re-enable all engines ready for the next test. + Services.search.restoreDefaultEngines(); +} + +add_task(async function test_default_fallback_builtin() { + await checkBuiltinFallback(false); +}); + +add_task(async function test_default_fallback_builtin_private() { + await checkBuiltinFallback(true); +}); + +async function checkNonBuiltinFallback(privateMode) { + info( + `Testing ${ + privateMode ? "private" : "normal" + } default engine fallback (non-builtin)` + ); + + const [addedEngine] = await addTestEngines([ + { name: "A second test engine", xmlFileName: "engine2.xml" }, + ]); + const defaultEngine = await getDefault(privateMode); + + if (privateMode) { + await Services.search.setDefaultPrivate(addedEngine); + } else { + await Services.search.setDefault(addedEngine); + } + + // Remove the current engine... + await Services.search.removeEngine(addedEngine); + + // ... and verify we've reverted to the normal default engine. + Assert.equal( + (await getDefault(privateMode)).name, + defaultEngine.name, + "Should revert to the original default engine" + ); +} + +add_task(async function test_default_fallback_non_builtin() { + await checkNonBuiltinFallback(false); +}); + +add_task(async function test_default_fallback_non_builtin_private() { + await checkNonBuiltinFallback(true); +}); |