summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_engine_selector_defaults.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_engine_selector_defaults.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_engine_selector_defaults.js349
1 files changed, 349 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_engine_selector_defaults.js b/toolkit/components/search/tests/xpcshell/test_engine_selector_defaults.js
new file mode 100644
index 0000000000..bb904fcc86
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_engine_selector_defaults.js
@@ -0,0 +1,349 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * This tests the SearchEngineSelector in finding the correct default engine
+ * and private default engine based on the user's environment.
+ */
+
+"use strict";
+
+ChromeUtils.defineESModuleGetters(this, {
+ SearchEngineSelector: "resource://gre/modules/SearchEngineSelector.sys.mjs",
+});
+
+const CONFIG = [
+ {
+ recordType: "engine",
+ identifier: "global-default",
+ base: {},
+ variants: [
+ {
+ environment: {
+ allRegionsAndLocales: true,
+ },
+ },
+ ],
+ },
+ {
+ recordType: "engine",
+ identifier: "global-default-private",
+ base: {},
+ variants: [
+ {
+ environment: {
+ allRegionsAndLocales: true,
+ },
+ },
+ ],
+ },
+ {
+ recordType: "engine",
+ identifier: "default-specific-location",
+ base: {},
+ variants: [
+ {
+ environment: {
+ allRegionsAndLocales: true,
+ },
+ },
+ ],
+ },
+ {
+ recordType: "engine",
+ identifier: "default-specific-distro",
+ base: {},
+ variants: [
+ {
+ environment: {
+ allRegionsAndLocales: true,
+ },
+ },
+ ],
+ },
+ {
+ recordType: "engine",
+ identifier: "default-starts-with-ca",
+ base: {},
+ variants: [
+ {
+ environment: { locales: ["en-US"], regions: ["CA"] },
+ },
+ ],
+ },
+ {
+ recordType: "engine",
+ identifier: "default-starts-with-us",
+ base: {},
+ variants: [
+ {
+ environment: { locales: ["en-US"], regions: ["US"] },
+ },
+ ],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "global-default",
+ globalDefaultPrivate: "global-default-private",
+ specificDefaults: [
+ {
+ environment: { locales: ["zh-CN"], regions: ["cn"] },
+ default: "default-specific-location",
+ defaultPrivate: "default-specific-location",
+ },
+ {
+ environment: { distributions: ["specific-distro"] },
+ default: "default-specific-distro",
+ defaultPrivate: "default-specific-distro",
+ },
+ {
+ environment: { locales: ["en-US"], regions: ["CA"] },
+ default: "default-starts-with*",
+ defaultPrivate: "default-starts-with*",
+ },
+ {
+ environment: { locales: ["en-US"], regions: ["US"] },
+ default: "default-starts-with*",
+ defaultPrivate: "default-starts-with*",
+ },
+ ],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+];
+
+const CONFIG_DEFAULTS_OVERRIDE = [
+ {
+ recordType: "engine",
+ identifier: "engine-global",
+ base: {},
+ variants: [
+ {
+ environment: {
+ allRegionsAndLocales: true,
+ },
+ },
+ ],
+ },
+ {
+ recordType: "engine",
+ identifier: "engine-locale-de",
+ base: {},
+ variants: [
+ {
+ environment: {
+ locales: ["de"],
+ },
+ },
+ ],
+ },
+ {
+ recordType: "engine",
+ identifier: "engine-distro",
+ base: {},
+ variants: [
+ {
+ environment: {
+ distributions: ["distro"],
+ regions: ["FR"],
+ },
+ },
+ ],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "engine-global",
+ specificDefaults: [
+ {
+ environment: { locales: ["de"] },
+ default: "engine-locale-de",
+ },
+ {
+ environment: { distributions: ["distro"] },
+ default: "engine-distro",
+ },
+ ],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+];
+
+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 {string} expectedDefault
+ * The identifer of the expected default engine.
+ * @param {string} expectedDefaultPrivate
+ * The identifer of the expected default private engine.
+ * @param {string} message
+ * The description of the test.
+ */
+async function assertActualEnginesEqualsExpected(
+ config,
+ userEnv,
+ expectedDefault,
+ expectedDefaultPrivate,
+ message
+) {
+ engineSelector._configuration = null;
+ configStub.returns(config);
+
+ let { engines, privateDefault } =
+ await engineSelector.fetchEngineConfiguration(userEnv);
+ let actualEngines = engines.map(engine => engine.identifier);
+
+ info(`${message}`);
+ Assert.equal(
+ actualEngines[0],
+ expectedDefault,
+ `Should match the default engine ${expectedDefault}.`
+ );
+
+ Assert.equal(
+ privateDefault ? privateDefault.identifier : undefined,
+ expectedDefaultPrivate,
+ `Should match default private engine ${expectedDefaultPrivate}.`
+ );
+}
+
+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_default_engines() {
+ await assertActualEnginesEqualsExpected(
+ CONFIG,
+ {
+ locale: "en-CA",
+ region: "ca",
+ },
+ "global-default",
+ "global-default-private",
+ "Should use the global default engine and global default private when no specific defaults are matched."
+ );
+
+ await assertActualEnginesEqualsExpected(
+ CONFIG,
+ {
+ locale: "zh-CN",
+ region: "cn",
+ },
+ "default-specific-location",
+ "default-specific-location",
+ "Should use the matched locale and region default engine."
+ );
+
+ await assertActualEnginesEqualsExpected(
+ CONFIG,
+ {
+ locale: "fi",
+ region: "FI",
+ distroID: "specific-distro",
+ },
+ "default-specific-distro",
+ "default-specific-distro",
+ "Should use the matched distribution default engine."
+ );
+
+ await assertActualEnginesEqualsExpected(
+ CONFIG,
+ {
+ locale: "en-US",
+ region: "CA",
+ },
+ "default-starts-with-ca",
+ "default-starts-with-ca",
+ "Should use the matched default engine with specific suffix."
+ );
+
+ await assertActualEnginesEqualsExpected(
+ CONFIG,
+ {
+ locale: "en-US",
+ region: "US",
+ },
+ "default-starts-with-us",
+ "default-starts-with-us",
+ "Should use the matched default engine with specific suffix."
+ );
+});
+
+add_task(async function test_default_engines_override() {
+ await assertActualEnginesEqualsExpected(
+ CONFIG_DEFAULTS_OVERRIDE,
+ {
+ locale: "en-US",
+ region: "US",
+ },
+ "engine-global",
+ undefined,
+ "Should use the globalDefault for default when no specific defaults are matched. Private default should be undefined when no default private."
+ );
+
+ await assertActualEnginesEqualsExpected(
+ CONFIG_DEFAULTS_OVERRIDE,
+ {
+ locale: "de",
+ region: "US",
+ },
+ "engine-locale-de",
+ undefined,
+ "Should use the matched locale default engine."
+ );
+
+ await assertActualEnginesEqualsExpected(
+ CONFIG_DEFAULTS_OVERRIDE,
+ {
+ locale: "de",
+ region: "FR",
+ },
+ "engine-locale-de",
+ undefined,
+ "Should use the matched locale default engine."
+ );
+
+ await assertActualEnginesEqualsExpected(
+ CONFIG_DEFAULTS_OVERRIDE,
+ {
+ locale: "en-US",
+ region: "FR",
+ distroID: "distro",
+ },
+ "engine-distro",
+ undefined,
+ "Should use the matched distro default engine."
+ );
+
+ await assertActualEnginesEqualsExpected(
+ CONFIG_DEFAULTS_OVERRIDE,
+ {
+ locale: "de",
+ region: "FR",
+ distroID: "distro",
+ },
+ "engine-distro",
+ undefined,
+ "Should use the last matched default engine when multiple default engines are matched."
+ );
+});