test_makemessages.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. from django.test import TestCase
  2. from misago.core.management.commands.makemessages import (HandlebarsTemplate,
  3. HandlebarsFile)
  4. class HandlebarsFileTests(TestCase):
  5. def test_make_js_path(self):
  6. """Object correctly translates hbs path to temp js path"""
  7. hbs_path = "templates/application.hbs"
  8. test_file = HandlebarsFile(hbs_path, False)
  9. suffix = test_file.make_js_path_suffix(hbs_path)
  10. self.assertTrue(suffix.endswith(".tmp.js"))
  11. js_path = test_file.make_js_path(hbs_path, suffix)
  12. self.assertTrue(js_path.startswith(hbs_path))
  13. self.assertTrue(js_path.endswith(suffix))
  14. class HandlebarsTemplateTests(TestCase):
  15. def test_empty_file(self):
  16. """empty file causes no errors"""
  17. template = HandlebarsTemplate("")
  18. self.assertEqual(template.get_converted_content(), "")
  19. def test_stripped_expression(self):
  20. """non-i18n expression is stripped"""
  21. template = HandlebarsTemplate("{{ some.expression }}")
  22. self.assertEqual(template.get_converted_content(), "")
  23. def test_invalid_expression_stripping(self):
  24. """invalid i18n expressions are stripped"""
  25. template = HandlebarsTemplate("{{gettext }}")
  26. self.assertEqual(template.get_converted_content(), "")
  27. template = HandlebarsTemplate("{{ngettext }}")
  28. self.assertEqual(template.get_converted_content(), "")
  29. template = HandlebarsTemplate("{{ngettext 'apple' }}")
  30. self.assertEqual(template.get_converted_content(), "")
  31. template = HandlebarsTemplate("{{ngettext 'apple' 'apples' }}")
  32. self.assertEqual(template.get_converted_content(), "")
  33. template = HandlebarsTemplate("{{gettext_noop }}")
  34. self.assertEqual(template.get_converted_content(), "")
  35. template = HandlebarsTemplate("{{pgettext }}")
  36. self.assertEqual(template.get_converted_content(), "")
  37. template = HandlebarsTemplate("{{pgettext 'apple' }}")
  38. self.assertEqual(template.get_converted_content(), "")
  39. template = HandlebarsTemplate("{{npgettext 'fruit' 'apple' }}")
  40. self.assertEqual(template.get_converted_content(), "")
  41. def test_valid_expression_replace(self):
  42. """valid i18n expressions are replaced"""
  43. template = HandlebarsTemplate("{{gettext 'Lorem ipsum'}}")
  44. self.assertEqual(template.get_converted_content(),
  45. "gettext('Lorem ipsum');")
  46. template = HandlebarsTemplate("{{gettext 'Lorem %(vis)s' vis=name}}")
  47. self.assertEqual(template.get_converted_content(),
  48. "gettext('Lorem %(vis)s');")
  49. template = HandlebarsTemplate("{{gettext some_variable}}")
  50. self.assertEqual(template.get_converted_content(),
  51. "gettext(some_variable);")
  52. template = HandlebarsTemplate("{{gettext 'Lorem ipsum'}}")
  53. self.assertEqual(template.get_converted_content(),
  54. "gettext('Lorem ipsum');")
  55. template = HandlebarsTemplate("{{gettext 'Lorem %(vis)s' vis=name}}")
  56. self.assertEqual(template.get_converted_content(),
  57. "gettext('Lorem %(vis)s');")
  58. template = HandlebarsTemplate("{{gettext some_variable}}")
  59. self.assertEqual(template.get_converted_content(),
  60. "gettext(some_variable);")
  61. template = HandlebarsTemplate("{{gettext some_variable user=user.username}}")
  62. self.assertEqual(template.get_converted_content(),
  63. "gettext(some_variable);")
  64. template = HandlebarsTemplate("{{ngettext '%(count)s apple' '%(count)s apples' apples_count}}")
  65. self.assertEqual(template.get_converted_content(),
  66. "ngettext('%(count)s apple', '%(count)s apples', apples_count);")
  67. template = HandlebarsTemplate("{{ngettext '%(user)s has %(count)s apple' '%(user)s has %(count)s apples' apples_count user=user.username}}")
  68. self.assertEqual(template.get_converted_content(),
  69. "ngettext('%(user)s has %(count)s apple', '%(user)s has %(count)s apples', apples_count);")
  70. template = HandlebarsTemplate("{{ngettext apple apples apples_count}}")
  71. self.assertEqual(template.get_converted_content(),
  72. "ngettext(apple, apples, apples_count);")
  73. template = HandlebarsTemplate("{{ngettext '%(count)s apple' apples apples_count}}")
  74. self.assertEqual(template.get_converted_content(),
  75. "ngettext('%(count)s apple', apples, apples_count);")
  76. template = HandlebarsTemplate("{{ngettext '%(user)s has %(count)s apple' apples apples_count user=user.username}}")
  77. self.assertEqual(template.get_converted_content(),
  78. "ngettext('%(user)s has %(count)s apple', apples, apples_count);")
  79. template = HandlebarsTemplate("{{gettext_noop 'Lorem ipsum'}}")
  80. self.assertEqual(template.get_converted_content(),
  81. "gettext_noop('Lorem ipsum');")
  82. template = HandlebarsTemplate("{{gettext_noop 'Lorem %(vis)s' vis=name}}")
  83. self.assertEqual(template.get_converted_content(),
  84. "gettext_noop('Lorem %(vis)s');")
  85. template = HandlebarsTemplate("{{gettext_noop some_variable}}")
  86. self.assertEqual(template.get_converted_content(),
  87. "gettext_noop(some_variable);")
  88. template = HandlebarsTemplate("{{gettext_noop 'Lorem ipsum'}}")
  89. self.assertEqual(template.get_converted_content(),
  90. "gettext_noop('Lorem ipsum');")
  91. template = HandlebarsTemplate("{{gettext_noop 'Lorem %(vis)s' vis=name}}")
  92. self.assertEqual(template.get_converted_content(),
  93. "gettext_noop('Lorem %(vis)s');")
  94. template = HandlebarsTemplate("{{gettext_noop some_variable}}")
  95. self.assertEqual(template.get_converted_content(),
  96. "gettext_noop(some_variable);")
  97. template = HandlebarsTemplate("{{pgettext 'month' 'may'}}")
  98. self.assertEqual(template.get_converted_content(),
  99. "pgettext('month', 'may');")
  100. template = HandlebarsTemplate("{{pgettext 'month' month_name}}")
  101. self.assertEqual(template.get_converted_content(),
  102. "pgettext('month', month_name);")
  103. template = HandlebarsTemplate("{{pgettext 'day of month' 'May, %(day)s' day=calendar.day}}")
  104. self.assertEqual(template.get_converted_content(),
  105. "pgettext('day of month', 'May, %(day)s');")
  106. template = HandlebarsTemplate("{{pgettext context value day=calendar.day}}")
  107. self.assertEqual(template.get_converted_content(),
  108. "pgettext(context, value);")
  109. template = HandlebarsTemplate("{{npgettext 'fruits' '%(count)s apple' '%(count)s apples' apples_count}}")
  110. self.assertEqual(template.get_converted_content(),
  111. "npgettext('fruits', '%(count)s apple', '%(count)s apples', apples_count);")
  112. template = HandlebarsTemplate("{{npgettext 'fruits' '%(user)s has %(count)s apple' '%(user)s has %(count)s apples' apples_count user=user.username}}")
  113. self.assertEqual(template.get_converted_content(),
  114. "npgettext('fruits', '%(user)s has %(count)s apple', '%(user)s has %(count)s apples', apples_count);")
  115. template = HandlebarsTemplate("{{npgettext context apple apples apples_count}}")
  116. self.assertEqual(template.get_converted_content(),
  117. "npgettext(context, apple, apples, apples_count);")
  118. template = HandlebarsTemplate("{{npgettext context '%(count)s apple' apples apples_count}}")
  119. self.assertEqual(template.get_converted_content(),
  120. "npgettext(context, '%(count)s apple', apples, apples_count);")
  121. template = HandlebarsTemplate("{{npgettext 'fruits' '%(user)s has %(count)s apple' apples apples_count user=user.username}}")
  122. self.assertEqual(template.get_converted_content(),
  123. "npgettext('fruits', '%(user)s has %(count)s apple', apples, apples_count);")
  124. def test_multiple_expressions(self):
  125. """multiple expressions are handled"""
  126. template = HandlebarsTemplate("{{gettext 'Posted by:'}} <strong>{{gettext user.rank.title}}</strong>; <em>{{ user.city }}</em>")
  127. self.assertEqual(template.get_converted_content(),
  128. "gettext('Posted by:');gettext(user.rank.title);")
  129. template = HandlebarsTemplate("""{{gettext 'Posted by:'}}<br>
  130. {{gettext user.rank.title}}""")
  131. self.assertEqual(template.get_converted_content(),
  132. "gettext('Posted by:');\ngettext(user.rank.title);")