test.localization.js 2.7 KB

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