| const expect = chai.expect; |
| import { l10n } from '../app/localization.js'; |
| |
| describe('Localization', function () { |
| "use strict"; |
| |
| describe('language selection', function () { |
| let origNavigator; |
| beforeEach(function () { |
| // window.navigator is a protected read-only property in many |
| // environments, so we need to redefine it whilst running these |
| // tests. |
| origNavigator = Object.getOwnPropertyDescriptor(window, "navigator"); |
| if (origNavigator === undefined) { |
| // Object.getOwnPropertyDescriptor() doesn't work |
| // properly in any version of IE |
| this.skip(); |
| } |
| |
| Object.defineProperty(window, "navigator", {value: {}}); |
| if (window.navigator.languages !== undefined) { |
| // Object.defineProperty() doesn't work properly in old |
| // versions of Chrome |
| this.skip(); |
| } |
| |
| window.navigator.languages = []; |
| }); |
| afterEach(function () { |
| Object.defineProperty(window, "navigator", origNavigator); |
| }); |
| |
| it('should use English by default', function () { |
| expect(l10n.language).to.equal('en'); |
| }); |
| it('should use English if no user language matches', function () { |
| window.navigator.languages = ["nl", "de"]; |
| l10n.setup(["es", "fr"]); |
| expect(l10n.language).to.equal('en'); |
| }); |
| it('should use the most preferred user language', function () { |
| window.navigator.languages = ["nl", "de", "fr"]; |
| l10n.setup(["es", "fr", "de"]); |
| expect(l10n.language).to.equal('de'); |
| }); |
| it('should prefer sub-languages languages', function () { |
| window.navigator.languages = ["pt-BR"]; |
| l10n.setup(["pt", "pt-BR"]); |
| expect(l10n.language).to.equal('pt-BR'); |
| }); |
| it('should fall back to language "parents"', function () { |
| window.navigator.languages = ["pt-BR"]; |
| l10n.setup(["fr", "pt", "de"]); |
| expect(l10n.language).to.equal('pt'); |
| }); |
| it('should not use specific language when user asks for a generic language', function () { |
| window.navigator.languages = ["pt", "de"]; |
| l10n.setup(["fr", "pt-BR", "de"]); |
| expect(l10n.language).to.equal('de'); |
| }); |
| it('should handle underscore as a separator', function () { |
| window.navigator.languages = ["pt-BR"]; |
| l10n.setup(["pt_BR"]); |
| expect(l10n.language).to.equal('pt_BR'); |
| }); |
| it('should handle difference in case', function () { |
| window.navigator.languages = ["pt-br"]; |
| l10n.setup(["pt-BR"]); |
| expect(l10n.language).to.equal('pt-BR'); |
| }); |
| }); |
| }); |