summaryrefslogtreecommitdiffstats
path: root/toolkit/components/translations/tests/browser/browser_translations_actor_detected_langs.js
blob: 65479a968e107073c60ba56a1cfff05f909565ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

add_task(async function test_detected_language() {
  const { cleanup, tab } = await loadTestPage({
    // This page will get its language changed by the test.
    page: ENGLISH_PAGE_URL,
    autoDownloadFromRemoteSettings: true,
    languagePairs: [
      // Spanish
      { fromLang: "es", toLang: "en" },
      { fromLang: "en", toLang: "es" },

      // Norwegian Bokmål
      { fromLang: "nb", toLang: "en" },
      { fromLang: "en", toLang: "nb" },
    ],
  });

  async function getDetectedLanguagesFor(docLangTag) {
    await ContentTask.spawn(
      tab.linkedBrowser,
      { docLangTag },
      function changeLanguage({ docLangTag }) {
        content.document.body.parentNode.setAttribute("lang", docLangTag);
      }
    );
    // Clear out the cached values.
    getTranslationsParent().languageState.detectedLanguages = null;
    return getTranslationsParent().getDetectedLanguages(docLangTag);
  }

  Assert.deepEqual(
    await getDetectedLanguagesFor("es"),
    {
      docLangTag: "es",
      userLangTag: "en",
      isDocLangTagSupported: true,
    },
    "Spanish is detected as a supported language."
  );

  Assert.deepEqual(
    await getDetectedLanguagesFor("chr"),
    {
      docLangTag: "chr",
      userLangTag: "en",
      isDocLangTagSupported: false,
    },
    "Cherokee is detected, but is not a supported language."
  );

  Assert.deepEqual(
    await getDetectedLanguagesFor("no"),
    {
      docLangTag: "nb",
      userLangTag: "en",
      isDocLangTagSupported: true,
    },
    "The Norwegian macro language is detected, but it defaults to Norwegian Bokmål."
  );

  Assert.deepEqual(
    await getDetectedLanguagesFor("spa"),
    {
      docLangTag: "es",
      userLangTag: "en",
      isDocLangTagSupported: true,
    },
    'The three letter "spa" locale is canonicalized to "es".'
  );

  Assert.deepEqual(
    await getDetectedLanguagesFor("gibberish"),
    {
      docLangTag: "en",
      userLangTag: null,
      isDocLangTagSupported: true,
    },
    "A gibberish locale is discarded, and the language is detected."
  );

  return cleanup();
});