]>
Commit | Line | Data |
---|---|---|
7279364c SM |
1 | /* jshint expr: true */ |
2 | ||
3 | var assert = chai.assert; | |
4 | var expect = chai.expect; | |
5 | ||
6 | import l10nGet, { l10n } from '../app/localization.js'; | |
7 | ||
8 | describe('Localization', function() { | |
9 | "use strict"; | |
10 | ||
11 | describe('language selection', function () { | |
12 | var origNavigator; | |
13 | beforeEach(function () { | |
14 | // window.navigator is a protected read-only property in many | |
15 | // environments, so we need to redefine it whilst running these | |
16 | // tests. | |
17 | origNavigator = Object.getOwnPropertyDescriptor(window, "navigator"); | |
18 | if (origNavigator === undefined) { | |
19 | // Object.getOwnPropertyDescriptor() doesn't work | |
20 | // properly in any version of IE | |
21 | this.skip(); | |
22 | } | |
23 | ||
24 | Object.defineProperty(window, "navigator", {value: {}}); | |
25 | if (window.navigator.languages !== undefined) { | |
26 | // Object.defineProperty() doesn't work properly in old | |
27 | // versions of Chrome | |
28 | this.skip(); | |
29 | } | |
30 | ||
31 | window.navigator.languages = []; | |
32 | }); | |
33 | afterEach(function () { | |
34 | Object.defineProperty(window, "navigator", origNavigator); | |
35 | }); | |
36 | ||
37 | it('should use English by default', function() { | |
38 | expect(l10n.language).to.equal('en'); | |
39 | }); | |
40 | it('should use English if no user language matches', function() { | |
41 | window.navigator.languages = ["nl", "de"]; | |
42 | l10n.setup(["es", "fr"]); | |
43 | expect(l10n.language).to.equal('en'); | |
44 | }); | |
45 | it('should use the most preferred user language', function() { | |
46 | window.navigator.languages = ["nl", "de", "fr"]; | |
47 | l10n.setup(["es", "fr", "de"]); | |
48 | expect(l10n.language).to.equal('de'); | |
49 | }); | |
50 | it('should prefer sub-languages languages', function() { | |
51 | window.navigator.languages = ["pt-BR"]; | |
52 | l10n.setup(["pt", "pt-BR"]); | |
53 | expect(l10n.language).to.equal('pt-BR'); | |
54 | }); | |
55 | it('should fall back to language "parents"', function() { | |
56 | window.navigator.languages = ["pt-BR"]; | |
57 | l10n.setup(["fr", "pt", "de"]); | |
58 | expect(l10n.language).to.equal('pt'); | |
59 | }); | |
60 | it('should not use specific language when user asks for a generic language', function() { | |
61 | window.navigator.languages = ["pt", "de"]; | |
62 | l10n.setup(["fr", "pt-BR", "de"]); | |
63 | expect(l10n.language).to.equal('de'); | |
64 | }); | |
65 | it('should handle underscore as a separator', function() { | |
66 | window.navigator.languages = ["pt-BR"]; | |
67 | l10n.setup(["pt_BR"]); | |
68 | expect(l10n.language).to.equal('pt_BR'); | |
69 | }); | |
70 | it('should handle difference in case', function() { | |
71 | window.navigator.languages = ["pt-br"]; | |
72 | l10n.setup(["pt-BR"]); | |
73 | expect(l10n.language).to.equal('pt-BR'); | |
74 | }); | |
75 | }); | |
76 | }); |