summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_webextensions_language_switch.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_webextensions_language_switch.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_webextensions_language_switch.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_webextensions_language_switch.js b/toolkit/components/search/tests/xpcshell/test_webextensions_language_switch.js
new file mode 100644
index 0000000000..6a781bba5b
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_webextensions_language_switch.js
@@ -0,0 +1,110 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { promiseShutdownManager, promiseStartupManager } = AddonTestUtils;
+
+add_setup(async function () {
+ Services.locale.availableLocales = [
+ ...Services.locale.availableLocales,
+ "en",
+ "de",
+ "fr",
+ ];
+ Services.locale.requestedLocales = ["en"];
+
+ await SearchTestUtils.useTestEngines("data1");
+ await promiseStartupManager();
+ await Services.search.init();
+ await promiseAfterSettings();
+
+ registerCleanupFunction(promiseShutdownManager);
+});
+
+add_task(async function test_language_switch_changes_name() {
+ await SearchTestUtils.installSearchExtension(
+ {
+ name: "__MSG_engineName__",
+ id: "engine@tests.mozilla.org",
+ search_url_get_params: `q={searchTerms}&version=1.0`,
+ default_locale: "en",
+ version: "1.0",
+ },
+ { skipUnload: false },
+ {
+ "_locales/en/messages.json": {
+ engineName: {
+ message: "English Name",
+ description: "The Name",
+ },
+ },
+ "_locales/fr/messages.json": {
+ engineName: {
+ message: "French Name",
+ description: "The Name",
+ },
+ },
+ }
+ );
+
+ let engine = Services.search.getEngineById("engine@tests.mozilla.orgdefault");
+ Assert.ok(!!engine, "Should have loaded the engine");
+ Assert.equal(
+ engine.name,
+ "English Name",
+ "Should have loaded the English version of the name"
+ );
+
+ await Services.search.setDefault(
+ engine,
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+
+ let promiseChanged = TestUtils.topicObserved(
+ "browser-search-engine-modified",
+ (eng, verb) => verb == "engine-changed"
+ );
+
+ await promiseSetLocale("fr");
+
+ await promiseChanged;
+
+ engine = Services.search.getEngineById("engine@tests.mozilla.orgdefault");
+ Assert.ok(!!engine, "Should still be available");
+ Assert.equal(
+ engine.name,
+ "French Name",
+ "Should have updated to the French version of the name"
+ );
+
+ Assert.equal(
+ (await Services.search.getDefault()).id,
+ engine.id,
+ "Should have kept the default engine the same"
+ );
+
+ promiseChanged = TestUtils.topicObserved(
+ "browser-search-engine-modified",
+ (eng, verb) => verb == "engine-changed"
+ );
+
+ // Check for changing to a locale the add-on doesn't have.
+ await promiseSetLocale("de");
+
+ await promiseChanged;
+
+ engine = Services.search.getEngineById("engine@tests.mozilla.orgdefault");
+ Assert.ok(!!engine, "Should still be available");
+ Assert.equal(
+ engine.name,
+ "English Name",
+ "Should have fallen back to the default locale (English) version of the name"
+ );
+
+ Assert.equal(
+ (await Services.search.getDefault()).id,
+ engine.id,
+ "Should have kept the default engine the same"
+ );
+});