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'

${_("Message")}

') messages = list(extract(input_, ["_"], [], {})) eq_(messages, [(1, "_", ("Message"), [])]) def test_python_gettext_call(self, extract): input_ = io.BytesIO(b'

${_("Message")}

') messages = list(extract(input_, ["_"], [], {})) eq_(messages, [(1, "_", ("Message"), [])]) def test_translator_comment(self, extract): input_ = io.BytesIO( b"""

## TRANSLATORS: This is a comment. ${_("Message")}

""" ) 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:

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