Mercurial > babel > old > babel-test
annotate babel/messages/tests/extract.py @ 530:85e1beadacb0
Update the copyright line.
author | jruigrok |
---|---|
date | Sat, 05 Mar 2011 15:22:28 +0000 |
parents | 48f46a943be9 |
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
84a9e5f97658
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
56b931b23d5b
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
b3395b285104
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
56b931b23d5b
Fix for #8: fix extraction of strings from Python source using prefixes ('u' or 'r') or triple quotes.
cmlenz
parents:
12
diff
changeset
|
22 |
56b931b23d5b
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): |
56b931b23d5b
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
64dc3f943d3b
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): |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
66 buf = StringIO("""\ |
64dc3f943d3b
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 |
64dc3f943d3b
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.", |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
69 "Catalogs deleted.", len(selected))) |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
70 |
64dc3f943d3b
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 |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
72 add_notice(req, _("Locale deleted.")) |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
73 |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
74 |
64dc3f943d3b
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 |
64dc3f943d3b
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
48f46a943be9
Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents:
366
diff
changeset
|
77 |
48f46a943be9
Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents:
366
diff
changeset
|
78 # NOTE: This Comment SHOULD Be Extracted |
48f46a943be9
Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents:
366
diff
changeset
|
79 # NOTE: And This One Too |
48f46a943be9
Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents:
366
diff
changeset
|
80 add_notice(req, ngettext("Bar deleted.", |
48f46a943be9
Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents:
366
diff
changeset
|
81 "Bars deleted.", len(selected))) |
366
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
82 """) |
64dc3f943d3b
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:'], |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
84 |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
85 {'strip_comment_tags':False})) |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
86 self.assertEqual((6, '_', 'Locale deleted.', |
64dc3f943d3b
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']), |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
88 messages[1]) |
64dc3f943d3b
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.', |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
90 None), |
64dc3f943d3b
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']), |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
92 messages[2]) |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
93 self.assertEqual((3, 'ngettext', |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
94 (u'Catalog deleted.', |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
95 u'Catalogs deleted.', None), |
64dc3f943d3b
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']), |
64dc3f943d3b
Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
palgarvio
parents:
365
diff
changeset
|
97 messages[0]) |
367
48f46a943be9
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.', |
48f46a943be9
Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents:
366
diff
changeset
|
99 None), |
48f46a943be9
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', |
48f46a943be9
Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents:
366
diff
changeset
|
101 u'NOTE: And This One Too']), |
48f46a943be9
Make sure the fix also works for multiple translator comments. Refs #119.
palgarvio
parents:
366
diff
changeset
|
102 messages[3]) |
366
64dc3f943d3b
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
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
166 def test_concatenated_strings(self): |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
167 buf = StringIO("""\ |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
168 foobar = _('foo' 'bar') |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
169 """) |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
170 messages = list(extract.extract_python(buf, |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
171 extract.DEFAULT_KEYWORDS.keys(), |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
172 [], {})) |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
173 self.assertEqual(u'foobar', messages[0][2]) |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
174 |
36
56b931b23d5b
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): |
56b931b23d5b
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
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
177 messages = list(extract.extract_python(buf, ('_',), [], {})) |
164
84a9e5f97658
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
56b931b23d5b
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
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
180 def test_comment_tag(self): |
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
181 buf = StringIO(""" |
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
182 # NOTE: A translation comment |
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
183 msg = _(u'Foo Bar') |
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
184 """) |
91
018b2efe5df7
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
84a9e5f97658
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
6fe060286ff0
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
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
188 |
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
189 def test_comment_tag_multiline(self): |
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
190 buf = StringIO(""" |
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
191 # NOTE: A translation comment |
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
192 # with a second line |
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
193 msg = _(u'Foo Bar') |
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
194 """) |
91
018b2efe5df7
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
84a9e5f97658
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
6fe060286ff0
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
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
198 messages[0][3]) |
222 | 199 |
85
dc260efaed34
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): |
dc260efaed34
Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents:
83
diff
changeset
|
201 buf = StringIO(""" |
dc260efaed34
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 |
dc260efaed34
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 |
dc260efaed34
Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents:
83
diff
changeset
|
204 # NOTE: A translation comment |
dc260efaed34
Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents:
83
diff
changeset
|
205 # with a second line |
dc260efaed34
Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents:
83
diff
changeset
|
206 msg = _(u'Foo Bar') |
dc260efaed34
Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents:
83
diff
changeset
|
207 """) |
91
018b2efe5df7
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
84a9e5f97658
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
6fe060286ff0
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
dc260efaed34
Fixed de-pluralization bug introduced in [85] regarding the extraction of translator comments.
palgarvio
parents:
83
diff
changeset
|
211 messages[0][3]) |
83
6b6aa2f9e93d
Add unit tests for extracting translator comments from python sources.
cmlenz
parents:
80
diff
changeset
|
212 |
91
018b2efe5df7
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): |
018b2efe5df7
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(""" |
018b2efe5df7
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 |
018b2efe5df7
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
cb94806aa82c
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
018b2efe5df7
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 |
018b2efe5df7
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') |
018b2efe5df7
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 """) |
018b2efe5df7
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
84a9e5f97658
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
6fe060286ff0
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
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
224 |
92
5bac3678e60d
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): |
5bac3678e60d
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(""" |
5bac3678e60d
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 |
5bac3678e60d
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 |
5bac3678e60d
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') |
5bac3678e60d
Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents:
91
diff
changeset
|
230 |
5bac3678e60d
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 |
5bac3678e60d
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') |
5bac3678e60d
Fixed bug introduced in [92], bad use of `lstrip()`. Added a unittest to test multiple translator comment tags.
palgarvio
parents:
91
diff
changeset
|
233 """) |
5bac3678e60d
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, ('_',), |
5bac3678e60d
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
84a9e5f97658
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
6fe060286ff0
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
84a9e5f97658
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]) |
84a9e5f97658
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
6fe060286ff0
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
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
241 |
1ce6692ed625
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): |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
243 buf = StringIO(""" |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
244 # NOTE: one |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
245 # NOTE: two |
1ce6692ed625
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') |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
247 """) |
1ce6692ed625
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
84a9e5f97658
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
6fe060286ff0
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
1ce6692ed625
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): |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
253 buf = StringIO(""" |
1ce6692ed625
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 |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
255 hello = 'there' |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
256 |
1ce6692ed625
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') |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
258 """) |
1ce6692ed625
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
84a9e5f97658
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
1ce6692ed625
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]) |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
262 |
1ce6692ed625
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): |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
264 buf = StringIO(""" |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
265 # NOTE: Hi! |
1ce6692ed625
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!') |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
267 |
1ce6692ed625
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 |
1ce6692ed625
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)] |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
270 |
1ce6692ed625
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 |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
272 hello = _('Hello') |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
273 """) |
1ce6692ed625
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
84a9e5f97658
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
6fe060286ff0
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
84a9e5f97658
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
1ce6692ed625
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]) |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
279 |
1ce6692ed625
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): |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
281 buf = StringIO(""" |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
282 # NOTE: Hi, |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
283 |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
284 # there! |
1ce6692ed625
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!') |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
286 """) |
1ce6692ed625
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
84a9e5f97658
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
1ce6692ed625
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]) |
1ce6692ed625
Commiting patch provided by pjenvey: Translator comments don't apply unless they immediately preceed the message.
palgarvio
parents:
92
diff
changeset
|
290 |
365
cb94806aa82c
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): |
cb94806aa82c
Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents:
343
diff
changeset
|
292 buf = StringIO(""" |
cb94806aa82c
Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents:
343
diff
changeset
|
293 #: A translation comment |
cb94806aa82c
Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents:
343
diff
changeset
|
294 #: with leading spaces |
cb94806aa82c
Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents:
343
diff
changeset
|
295 msg = _(u'Foo Bar') |
cb94806aa82c
Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents:
343
diff
changeset
|
296 """) |
cb94806aa82c
Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents:
343
diff
changeset
|
297 messages = list(extract.extract_python(buf, ('_',), [':'], {})) |
cb94806aa82c
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]) |
cb94806aa82c
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'], |
cb94806aa82c
Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents:
343
diff
changeset
|
300 messages[0][3]) |
cb94806aa82c
Fix typo and add a test for translator comments with leading spaces.
palgarvio
parents:
343
diff
changeset
|
301 |
257
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
302 def test_different_signatures(self): |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
303 buf = StringIO(""" |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
304 foo = _('foo', 'bar') |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
305 n = ngettext('hello', 'there', n=3) |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
306 n = ngettext(n=3, 'hello', 'there') |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
307 n = ngettext(n=3, *messages) |
258
f2cd4422d2cf
skip messages that have less arguments than the keyword spec calls for
pjenvey
parents:
257
diff
changeset
|
308 n = ngettext() |
f2cd4422d2cf
skip messages that have less arguments than the keyword spec calls for
pjenvey
parents:
257
diff
changeset
|
309 n = ngettext('foo') |
257
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
310 """) |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
311 messages = list(extract.extract_python(buf, ('_', 'ngettext'), [], {})) |
4c9f98dd30eb
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]) |
4c9f98dd30eb
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]) |
4c9f98dd30eb
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]) |
4c9f98dd30eb
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
f2cd4422d2cf
skip messages that have less arguments than the keyword spec calls for
pjenvey
parents:
257
diff
changeset
|
316 self.assertEqual(None, messages[4][2]) |
f2cd4422d2cf
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
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
318 |
164
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
319 def test_utf8_message(self): |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
320 buf = StringIO(""" |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
321 # NOTE: hello |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
322 msg = _('Bonjour à tous') |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
323 """) |
84a9e5f97658
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:'], |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
325 {'encoding': 'utf-8'})) |
84a9e5f97658
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
6fe060286ff0
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
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
328 |
84a9e5f97658
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): |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
330 buf = StringIO("""# -*- coding: utf-8 -*- |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
331 # NOTE: hello |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
332 msg = _('Bonjour à tous') |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
333 """) |
84a9e5f97658
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:'], {})) |
84a9e5f97658
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
6fe060286ff0
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
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
337 |
84a9e5f97658
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): |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
339 buf = StringIO(codecs.BOM_UTF8 + """ |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
340 # NOTE: hello |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
341 msg = _('Bonjour à tous') |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
342 """) |
84a9e5f97658
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:'], {})) |
84a9e5f97658
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
6fe060286ff0
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
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
346 |
84a9e5f97658
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): |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
348 buf = StringIO(codecs.BOM_UTF8 + """ |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
349 msg = _('Bonjour à tous') |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
350 msgu = _(u'Bonjour à tous') |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
351 """) |
84a9e5f97658
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:'], {})) |
84a9e5f97658
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]) |
84a9e5f97658
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]) |
84a9e5f97658
made the python extractor detect source file encodings from the magic encoding
pjenvey
parents:
93
diff
changeset
|
355 |
338
6fe060286ff0
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): |
6fe060286ff0
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("""\ |
6fe060286ff0
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 |
6fe060286ff0
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 |
6fe060286ff0
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') |
6fe060286ff0
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 |
6fe060286ff0
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 |
6fe060286ff0
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 |
6fe060286ff0
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')""") |
6fe060286ff0
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:', ':'], |
6fe060286ff0
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)) |
6fe060286ff0
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]) |
6fe060286ff0
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', |
6fe060286ff0
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]) |
6fe060286ff0
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]) |
6fe060286ff0
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', |
6fe060286ff0
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]) |
6fe060286ff0
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 | |
387 self.assertEqual([(1, 'simple', []), | |
388 (2, 'simple', []), | |
389 (3, ('s', 'p'), [])], messages) | |
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 {})) | |
407 self.assertEqual([(5, (u'bunny', u'bunnies'), []), | |
408 (8, u'Rabbit', []), | |
409 (10, (u'Page', u'Pages'), [])], messages) | |
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 {})) | |
484 self.assertEqual([(5, (u'bunny', u'bunnies'), []), | |
485 (8, u'Rabbit', []), | |
486 (10, (u'Page', u'Pages'), [])], messages) | |
487 | |
322 | 488 def test_invalid_extract_method(self): |
489 buf = StringIO('') | |
490 self.assertRaises(ValueError, list, extract.extract('spam', buf)) | |
491 | |
257
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
492 def test_different_signatures(self): |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
493 buf = StringIO(""" |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
494 foo = _('foo', 'bar') |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
495 n = ngettext('hello', 'there', n=3) |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
496 n = ngettext(n=3, 'hello', 'there') |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
497 n = ngettext(n=3, *messages) |
258
f2cd4422d2cf
skip messages that have less arguments than the keyword spec calls for
pjenvey
parents:
257
diff
changeset
|
498 n = ngettext() |
f2cd4422d2cf
skip messages that have less arguments than the keyword spec calls for
pjenvey
parents:
257
diff
changeset
|
499 n = ngettext('foo') |
257
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
500 """) |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
501 messages = \ |
4c9f98dd30eb
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, [], |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
503 {})) |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
504 self.assertEqual(len(messages), 2) |
4c9f98dd30eb
add extractor tests for some odder method signatures and concatenated strings
pjenvey
parents:
223
diff
changeset
|
505 self.assertEqual(u'foo', messages[0][1]) |
4c9f98dd30eb
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]) |
4c9f98dd30eb
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 | |
343 | 523 |
1 | 524 def suite(): |
525 suite = unittest.TestSuite() | |
526 suite.addTest(doctest.DocTestSuite(extract)) | |
36
56b931b23d5b
Fix for #8: fix extraction of strings from Python source using prefixes ('u' or 'r') or triple quotes.
cmlenz
parents:
12
diff
changeset
|
527 suite.addTest(unittest.makeSuite(ExtractPythonTestCase)) |
339 | 528 suite.addTest(unittest.makeSuite(ExtractJavaScriptTestCase)) |
222 | 529 suite.addTest(unittest.makeSuite(ExtractTestCase)) |
1 | 530 return suite |
531 | |
532 if __name__ == '__main__': | |
533 unittest.main(defaultTest='suite') |