summaryrefslogtreecommitdiffstats
path: root/toolkit/components/translations/tests/browser/browser_translations_actor_preferred_language.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/translations/tests/browser/browser_translations_actor_preferred_language.js')
-rw-r--r--toolkit/components/translations/tests/browser/browser_translations_actor_preferred_language.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/toolkit/components/translations/tests/browser/browser_translations_actor_preferred_language.js b/toolkit/components/translations/tests/browser/browser_translations_actor_preferred_language.js
new file mode 100644
index 0000000000..0960e05b6e
--- /dev/null
+++ b/toolkit/components/translations/tests/browser/browser_translations_actor_preferred_language.js
@@ -0,0 +1,81 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+function waitForAppLocaleChanged() {
+ new Promise(resolve => {
+ function onChange() {
+ Services.obs.removeObserver(onChange, "intl:app-locales-changed");
+ resolve();
+ }
+ Services.obs.addObserver(onChange, "intl:app-locales-changed");
+ });
+}
+
+async function testWithLocales({
+ systemLocales,
+ appLocales,
+ webLanguages,
+ test,
+}) {
+ const cleanup = await mockLocales({
+ systemLocales,
+ appLocales,
+ webLanguages,
+ });
+ test();
+ return cleanup();
+}
+
+add_task(async function test_preferred_language() {
+ await testWithLocales({
+ systemLocales: ["en-US"],
+ appLocales: ["en-US"],
+ webLanguages: ["en-US"],
+ test() {
+ Assert.deepEqual(
+ TranslationsParent.getPreferredLanguages(),
+ ["en"],
+ "When all locales are English, only English is preferred."
+ );
+ },
+ });
+
+ await testWithLocales({
+ systemLocales: ["es-ES"],
+ appLocales: ["en-US"],
+ webLanguages: ["en-US"],
+ test() {
+ Assert.deepEqual(
+ TranslationsParent.getPreferredLanguages(),
+ ["en", "es"],
+ "When the operating system differs, it is added to the end of the preferred languages."
+ );
+ },
+ });
+
+ await testWithLocales({
+ systemLocales: ["zh-TW", "zh-CN", "de"],
+ appLocales: ["pt-BR", "pl"],
+ webLanguages: ["cs", "hu"],
+ test() {
+ Assert.deepEqual(
+ TranslationsParent.getPreferredLanguages(),
+ [
+ // webLanguages
+ "cs",
+ "hu",
+ // appLocales, notice that "en" is the last fallback.
+ "pt",
+ "pl",
+ "en",
+ // systemLocales
+ "zh",
+ "de",
+ ],
+ "Demonstrate an unrealistic but complicated locale situation."
+ );
+ },
+ });
+});