| 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", []) |