annotate babel/messages/tests/extract.py @ 569:1b801a0cb2cb trunk

Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
author fschwarz
date Mon, 26 Sep 2011 20:01:01 +0000
parents ca203b2af83c
children
rev   line source
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
2 #
530
ca203b2af83c Update the copyright line.
jruigrok
parents: 367
diff changeset
3 # Copyright (C) 2007-2011 Edgewall Software
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
4 # All rights reserved.
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
5 #
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
8 # are also available at http://babel.edgewall.org/wiki/License.
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
9 #
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
10 # This software consists of voluntary contributions made by many
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
11 # individuals. For the exact contribution history, see the revision
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
12 # history and logs, available at http://babel.edgewall.org/log/.
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
13
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
14 import codecs
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
15 import doctest
36
cfd15b7921f9 Fix for #8: fix extraction of strings from Python source using prefixes ('u' or 'r') or triple quotes.
cmlenz
parents: 12
diff changeset
16 from StringIO import StringIO
222
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
17 import sys
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
18 import unittest
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
19
54
7dbcbc3f07e0 Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents: 36
diff changeset
20 from babel.messages import extract
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
21
36
cfd15b7921f9 Fix for #8: fix extraction of strings from Python source using prefixes ('u' or 'r') or triple quotes.
cmlenz
parents: 12
diff changeset
22
cfd15b7921f9 Fix for #8: fix extraction of strings from Python source using prefixes ('u' or 'r') or triple quotes.
cmlenz
parents: 12
diff changeset
23 class ExtractPythonTestCase(unittest.TestCase):
cfd15b7921f9 Fix for #8: fix extraction of strings from Python source using prefixes ('u' or 'r') or triple quotes.
cmlenz
parents: 12
diff changeset
24
222
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
25 def test_nested_calls(self):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
26 buf = StringIO("""\
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
27 msg1 = _(i18n_arg.replace(r'\"', '"'))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
28 msg2 = ungettext(i18n_arg.replace(r'\"', '"'), multi_arg.replace(r'\"', '"'), 2)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
29 msg3 = ungettext("Babel", multi_arg.replace(r'\"', '"'), 2)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
30 msg4 = ungettext(i18n_arg.replace(r'\"', '"'), "Babels", 2)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
31 msg5 = ungettext('bunny', 'bunnies', random.randint(1, 2))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
32 msg6 = ungettext(arg0, 'bunnies', random.randint(1, 2))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
33 msg7 = _(hello.there)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
34 msg8 = gettext('Rabbit')
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
35 msg9 = dgettext('wiki', model.addPage())
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
36 msg10 = dngettext(getDomain(), 'Page', 'Pages', 3)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
37 """)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
38 messages = list(extract.extract_python(buf,
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
39 extract.DEFAULT_KEYWORDS.keys(),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
40 [], {}))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
41 self.assertEqual([
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
42 (1, '_', None, []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
43 (2, 'ungettext', (None, None, None), []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
44 (3, 'ungettext', (u'Babel', None, None), []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
45 (4, 'ungettext', (None, u'Babels', None), []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
46 (5, 'ungettext', (u'bunny', u'bunnies', None), []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
47 (6, 'ungettext', (None, u'bunnies', None), []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
48 (7, '_', None, []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
49 (8, 'gettext', u'Rabbit', []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
50 (9, 'dgettext', (u'wiki', None), []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
51 (10, 'dngettext', (None, u'Page', u'Pages', None), [])],
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
52 messages)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
53
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
54 def test_nested_comments(self):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
55 buf = StringIO("""\
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
56 msg = ngettext('pylon', # TRANSLATORS: shouldn't be
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
57 'pylons', # TRANSLATORS: seeing this
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
58 count)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
59 """)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
60 messages = list(extract.extract_python(buf, ('ngettext',),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
61 ['TRANSLATORS:'], {}))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
62 self.assertEqual([(1, 'ngettext', (u'pylon', u'pylons', None), [])],
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
63 messages)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
64
366
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
65 def test_comments_with_calls_that_spawn_multiple_lines(self):
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
66 buf = StringIO("""\
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
67 # NOTE: This Comment SHOULD Be Extracted
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
68 add_notice(req, ngettext("Catalog deleted.",
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
69 "Catalogs deleted.", len(selected)))
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
70
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
71 # NOTE: This Comment SHOULD Be Extracted
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
72 add_notice(req, _("Locale deleted."))
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
73
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
74
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
75 # NOTE: This Comment SHOULD Be Extracted
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
76 add_notice(req, ngettext("Foo deleted.", "Foos deleted.", len(selected)))
367
0132b088c904 Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents: 366
diff changeset
77
0132b088c904 Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents: 366
diff changeset
78 # NOTE: This Comment SHOULD Be Extracted
0132b088c904 Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents: 366
diff changeset
79 # NOTE: And This One Too
0132b088c904 Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents: 366
diff changeset
80 add_notice(req, ngettext("Bar deleted.",
0132b088c904 Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents: 366
diff changeset
81 "Bars deleted.", len(selected)))
366
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
82 """)
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
83 messages = list(extract.extract_python(buf, ('ngettext','_'), ['NOTE:'],
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
84
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
85 {'strip_comment_tags':False}))
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
86 self.assertEqual((6, '_', 'Locale deleted.',
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
87 [u'NOTE: This Comment SHOULD Be Extracted']),
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
88 messages[1])
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
89 self.assertEqual((10, 'ngettext', (u'Foo deleted.', u'Foos deleted.',
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
90 None),
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
91 [u'NOTE: This Comment SHOULD Be Extracted']),
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
92 messages[2])
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
93 self.assertEqual((3, 'ngettext',
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
94 (u'Catalog deleted.',
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
95 u'Catalogs deleted.', None),
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
96 [u'NOTE: This Comment SHOULD Be Extracted']),
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
97 messages[0])
367
0132b088c904 Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents: 366
diff changeset
98 self.assertEqual((15, 'ngettext', (u'Bar deleted.', u'Bars deleted.',
0132b088c904 Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents: 366
diff changeset
99 None),
0132b088c904 Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents: 366
diff changeset
100 [u'NOTE: This Comment SHOULD Be Extracted',
0132b088c904 Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents: 366
diff changeset
101 u'NOTE: And This One Too']),
0132b088c904 Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents: 366
diff changeset
102 messages[3])
366
6abe384584c8 Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents: 365
diff changeset
103
222
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
104 def test_declarations(self):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
105 buf = StringIO("""\
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
106 class gettext(object):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
107 pass
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
108 def render_body(context,x,y=_('Page arg 1'),z=_('Page arg 2'),**pageargs):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
109 pass
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
110 def ngettext(y='arg 1',z='arg 2',**pageargs):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
111 pass
223
3784eb8493da fix skipping of class definitions without parens
pjenvey
parents: 222
diff changeset
112 class Meta:
3784eb8493da fix skipping of class definitions without parens
pjenvey
parents: 222
diff changeset
113 verbose_name = _('log entry')
222
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
114 """)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
115 messages = list(extract.extract_python(buf,
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
116 extract.DEFAULT_KEYWORDS.keys(),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
117 [], {}))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
118 self.assertEqual([(3, '_', u'Page arg 1', []),
223
3784eb8493da fix skipping of class definitions without parens
pjenvey
parents: 222
diff changeset
119 (3, '_', u'Page arg 2', []),
3784eb8493da fix skipping of class definitions without parens
pjenvey
parents: 222
diff changeset
120 (8, '_', u'log entry', [])],
222
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
121 messages)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
122
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
123 def test_multiline(self):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
124 buf = StringIO("""\
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
125 msg1 = ngettext('pylon',
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
126 'pylons', count)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
127 msg2 = ngettext('elvis',
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
128 'elvises',
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
129 count)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
130 """)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
131 messages = list(extract.extract_python(buf, ('ngettext',), [], {}))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
132 self.assertEqual([(1, 'ngettext', (u'pylon', u'pylons', None), []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
133 (3, 'ngettext', (u'elvis', u'elvises', None), [])],
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
134 messages)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
135
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
136 def test_triple_quoted_strings(self):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
137 buf = StringIO("""\
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
138 msg1 = _('''pylons''')
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
139 msg2 = ngettext(r'''elvis''', \"\"\"elvises\"\"\", count)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
140 msg2 = ngettext(\"\"\"elvis\"\"\", 'elvises', count)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
141 """)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
142 messages = list(extract.extract_python(buf,
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
143 extract.DEFAULT_KEYWORDS.keys(),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
144 [], {}))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
145 self.assertEqual([(1, '_', (u'pylons'), []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
146 (2, 'ngettext', (u'elvis', u'elvises', None), []),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
147 (3, 'ngettext', (u'elvis', u'elvises', None), [])],
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
148 messages)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
149
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
150 def test_multiline_strings(self):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
151 buf = StringIO("""\
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
152 _('''This module provides internationalization and localization
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
153 support for your Python programs by providing an interface to the GNU
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
154 gettext message catalog library.''')
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
155 """)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
156 messages = list(extract.extract_python(buf,
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
157 extract.DEFAULT_KEYWORDS.keys(),
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
158 [], {}))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
159 self.assertEqual(
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
160 [(1, '_',
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
161 u'This module provides internationalization and localization\n'
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
162 'support for your Python programs by providing an interface to '
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
163 'the GNU\ngettext message catalog library.', [])],
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
164 messages)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
165
257
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
166 def test_concatenated_strings(self):
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
167 buf = StringIO("""\
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
168 foobar = _('foo' 'bar')
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
169 """)
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
170 messages = list(extract.extract_python(buf,
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
171 extract.DEFAULT_KEYWORDS.keys(),
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
172 [], {}))
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
173 self.assertEqual(u'foobar', messages[0][2])
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
174
36
cfd15b7921f9 Fix for #8: fix extraction of strings from Python source using prefixes ('u' or 'r') or triple quotes.
cmlenz
parents: 12
diff changeset
175 def test_unicode_string_arg(self):
cfd15b7921f9 Fix for #8: fix extraction of strings from Python source using prefixes ('u' or 'r') or triple quotes.
cmlenz
parents: 12
diff changeset
176 buf = StringIO("msg = _(u'Foo Bar')")
83
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
177 messages = list(extract.extract_python(buf, ('_',), [], {}))
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
178 self.assertEqual(u'Foo Bar', messages[0][2])
36
cfd15b7921f9 Fix for #8: fix extraction of strings from Python source using prefixes ('u' or 'r') or triple quotes.
cmlenz
parents: 12
diff changeset
179
83
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
180 def test_comment_tag(self):
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
181 buf = StringIO("""
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
182 # NOTE: A translation comment
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
183 msg = _(u'Foo Bar')
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
184 """)
91
5cff450b9ed5 Changed translator comments extraction behaviour in python source code. Match is now true only if the TAG is on the start of the comment. The TAG will also be stripped from the comment. Added a unittest which tests this.
palgarvio
parents: 85
diff changeset
185 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {}))
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
186 self.assertEqual(u'Foo Bar', messages[0][2])
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
187 self.assertEqual([u'NOTE: A translation comment'], messages[0][3])
83
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
188
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
189 def test_comment_tag_multiline(self):
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
190 buf = StringIO("""
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
191 # NOTE: A translation comment
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
192 # with a second line
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
193 msg = _(u'Foo Bar')
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
194 """)
91
5cff450b9ed5 Changed translator comments extraction behaviour in python source code. Match is now true only if the TAG is on the start of the comment. The TAG will also be stripped from the comment. Added a unittest which tests this.
palgarvio
parents: 85
diff changeset
195 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {}))
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
196 self.assertEqual(u'Foo Bar', messages[0][2])
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
197 self.assertEqual([u'NOTE: A translation comment', u'with a second line'],
83
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
198 messages[0][3])
222
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
199
85
04a2f16bdd04 Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents: 83
diff changeset
200 def test_translator_comments_with_previous_non_translator_comments(self):
04a2f16bdd04 Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents: 83
diff changeset
201 buf = StringIO("""
04a2f16bdd04 Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents: 83
diff changeset
202 # This shouldn't be in the output
04a2f16bdd04 Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents: 83
diff changeset
203 # because it didn't start with a comment tag
04a2f16bdd04 Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents: 83
diff changeset
204 # NOTE: A translation comment
04a2f16bdd04 Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents: 83
diff changeset
205 # with a second line
04a2f16bdd04 Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents: 83
diff changeset
206 msg = _(u'Foo Bar')
04a2f16bdd04 Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents: 83
diff changeset
207 """)
91
5cff450b9ed5 Changed translator comments extraction behaviour in python source code. Match is now true only if the TAG is on the start of the comment. The TAG will also be stripped from the comment. Added a unittest which tests this.
palgarvio
parents: 85
diff changeset
208 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {}))
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
209 self.assertEqual(u'Foo Bar', messages[0][2])
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
210 self.assertEqual([u'NOTE: A translation comment', u'with a second line'],
85
04a2f16bdd04 Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents: 83
diff changeset
211 messages[0][3])
83
75d0fa7b4af2 Add unit tests for extracting translator comments from python sources.
cmlenz
parents: 80
diff changeset
212
91
5cff450b9ed5 Changed translator comments extraction behaviour in python source code. Match is now true only if the TAG is on the start of the comment. The TAG will also be stripped from the comment. Added a unittest which tests this.
palgarvio
parents: 85
diff changeset
213 def test_comment_tags_not_on_start_of_comment(self):
5cff450b9ed5 Changed translator comments extraction behaviour in python source code. Match is now true only if the TAG is on the start of the comment. The TAG will also be stripped from the comment. Added a unittest which tests this.
palgarvio
parents: 85
diff changeset
214 buf = StringIO("""
5cff450b9ed5 Changed translator comments extraction behaviour in python source code. Match is now true only if the TAG is on the start of the comment. The TAG will also be stripped from the comment. Added a unittest which tests this.
palgarvio
parents: 85
diff changeset
215 # This shouldn't be in the output
5cff450b9ed5 Changed translator comments extraction behaviour in python source code. Match is now true only if the TAG is on the start of the comment. The TAG will also be stripped from the comment. Added a unittest which tests this.
palgarvio
parents: 85
diff changeset
216 # because it didn't start with a comment tag
365
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
217 # do NOTE: this will not be a translation comment
91
5cff450b9ed5 Changed translator comments extraction behaviour in python source code. Match is now true only if the TAG is on the start of the comment. The TAG will also be stripped from the comment. Added a unittest which tests this.
palgarvio
parents: 85
diff changeset
218 # NOTE: This one will be
5cff450b9ed5 Changed translator comments extraction behaviour in python source code. Match is now true only if the TAG is on the start of the comment. The TAG will also be stripped from the comment. Added a unittest which tests this.
palgarvio
parents: 85
diff changeset
219 msg = _(u'Foo Bar')
5cff450b9ed5 Changed translator comments extraction behaviour in python source code. Match is now true only if the TAG is on the start of the comment. The TAG will also be stripped from the comment. Added a unittest which tests this.
palgarvio
parents: 85
diff changeset
220 """)
5cff450b9ed5 Changed translator comments extraction behaviour in python source code. Match is now true only if the TAG is on the start of the comment. The TAG will also be stripped from the comment. Added a unittest which tests this.
palgarvio
parents: 85
diff changeset
221 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {}))
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
222 self.assertEqual(u'Foo Bar', messages[0][2])
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
223 self.assertEqual([u'NOTE: This one will be'], messages[0][3])
93
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
224
92
ccb9da614597 Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents: 91
diff changeset
225 def test_multiple_comment_tags(self):
ccb9da614597 Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents: 91
diff changeset
226 buf = StringIO("""
ccb9da614597 Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents: 91
diff changeset
227 # NOTE1: A translation comment for tag1
ccb9da614597 Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents: 91
diff changeset
228 # with a second line
ccb9da614597 Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents: 91
diff changeset
229 msg = _(u'Foo Bar1')
ccb9da614597 Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents: 91
diff changeset
230
ccb9da614597 Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents: 91
diff changeset
231 # NOTE2: A translation comment for tag2
ccb9da614597 Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents: 91
diff changeset
232 msg = _(u'Foo Bar2')
ccb9da614597 Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents: 91
diff changeset
233 """)
ccb9da614597 Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents: 91
diff changeset
234 messages = list(extract.extract_python(buf, ('_',),
ccb9da614597 Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents: 91
diff changeset
235 ['NOTE1:', 'NOTE2:'], {}))
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
236 self.assertEqual(u'Foo Bar1', messages[0][2])
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
237 self.assertEqual([u'NOTE1: A translation comment for tag1',
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
238 u'with a second line'], messages[0][3])
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
239 self.assertEqual(u'Foo Bar2', messages[1][2])
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
240 self.assertEqual([u'NOTE2: A translation comment for tag2'], messages[1][3])
93
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
241
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
242 def test_two_succeeding_comments(self):
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
243 buf = StringIO("""
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
244 # NOTE: one
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
245 # NOTE: two
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
246 msg = _(u'Foo Bar')
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
247 """)
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
248 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {}))
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
249 self.assertEqual(u'Foo Bar', messages[0][2])
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
250 self.assertEqual([u'NOTE: one', u'NOTE: two'], messages[0][3])
222
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
251
93
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
252 def test_invalid_translator_comments(self):
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
253 buf = StringIO("""
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
254 # NOTE: this shouldn't apply to any messages
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
255 hello = 'there'
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
256
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
257 msg = _(u'Foo Bar')
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
258 """)
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
259 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {}))
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
260 self.assertEqual(u'Foo Bar', messages[0][2])
93
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
261 self.assertEqual([], messages[0][3])
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
262
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
263 def test_invalid_translator_comments2(self):
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
264 buf = StringIO("""
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
265 # NOTE: Hi!
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
266 hithere = _('Hi there!')
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
267
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
268 # NOTE: you should not be seeing this in the .po
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
269 rows = [[v for v in range(0,10)] for row in range(0,10)]
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
270
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
271 # this (NOTE:) should not show up either
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
272 hello = _('Hello')
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
273 """)
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
274 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {}))
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
275 self.assertEqual(u'Hi there!', messages[0][2])
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
276 self.assertEqual([u'NOTE: Hi!'], messages[0][3])
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
277 self.assertEqual(u'Hello', messages[1][2])
93
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
278 self.assertEqual([], messages[1][3])
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
279
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
280 def test_invalid_translator_comments3(self):
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
281 buf = StringIO("""
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
282 # NOTE: Hi,
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
283
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
284 # there!
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
285 hithere = _('Hi there!')
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
286 """)
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
287 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {}))
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
288 self.assertEqual(u'Hi there!', messages[0][2])
93
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
289 self.assertEqual([], messages[0][3])
f008662b5d6e Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents: 92
diff changeset
290
365
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
291 def test_comment_tag_with_leading_space(self):
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
292 buf = StringIO("""
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
293 #: A translation comment
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
294 #: with leading spaces
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
295 msg = _(u'Foo Bar')
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
296 """)
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
297 messages = list(extract.extract_python(buf, ('_',), [':'], {}))
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
298 self.assertEqual(u'Foo Bar', messages[0][2])
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
299 self.assertEqual([u': A translation comment', u': with leading spaces'],
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
300 messages[0][3])
7e3136b0ff0b Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents: 343
diff changeset
301
257
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
302 def test_different_signatures(self):
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
303 buf = StringIO("""
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
304 foo = _('foo', 'bar')
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
305 n = ngettext('hello', 'there', n=3)
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
306 n = ngettext(n=3, 'hello', 'there')
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
307 n = ngettext(n=3, *messages)
258
5ca5fbd47766 skip messages that have less arguments than the keyword spec calls for
pjenvey
parents: 257
diff changeset
308 n = ngettext()
5ca5fbd47766 skip messages that have less arguments than the keyword spec calls for
pjenvey
parents: 257
diff changeset
309 n = ngettext('foo')
257
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
310 """)
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
311 messages = list(extract.extract_python(buf, ('_', 'ngettext'), [], {}))
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
312 self.assertEqual((u'foo', u'bar'), messages[0][2])
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
313 self.assertEqual((u'hello', u'there', None), messages[1][2])
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
314 self.assertEqual((None, u'hello', u'there'), messages[2][2])
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
315 self.assertEqual((None, None), messages[3][2])
258
5ca5fbd47766 skip messages that have less arguments than the keyword spec calls for
pjenvey
parents: 257
diff changeset
316 self.assertEqual(None, messages[4][2])
5ca5fbd47766 skip messages that have less arguments than the keyword spec calls for
pjenvey
parents: 257
diff changeset
317 self.assertEqual(('foo'), messages[5][2])
257
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
318
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
319 def test_utf8_message(self):
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
320 buf = StringIO("""
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
321 # NOTE: hello
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
322 msg = _('Bonjour à tous')
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
323 """)
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
324 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'],
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
325 {'encoding': 'utf-8'}))
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
326 self.assertEqual(u'Bonjour à tous', messages[0][2])
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
327 self.assertEqual([u'NOTE: hello'], messages[0][3])
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
328
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
329 def test_utf8_message_with_magic_comment(self):
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
330 buf = StringIO("""# -*- coding: utf-8 -*-
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
331 # NOTE: hello
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
332 msg = _('Bonjour à tous')
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
333 """)
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
334 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {}))
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
335 self.assertEqual(u'Bonjour à tous', messages[0][2])
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
336 self.assertEqual([u'NOTE: hello'], messages[0][3])
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
337
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
338 def test_utf8_message_with_utf8_bom(self):
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
339 buf = StringIO(codecs.BOM_UTF8 + """
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
340 # NOTE: hello
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
341 msg = _('Bonjour à tous')
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
342 """)
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
343 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {}))
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
344 self.assertEqual(u'Bonjour à tous', messages[0][2])
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
345 self.assertEqual([u'NOTE: hello'], messages[0][3])
164
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
346
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
347 def test_utf8_raw_strings_match_unicode_strings(self):
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
348 buf = StringIO(codecs.BOM_UTF8 + """
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
349 msg = _('Bonjour à tous')
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
350 msgu = _(u'Bonjour à tous')
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
351 """)
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
352 messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {}))
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
353 self.assertEqual(u'Bonjour à tous', messages[0][2])
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
354 self.assertEqual(messages[0][2], messages[1][2])
e1199c0fb3bf made the python extractor detect source file encodings from the magic encoding
pjenvey
parents: 93
diff changeset
355
338
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
356 def test_extract_strip_comment_tags(self):
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
357 buf = StringIO("""\
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
358 #: This is a comment with a very simple
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
359 #: prefix specified
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
360 _('Servus')
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
361
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
362 # NOTE: This is a multiline comment with
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
363 # a prefix too
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
364 _('Babatschi')""")
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
365 messages = list(extract.extract('python', buf, comment_tags=['NOTE:', ':'],
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
366 strip_comment_tags=True))
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
367 self.assertEqual(u'Servus', messages[0][1])
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
368 self.assertEqual([u'This is a comment with a very simple',
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
369 u'prefix specified'], messages[0][2])
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
370 self.assertEqual(u'Babatschi', messages[1][1])
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
371 self.assertEqual([u'This is a multiline comment with',
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
372 u'a prefix too'], messages[1][2])
b39145076d8a Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents: 322
diff changeset
373
343
9c718e8af219 Remove leftover unused code from [365].
cmlenz
parents: 339
diff changeset
374
339
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
375 class ExtractJavaScriptTestCase(unittest.TestCase):
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
376
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
377 def test_simple_extract(self):
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
378 buf = StringIO("""\
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
379 msg1 = _('simple')
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
380 msg2 = gettext('simple')
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
381 msg3 = ngettext('s', 'p', 42)
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
382 """)
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
383 messages = \
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
384 list(extract.extract('javascript', buf, extract.DEFAULT_KEYWORDS,
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
385 [], {}))
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
386
569
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
387 self.assertEqual([(1, 'simple', [], None),
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
388 (2, 'simple', [], None),
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
389 (3, ('s', 'p'), [], None)], messages)
339
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
390
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
391 def test_various_calls(self):
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
392 buf = StringIO("""\
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
393 msg1 = _(i18n_arg.replace(/"/, '"'))
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
394 msg2 = ungettext(i18n_arg.replace(/"/, '"'), multi_arg.replace(/"/, '"'), 2)
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
395 msg3 = ungettext("Babel", multi_arg.replace(/"/, '"'), 2)
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
396 msg4 = ungettext(i18n_arg.replace(/"/, '"'), "Babels", 2)
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
397 msg5 = ungettext('bunny', 'bunnies', parseInt(Math.random() * 2 + 1))
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
398 msg6 = ungettext(arg0, 'bunnies', rparseInt(Math.random() * 2 + 1))
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
399 msg7 = _(hello.there)
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
400 msg8 = gettext('Rabbit')
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
401 msg9 = dgettext('wiki', model.addPage())
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
402 msg10 = dngettext(domain, 'Page', 'Pages', 3)
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
403 """)
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
404 messages = \
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
405 list(extract.extract('javascript', buf, extract.DEFAULT_KEYWORDS, [],
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
406 {}))
569
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
407 self.assertEqual([(5, (u'bunny', u'bunnies'), [], None),
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
408 (8, u'Rabbit', [], None),
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
409 (10, (u'Page', u'Pages'), [], None)], messages)
339
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
410
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
411 def test_message_with_line_comment(self):
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
412 buf = StringIO("""\
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
413 // NOTE: hello
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
414 msg = _('Bonjour à tous')
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
415 """)
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
416 messages = list(extract.extract_javascript(buf, ('_',), ['NOTE:'], {}))
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
417 self.assertEqual(u'Bonjour à tous', messages[0][2])
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
418 self.assertEqual([u'NOTE: hello'], messages[0][3])
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
419
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
420 def test_message_with_multiline_comment(self):
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
421 buf = StringIO("""\
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
422 /* NOTE: hello
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
423 and bonjour
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
424 and servus */
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
425 msg = _('Bonjour à tous')
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
426 """)
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
427 messages = list(extract.extract_javascript(buf, ('_',), ['NOTE:'], {}))
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
428 self.assertEqual(u'Bonjour à tous', messages[0][2])
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
429 self.assertEqual([u'NOTE: hello', 'and bonjour', ' and servus'], messages[0][3])
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
430
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
431 def test_ignore_function_definitions(self):
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
432 buf = StringIO("""\
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
433 function gettext(value) {
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
434 return translations[language][value] || value;
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
435 }""")
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
436
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
437 messages = list(extract.extract_javascript(buf, ('gettext',), [], {}))
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
438 self.assertEqual(messages, [])
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
439
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
440 def test_misplaced_comments(self):
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
441 buf = StringIO("""\
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
442 /* NOTE: this won't show up */
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
443 foo()
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
444
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
445 /* NOTE: this will */
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
446 msg = _('Something')
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
447
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
448 // NOTE: this will show up
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
449 // too.
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
450 msg = _('Something else')
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
451
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
452 // NOTE: but this won't
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
453 bar()
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
454
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
455 _('no comment here')
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
456 """)
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
457 messages = list(extract.extract_javascript(buf, ('_',), ['NOTE:'], {}))
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
458 self.assertEqual(u'Something', messages[0][2])
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
459 self.assertEqual([u'NOTE: this will'], messages[0][3])
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
460 self.assertEqual(u'Something else', messages[1][2])
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
461 self.assertEqual([u'NOTE: this will show up', 'too.'], messages[1][3])
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
462 self.assertEqual(u'no comment here', messages[2][2])
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
463 self.assertEqual([], messages[2][3])
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
464
343
9c718e8af219 Remove leftover unused code from [365].
cmlenz
parents: 339
diff changeset
465
222
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
466 class ExtractTestCase(unittest.TestCase):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
467
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
468 def test_invalid_filter(self):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
469 buf = StringIO("""\
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
470 msg1 = _(i18n_arg.replace(r'\"', '"'))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
471 msg2 = ungettext(i18n_arg.replace(r'\"', '"'), multi_arg.replace(r'\"', '"'), 2)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
472 msg3 = ungettext("Babel", multi_arg.replace(r'\"', '"'), 2)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
473 msg4 = ungettext(i18n_arg.replace(r'\"', '"'), "Babels", 2)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
474 msg5 = ungettext('bunny', 'bunnies', random.randint(1, 2))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
475 msg6 = ungettext(arg0, 'bunnies', random.randint(1, 2))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
476 msg7 = _(hello.there)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
477 msg8 = gettext('Rabbit')
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
478 msg9 = dgettext('wiki', model.addPage())
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
479 msg10 = dngettext(domain, 'Page', 'Pages', 3)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
480 """)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
481 messages = \
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
482 list(extract.extract('python', buf, extract.DEFAULT_KEYWORDS, [],
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
483 {}))
569
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
484 self.assertEqual([(5, (u'bunny', u'bunnies'), [], None),
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
485 (8, u'Rabbit', [], None),
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
486 (10, (u'Page', u'Pages'), [], None)], messages)
222
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
487
322
b03a6a87e4cb fix invalid message extraction methods causing:
pjenvey
parents: 258
diff changeset
488 def test_invalid_extract_method(self):
b03a6a87e4cb fix invalid message extraction methods causing:
pjenvey
parents: 258
diff changeset
489 buf = StringIO('')
b03a6a87e4cb fix invalid message extraction methods causing:
pjenvey
parents: 258
diff changeset
490 self.assertRaises(ValueError, list, extract.extract('spam', buf))
b03a6a87e4cb fix invalid message extraction methods causing:
pjenvey
parents: 258
diff changeset
491
257
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
492 def test_different_signatures(self):
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
493 buf = StringIO("""
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
494 foo = _('foo', 'bar')
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
495 n = ngettext('hello', 'there', n=3)
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
496 n = ngettext(n=3, 'hello', 'there')
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
497 n = ngettext(n=3, *messages)
258
5ca5fbd47766 skip messages that have less arguments than the keyword spec calls for
pjenvey
parents: 257
diff changeset
498 n = ngettext()
5ca5fbd47766 skip messages that have less arguments than the keyword spec calls for
pjenvey
parents: 257
diff changeset
499 n = ngettext('foo')
257
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
500 """)
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
501 messages = \
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
502 list(extract.extract('python', buf, extract.DEFAULT_KEYWORDS, [],
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
503 {}))
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
504 self.assertEqual(len(messages), 2)
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
505 self.assertEqual(u'foo', messages[0][1])
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
506 self.assertEqual((u'hello', u'there'), messages[1][1])
79c72d3a35f6 add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents: 223
diff changeset
507
222
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
508 def test_empty_string_msgid(self):
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
509 buf = StringIO("""\
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
510 msg = _('')
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
511 """)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
512 stderr = sys.stderr
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
513 sys.stderr = StringIO()
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
514 try:
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
515 messages = \
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
516 list(extract.extract('python', buf, extract.DEFAULT_KEYWORDS,
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
517 [], {}))
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
518 self.assertEqual([], messages)
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
519 assert 'warning: Empty msgid.' in sys.stderr.getvalue()
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
520 finally:
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
521 sys.stderr = stderr
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
522
569
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
523 def test_warn_if_empty_string_msgid_found_in_context_aware_extraction_method(self):
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
524 buf = StringIO("\nmsg = pgettext('ctxt', '')\n")
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
525 stderr = sys.stderr
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
526 sys.stderr = StringIO()
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
527 try:
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
528 messages = extract.extract('python', buf)
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
529 self.assertEqual([], list(messages))
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
530 assert 'warning: Empty msgid.' in sys.stderr.getvalue()
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
531 finally:
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
532 sys.stderr = stderr
1b801a0cb2cb Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents: 530
diff changeset
533
343
9c718e8af219 Remove leftover unused code from [365].
cmlenz
parents: 339
diff changeset
534
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
535 def suite():
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
536 suite = unittest.TestSuite()
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
537 suite.addTest(doctest.DocTestSuite(extract))
36
cfd15b7921f9 Fix for #8: fix extraction of strings from Python source using prefixes ('u' or 'r') or triple quotes.
cmlenz
parents: 12
diff changeset
538 suite.addTest(unittest.makeSuite(ExtractPythonTestCase))
339
93a896111488 Added !JavaScript extractor
aronacher
parents: 338
diff changeset
539 suite.addTest(unittest.makeSuite(ExtractJavaScriptTestCase))
222
88caccd5da79 o extract_python fixes:
pjenvey
parents: 164
diff changeset
540 suite.addTest(unittest.makeSuite(ExtractTestCase))
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
541 return suite
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
542
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
543 if __name__ == '__main__':
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
544 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software