1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
import io
import os
from mako.ext.babelplugin import extract
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
@requires_babel
class PluginExtractTest:
def test_parse_python_expression(self):
input_ = io.BytesIO(b'<p>${_("Message")}</p>')
messages = list(extract(input_, ["_"], [], {}))
eq_(messages, [(1, "_", ("Message"), [])])
def test_python_gettext_call(self):
input_ = io.BytesIO(b'<p>${_("Message")}</p>')
messages = list(extract(input_, ["_"], [], {}))
eq_(messages, [(1, "_", ("Message"), [])])
def test_translator_comment(self):
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(TemplateTest):
def test_extract(self):
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):
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):
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", [])
|