diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /toolkit/components/search/tests/xpcshell/test_engine_selector_engine_orders.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_engine_selector_engine_orders.js')
-rw-r--r-- | toolkit/components/search/tests/xpcshell/test_engine_selector_engine_orders.js | 348 |
1 files changed, 348 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_engine_selector_engine_orders.js b/toolkit/components/search/tests/xpcshell/test_engine_selector_engine_orders.js new file mode 100644 index 0000000000..e7725ceb21 --- /dev/null +++ b/toolkit/components/search/tests/xpcshell/test_engine_selector_engine_orders.js @@ -0,0 +1,348 @@ +/* Any copyright is dedicated to the Public Domain. +http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * This tests the SearchEngineSelector in ordering the engines correctly based + * on the user's environment. + */ + +"use strict"; + +ChromeUtils.defineESModuleGetters(this, { + SearchEngineSelector: "resource://gre/modules/SearchEngineSelector.sys.mjs", +}); + +const ENGINE_ORDERS_CONFIG = [ + { + recordType: "engine", + identifier: "b-engine", + base: {}, + variants: [ + { + environment: { + allRegionsAndLocales: true, + }, + }, + ], + }, + { + recordType: "engine", + identifier: "a-engine", + base: {}, + variants: [ + { + environment: { + allRegionsAndLocales: true, + }, + }, + ], + }, + { + recordType: "engine", + identifier: "c-engine", + base: {}, + variants: [ + { + environment: { + allRegionsAndLocales: true, + }, + }, + ], + }, + { + recordType: "defaultEngines", + specificDefaults: [], + }, + { + recordType: "engineOrders", + orders: [ + { + environment: { distributions: ["distro"] }, + order: ["a-engine", "b-engine", "c-engine"], + }, + { + environment: { + distributions: ["distro"], + locales: ["en-CA"], + regions: ["CA"], + }, + order: ["c-engine", "b-engine", "a-engine"], + }, + { + environment: { + distributions: ["distro-2"], + }, + order: ["a-engine", "b-engine"], + }, + ], + }, +]; + +const STARTS_WITH_WIKI_CONFIG = [ + { + recordType: "engine", + identifier: "wiki-ca", + base: {}, + variants: [ + { + environment: { + locales: ["en-CA"], + regions: ["CA"], + }, + }, + ], + }, + { + recordType: "engine", + identifier: "wiki-uk", + base: {}, + variants: [ + { + environment: { + locales: ["en-GB"], + regions: ["GB"], + }, + }, + ], + }, + { + recordType: "engine", + identifier: "engine-1", + base: {}, + variants: [ + { + environment: { + allRegionsAndLocales: true, + }, + }, + ], + }, + { + recordType: "engine", + identifier: "engine-2", + base: {}, + variants: [ + { + environment: { + allRegionsAndLocales: true, + }, + }, + ], + }, + { + recordType: "defaultEngines", + specificDefaults: [], + }, + { + recordType: "engineOrders", + orders: [ + { + environment: { + locales: ["en-CA"], + regions: ["CA"], + }, + order: ["wiki*", "engine-1", "engine-2"], + }, + { + environment: { + locales: ["en-GB"], + regions: ["GB"], + }, + order: ["wiki*", "engine-1", "engine-2"], + }, + ], + }, +]; + +const DEFAULTS_CONFIG = [ + { + recordType: "engine", + identifier: "b-engine", + base: {}, + variants: [ + { + environment: { + allRegionsAndLocales: true, + }, + }, + ], + }, + { + recordType: "engine", + identifier: "a-engine", + base: {}, + variants: [ + { + environment: { + allRegionsAndLocales: true, + }, + }, + ], + }, + { + recordType: "engine", + identifier: "default-engine", + base: {}, + variants: [ + { + environment: { + allRegionsAndLocales: true, + }, + }, + ], + }, + { + recordType: "engine", + identifier: "default-private-engine", + base: {}, + variants: [ + { + environment: { + allRegionsAndLocales: true, + }, + }, + ], + }, + { + recordType: "defaultEngines", + globalDefault: "default-engine", + globalDefaultPrivate: "default-private-engine", + specificDefaults: [], + }, + { + recordType: "engineOrders", + orders: [ + { + environment: { + locales: ["en-CA"], + regions: ["CA"], + }, + order: ["a-engine", "b-engine"], + }, + ], + }, +]; + +const engineSelector = new SearchEngineSelector(); +let settings; +let settingOverrides; +let configStub; +let overrideStub; + +/** + * This function asserts if the actual engine identifiers returned equals + * the expected engines. + * + * @param {object} config + * A mock search config contain engines. + * @param {object} userEnv + * A fake user's environment including locale and region, experiment, etc. + * @param {Array} expectedEngineOrders + * The array of engine identifers in the expected order. + * @param {string} message + * The description of the test. + */ +async function assertActualEnginesEqualsExpected( + config, + userEnv, + expectedEngineOrders, + message +) { + engineSelector._configuration = null; + configStub.returns(config); + + let { engines } = await engineSelector.fetchEngineConfiguration(userEnv); + let actualEngineOrders = engines.map(engine => engine.identifier); + + info(`${message}`); + Assert.deepEqual(actualEngineOrders, expectedEngineOrders, message); +} + +add_setup(async function () { + settings = await RemoteSettings(SearchUtils.NEW_SETTINGS_KEY); + configStub = sinon.stub(settings, "get"); + settingOverrides = await RemoteSettings( + SearchUtils.NEW_SETTINGS_OVERRIDES_KEY + ); + overrideStub = sinon.stub(settingOverrides, "get"); + overrideStub.returns([]); +}); + +add_task(async function test_selector_match_engine_orders() { + await assertActualEnginesEqualsExpected( + ENGINE_ORDERS_CONFIG, + { + locale: "fr", + region: "FR", + distroID: "distro", + }, + ["a-engine", "b-engine", "c-engine"], + "Should match engine orders with the distro distribution." + ); + + await assertActualEnginesEqualsExpected( + ENGINE_ORDERS_CONFIG, + { + locale: "en-CA", + region: "CA", + distroID: "distro", + }, + ["c-engine", "b-engine", "a-engine"], + "Should match engine orders with the distro distribution, en-CA locale and CA region." + ); + + await assertActualEnginesEqualsExpected( + ENGINE_ORDERS_CONFIG, + { + locale: "en-CA", + region: "CA", + distroID: "distro-2", + }, + ["a-engine", "b-engine", "c-engine"], + "Should order the first two engines correctly for distro-2 distribution" + ); + + await assertActualEnginesEqualsExpected( + ENGINE_ORDERS_CONFIG, + { + locale: "en-CA", + region: "CA", + }, + ["b-engine", "a-engine", "c-engine"], + "Should be in the same engine order as the config when there's no engine order environments matched." + ); +}); + +add_task(async function test_selector_match_engine_orders_starts_with() { + await assertActualEnginesEqualsExpected( + STARTS_WITH_WIKI_CONFIG, + { + locale: "en-CA", + region: "CA", + }, + ["wiki-ca", "engine-1", "engine-2"], + "Should list the wiki-ca engine and other engines in correct orders with the en-CA and CA locale region environment." + ); + + await assertActualEnginesEqualsExpected( + STARTS_WITH_WIKI_CONFIG, + { + locale: "en-GB", + region: "GB", + }, + ["wiki-uk", "engine-1", "engine-2"], + "Should list the wiki-ca engine and other engines in correct orders with the en-CA and CA locale region environment." + ); +}); + +add_task(async function test_selector_match_engine_orders_with_defaults() { + await assertActualEnginesEqualsExpected( + DEFAULTS_CONFIG, + { + locale: "en-CA", + region: "CA", + }, + ["default-engine", "default-private-engine", "a-engine", "b-engine"], + "Should order the default engine first, default private engine second, and the rest of the engines in the correct order." + ); +}); |