Mercurial > babel > mirror
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 | 1 # -*- coding: utf-8 -*- |
2 # | |
530 | 3 # Copyright (C) 2007-2011 Edgewall Software |
1 | 4 # All rights reserved. |
5 # | |
6 # This software is licensed as described in the file COPYING, which | |
7 # you should have received as part of this distribution. The terms | |
8 # are also available at http://babel.edgewall.org/wiki/License. | |
9 # | |
10 # This software consists of voluntary contributions made by many | |
11 # individuals. For the exact contribution history, see the revision | |
12 # history and logs, available at http://babel.edgewall.org/log/. | |
13 | |
164
e1199c0fb3bf
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
14 import codecs |
1 | 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 | 17 import sys |
1 | 18 import unittest |
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 | 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 | 25 def test_nested_calls(self): |
26 buf = StringIO("""\ | |
27 msg1 = _(i18n_arg.replace(r'\"', '"')) | |
28 msg2 = ungettext(i18n_arg.replace(r'\"', '"'), multi_arg.replace(r'\"', '"'), 2) | |
29 msg3 = ungettext("Babel", multi_arg.replace(r'\"', '"'), 2) | |
30 msg4 = ungettext(i18n_arg.replace(r'\"', '"'), "Babels", 2) | |
31 msg5 = ungettext('bunny', 'bunnies', random.randint(1, 2)) | |
32 msg6 = ungettext(arg0, 'bunnies', random.randint(1, 2)) | |
33 msg7 = _(hello.there) | |
34 msg8 = gettext('Rabbit') | |
35 msg9 = dgettext('wiki', model.addPage()) | |
36 msg10 = dngettext(getDomain(), 'Page', 'Pages', 3) | |
37 """) | |
38 messages = list(extract.extract_python(buf, | |
39 extract.DEFAULT_KEYWORDS.keys(), | |
40 [], {})) | |
41 self.assertEqual([ | |
42 (1, '_', None, []), | |
43 (2, 'ungettext', (None, None, None), []), | |
44 (3, 'ungettext', (u'Babel', None, None), []), | |
45 (4, 'ungettext', (None, u'Babels', None), []), | |
46 (5, 'ungettext', (u'bunny', u'bunnies', None), []), | |
47 (6, 'ungettext', (None, u'bunnies', None), []), | |
48 (7, '_', None, []), | |
49 (8, 'gettext', u'Rabbit', []), | |
50 (9, 'dgettext', (u'wiki', None), []), | |
51 (10, 'dngettext', (None, u'Page', u'Pages', None), [])], | |
52 messages) | |
53 | |
54 def test_nested_comments(self): | |
55 buf = StringIO("""\ | |
56 msg = ngettext('pylon', # TRANSLATORS: shouldn't be | |
57 'pylons', # TRANSLATORS: seeing this | |
58 count) | |
59 """) | |
60 messages = list(extract.extract_python(buf, ('ngettext',), | |
61 ['TRANSLATORS:'], {})) | |
62 self.assertEqual([(1, 'ngettext', (u'pylon', u'pylons', None), [])], | |
63 messages) | |
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 | 104 def test_declarations(self): |
105 buf = StringIO("""\ | |
106 class gettext(object): | |
107 pass | |
108 def render_body(context,x,y=_('Page arg 1'),z=_('Page arg 2'),**pageargs): | |
109 pass | |
110 def ngettext(y='arg 1',z='arg 2',**pageargs): | |
111 pass | |
223 | 112 class Meta: |
113 verbose_name = _('log entry') | |
222 | 114 """) |
115 messages = list(extract.extract_python(buf, | |
116 extract.DEFAULT_KEYWORDS.keys(), | |
117 [], {})) | |
118 self.assertEqual([(3, '_', u'Page arg 1', []), | |
223 | 119 (3, '_', u'Page arg 2', []), |
120 (8, '_', u'log entry', [])], | |
222 | 121 messages) |
122 | |
123 def test_multiline(self): | |
124 buf = StringIO("""\ | |
125 msg1 = ngettext('pylon', | |
126 'pylons', count) | |
127 msg2 = ngettext('elvis', | |
128 'elvises', | |
129 count) | |
130 """) | |
131 messages = list(extract.extract_python(buf, ('ngettext',), [], {})) | |
132 self.assertEqual([(1, 'ngettext', (u'pylon', u'pylons', None), []), | |
133 (3, 'ngettext', (u'elvis', u'elvises', None), [])], | |
134 messages) | |
135 | |
136 def test_triple_quoted_strings(self): | |
137 buf = StringIO("""\ | |
138 msg1 = _('''pylons''') | |
139 msg2 = ngettext(r'''elvis''', \"\"\"elvises\"\"\", count) | |
140 msg2 = ngettext(\"\"\"elvis\"\"\", 'elvises', count) | |
141 """) | |
142 messages = list(extract.extract_python(buf, | |
143 extract.DEFAULT_KEYWORDS.keys(), | |
144 [], {})) | |
145 self.assertEqual([(1, '_', (u'pylons'), []), | |
146 (2, 'ngettext', (u'elvis', u'elvises', None), []), | |
147 (3, 'ngettext', (u'elvis', u'elvises', None), [])], | |
148 messages) | |
149 | |
150 def test_multiline_strings(self): | |
151 buf = StringIO("""\ | |
152 _('''This module provides internationalization and localization | |
153 support for your Python programs by providing an interface to the GNU | |
154 gettext message catalog library.''') | |
155 """) | |
156 messages = list(extract.extract_python(buf, | |
157 extract.DEFAULT_KEYWORDS.keys(), | |
158 [], {})) | |
159 self.assertEqual( | |
160 [(1, '_', | |
161 u'This module provides internationalization and localization\n' | |
162 'support for your Python programs by providing an interface to ' | |
163 'the GNU\ngettext message catalog library.', [])], | |
164 messages) | |
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 | 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 | 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 | 374 |
339 | 375 class ExtractJavaScriptTestCase(unittest.TestCase): |
376 | |
377 def test_simple_extract(self): | |
378 buf = StringIO("""\ | |
379 msg1 = _('simple') | |
380 msg2 = gettext('simple') | |
381 msg3 = ngettext('s', 'p', 42) | |
382 """) | |
383 messages = \ | |
384 list(extract.extract('javascript', buf, extract.DEFAULT_KEYWORDS, | |
385 [], {})) | |
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 | 390 |
391 def test_various_calls(self): | |
392 buf = StringIO("""\ | |
393 msg1 = _(i18n_arg.replace(/"/, '"')) | |
394 msg2 = ungettext(i18n_arg.replace(/"/, '"'), multi_arg.replace(/"/, '"'), 2) | |
395 msg3 = ungettext("Babel", multi_arg.replace(/"/, '"'), 2) | |
396 msg4 = ungettext(i18n_arg.replace(/"/, '"'), "Babels", 2) | |
397 msg5 = ungettext('bunny', 'bunnies', parseInt(Math.random() * 2 + 1)) | |
398 msg6 = ungettext(arg0, 'bunnies', rparseInt(Math.random() * 2 + 1)) | |
399 msg7 = _(hello.there) | |
400 msg8 = gettext('Rabbit') | |
401 msg9 = dgettext('wiki', model.addPage()) | |
402 msg10 = dngettext(domain, 'Page', 'Pages', 3) | |
403 """) | |
404 messages = \ | |
405 list(extract.extract('javascript', buf, extract.DEFAULT_KEYWORDS, [], | |
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 | 410 |
411 def test_message_with_line_comment(self): | |
412 buf = StringIO("""\ | |
413 // NOTE: hello | |
414 msg = _('Bonjour à tous') | |
415 """) | |
416 messages = list(extract.extract_javascript(buf, ('_',), ['NOTE:'], {})) | |
417 self.assertEqual(u'Bonjour à tous', messages[0][2]) | |
418 self.assertEqual([u'NOTE: hello'], messages[0][3]) | |
419 | |
420 def test_message_with_multiline_comment(self): | |
421 buf = StringIO("""\ | |
422 /* NOTE: hello | |
423 and bonjour | |
424 and servus */ | |
425 msg = _('Bonjour à tous') | |
426 """) | |
427 messages = list(extract.extract_javascript(buf, ('_',), ['NOTE:'], {})) | |
428 self.assertEqual(u'Bonjour à tous', messages[0][2]) | |
429 self.assertEqual([u'NOTE: hello', 'and bonjour', ' and servus'], messages[0][3]) | |
430 | |
431 def test_ignore_function_definitions(self): | |
432 buf = StringIO("""\ | |
433 function gettext(value) { | |
434 return translations[language][value] || value; | |
435 }""") | |
436 | |
437 messages = list(extract.extract_javascript(buf, ('gettext',), [], {})) | |
438 self.assertEqual(messages, []) | |
439 | |
440 def test_misplaced_comments(self): | |
441 buf = StringIO("""\ | |
442 /* NOTE: this won't show up */ | |
443 foo() | |
444 | |
445 /* NOTE: this will */ | |
446 msg = _('Something') | |
447 | |
448 // NOTE: this will show up | |
449 // too. | |
450 msg = _('Something else') | |
451 | |
452 // NOTE: but this won't | |
453 bar() | |
454 | |
455 _('no comment here') | |
456 """) | |
457 messages = list(extract.extract_javascript(buf, ('_',), ['NOTE:'], {})) | |
458 self.assertEqual(u'Something', messages[0][2]) | |
459 self.assertEqual([u'NOTE: this will'], messages[0][3]) | |
460 self.assertEqual(u'Something else', messages[1][2]) | |
461 self.assertEqual([u'NOTE: this will show up', 'too.'], messages[1][3]) | |
462 self.assertEqual(u'no comment here', messages[2][2]) | |
463 self.assertEqual([], messages[2][3]) | |
464 | |
343 | 465 |
222 | 466 class ExtractTestCase(unittest.TestCase): |
467 | |
468 def test_invalid_filter(self): | |
469 buf = StringIO("""\ | |
470 msg1 = _(i18n_arg.replace(r'\"', '"')) | |
471 msg2 = ungettext(i18n_arg.replace(r'\"', '"'), multi_arg.replace(r'\"', '"'), 2) | |
472 msg3 = ungettext("Babel", multi_arg.replace(r'\"', '"'), 2) | |
473 msg4 = ungettext(i18n_arg.replace(r'\"', '"'), "Babels", 2) | |
474 msg5 = ungettext('bunny', 'bunnies', random.randint(1, 2)) | |
475 msg6 = ungettext(arg0, 'bunnies', random.randint(1, 2)) | |
476 msg7 = _(hello.there) | |
477 msg8 = gettext('Rabbit') | |
478 msg9 = dgettext('wiki', model.addPage()) | |
479 msg10 = dngettext(domain, 'Page', 'Pages', 3) | |
480 """) | |
481 messages = \ | |
482 list(extract.extract('python', buf, extract.DEFAULT_KEYWORDS, [], | |
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 | 487 |
322 | 488 def test_invalid_extract_method(self): |
489 buf = StringIO('') | |
490 self.assertRaises(ValueError, list, extract.extract('spam', buf)) | |
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 | 508 def test_empty_string_msgid(self): |
509 buf = StringIO("""\ | |
510 msg = _('') | |
511 """) | |
512 stderr = sys.stderr | |
513 sys.stderr = StringIO() | |
514 try: | |
515 messages = \ | |
516 list(extract.extract('python', buf, extract.DEFAULT_KEYWORDS, | |
517 [], {})) | |
518 self.assertEqual([], messages) | |
519 assert 'warning: Empty msgid.' in sys.stderr.getvalue() | |
520 finally: | |
521 sys.stderr = stderr | |
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 | 534 |
1 | 535 def suite(): |
536 suite = unittest.TestSuite() | |
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 | 539 suite.addTest(unittest.makeSuite(ExtractJavaScriptTestCase)) |
222 | 540 suite.addTest(unittest.makeSuite(ExtractTestCase)) |
1 | 541 return suite |
542 | |
543 if __name__ == '__main__': | |
544 unittest.main(defaultTest='suite') |