summaryrefslogtreecommitdiff
path: root/test/ext/test_babelplugin.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/ext/test_babelplugin.py')
-rw-r--r--test/ext/test_babelplugin.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/test/ext/test_babelplugin.py b/test/ext/test_babelplugin.py
new file mode 100644
index 0000000..cfe79b6
--- /dev/null
+++ b/test/ext/test_babelplugin.py
@@ -0,0 +1,112 @@
+import io
+import os
+
+import pytest
+
+from mako.testing.assertions import eq_
+from mako.testing.config import config
+from mako.testing.exclusions import requires_babel
+from mako.testing.fixtures import TemplateTest
+
+
+class UsesExtract:
+ @pytest.fixture(scope="class")
+ def extract(self):
+ from mako.ext.babelplugin import extract
+
+ return extract
+
+
+@requires_babel
+class PluginExtractTest(UsesExtract):
+ def test_parse_python_expression(self, extract):
+ input_ = io.BytesIO(b'<p>${_("Message")}</p>')
+ messages = list(extract(input_, ["_"], [], {}))
+ eq_(messages, [(1, "_", ("Message"), [])])
+
+ def test_python_gettext_call(self, extract):
+ input_ = io.BytesIO(b'<p>${_("Message")}</p>')
+ messages = list(extract(input_, ["_"], [], {}))
+ eq_(messages, [(1, "_", ("Message"), [])])
+
+ def test_translator_comment(self, extract):
+ input_ = io.BytesIO(
+ b"""
+ <p>
+ ## TRANSLATORS: This is a comment.
+ ${_("Message")}
+ </p>"""
+ )
+ messages = list(extract(input_, ["_"], ["TRANSLATORS:"], {}))
+ eq_(
+ messages,
+ [
+ (
+ 4,
+ "_",
+ ("Message"),
+ [("TRANSLATORS: This is a comment.")],
+ )
+ ],
+ )
+
+
+@requires_babel
+class MakoExtractTest(UsesExtract, TemplateTest):
+ def test_extract(self, extract):
+ with open(
+ os.path.join(config.template_base, "gettext.mako")
+ ) as mako_tmpl:
+ messages = list(
+ extract(
+ mako_tmpl,
+ {"_": None, "gettext": None, "ungettext": (1, 2)},
+ ["TRANSLATOR:"],
+ {},
+ )
+ )
+ expected = [
+ (1, "_", "Page arg 1", []),
+ (1, "_", "Page arg 2", []),
+ (10, "gettext", "Begin", []),
+ (14, "_", "Hi there!", ["TRANSLATOR: Hi there!"]),
+ (19, "_", "Hello", []),
+ (22, "_", "Welcome", []),
+ (25, "_", "Yo", []),
+ (36, "_", "The", ["TRANSLATOR: Ensure so and", "so, thanks"]),
+ (36, "ungettext", ("bunny", "bunnies", None), []),
+ (41, "_", "Goodbye", ["TRANSLATOR: Good bye"]),
+ (44, "_", "Babel", []),
+ (45, "ungettext", ("hella", "hellas", None), []),
+ (62, "_", "The", ["TRANSLATOR: Ensure so and", "so, thanks"]),
+ (62, "ungettext", ("bunny", "bunnies", None), []),
+ (68, "_", "Goodbye, really!", ["TRANSLATOR: HTML comment"]),
+ (71, "_", "P.S. byebye", []),
+ (77, "_", "Top", []),
+ (83, "_", "foo", []),
+ (83, "_", "hoho", []),
+ (85, "_", "bar", []),
+ (92, "_", "Inside a p tag", ["TRANSLATOR: <p> tag is ok?"]),
+ (95, "_", "Later in a p tag", ["TRANSLATOR: also this"]),
+ (99, "_", "No action at a distance.", []),
+ ]
+ eq_(expected, messages)
+
+ def test_extract_utf8(self, extract):
+ with open(
+ os.path.join(config.template_base, "gettext_utf8.mako"), "rb"
+ ) as mako_tmpl:
+ message = next(
+ extract(mako_tmpl, {"_", None}, [], {"encoding": "utf-8"})
+ )
+ assert message == (1, "_", "K\xf6ln", [])
+
+ def test_extract_cp1251(self, extract):
+ with open(
+ os.path.join(config.template_base, "gettext_cp1251.mako"), "rb"
+ ) as mako_tmpl:
+ message = next(
+ extract(mako_tmpl, {"_", None}, [], {"encoding": "cp1251"})
+ )
+ # "test" in Rusian. File encoding is cp1251 (aka "windows-1251")
+ assert message == (1, "_", "\u0442\u0435\u0441\u0442", [])