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
|
/* 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."
);
},
});
});
|