blob: ca12444567f9af52a3064b5502c98a0dcbe2fc85 [file] [log] [blame]
import io
import os
import unittest
from mako import compat
from .. import skip_if
from .. import template_base
from .. import TemplateTest
try:
import babel.messages.extract as babel
from mako.ext.babelplugin import extract
except ImportError:
babel = None
def skip():
return skip_if(
lambda: not babel, "babel not installed: skipping babelplugin test"
)
class Test_extract(unittest.TestCase):
@skip()
def test_parse_python_expression(self):
input_ = io.BytesIO(compat.b('<p>${_("Message")}</p>'))
messages = list(extract(input_, ["_"], [], {}))
self.assertEqual(messages, [(1, "_", compat.u("Message"), [])])
@skip()
def test_python_gettext_call(self):
input_ = io.BytesIO(compat.b('<p>${_("Message")}</p>'))
messages = list(extract(input_, ["_"], [], {}))
self.assertEqual(messages, [(1, "_", compat.u("Message"), [])])
@skip()
def test_translator_comment(self):
input_ = io.BytesIO(
compat.b(
"""
<p>
## TRANSLATORS: This is a comment.
${_("Message")}
</p>"""
)
)
messages = list(extract(input_, ["_"], ["TRANSLATORS:"], {}))
self.assertEqual(
messages,
[
(
4,
"_",
compat.u("Message"),
[compat.u("TRANSLATORS: This is a comment.")],
)
],
)
class ExtractMakoTestCase(TemplateTest):
@skip()
def test_extract(self):
mako_tmpl = open(os.path.join(template_base, "gettext.mako"))
self.addCleanup(mako_tmpl.close)
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.", []),
]
self.assertEqual(expected, messages)
@skip()
def test_extract_utf8(self):
mako_tmpl = open(
os.path.join(template_base, "gettext_utf8.mako"), "rb"
)
self.addCleanup(mako_tmpl.close)
message = next(
extract(mako_tmpl, set(["_", None]), [], {"encoding": "utf-8"})
)
assert message == (1, "_", u"K\xf6ln", [])
@skip()
def test_extract_cp1251(self):
mako_tmpl = open(
os.path.join(template_base, "gettext_cp1251.mako"), "rb"
)
self.addCleanup(mako_tmpl.close)
message = next(
extract(mako_tmpl, set(["_", None]), [], {"encoding": "cp1251"})
)
# "test" in Rusian. File encoding is cp1251 (aka "windows-1251")
assert message == (1, "_", u"\u0442\u0435\u0441\u0442", [])