Mercurial > babel > old > mirror
annotate 0.9.x/babel/messages/tests/catalog.py @ 510:4c473bedd528 stable
Fix Python 2.3 compatibility for 0.9 branch (closes #233)
author | fschwarz |
---|---|
date | Fri, 04 Mar 2011 14:16:15 +0000 |
parents | 4adedf7d0f04 |
children |
rev | line source |
---|---|
263 | 1 # -*- coding: utf-8 -*- |
2 # | |
3 # Copyright (C) 2007 Edgewall Software | |
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 | |
454 | 14 import copy |
474 | 15 import datetime |
263 | 16 import doctest |
17 import unittest | |
18 | |
19 from babel.messages import catalog | |
20 | |
21 | |
22 class MessageTestCase(unittest.TestCase): | |
23 | |
24 def test_python_format(self): | |
25 assert catalog.PYTHON_FORMAT.search('foo %d bar') | |
26 assert catalog.PYTHON_FORMAT.search('foo %s bar') | |
27 assert catalog.PYTHON_FORMAT.search('foo %r bar') | |
28 assert catalog.PYTHON_FORMAT.search('foo %(name).1f') | |
29 assert catalog.PYTHON_FORMAT.search('foo %(name)3.3f') | |
30 assert catalog.PYTHON_FORMAT.search('foo %(name)3f') | |
31 assert catalog.PYTHON_FORMAT.search('foo %(name)06d') | |
32 assert catalog.PYTHON_FORMAT.search('foo %(name)Li') | |
33 assert catalog.PYTHON_FORMAT.search('foo %(name)#d') | |
34 assert catalog.PYTHON_FORMAT.search('foo %(name)-4.4hs') | |
35 assert catalog.PYTHON_FORMAT.search('foo %(name)*.3f') | |
36 assert catalog.PYTHON_FORMAT.search('foo %(name).*f') | |
37 assert catalog.PYTHON_FORMAT.search('foo %(name)3.*f') | |
38 assert catalog.PYTHON_FORMAT.search('foo %(name)*.*f') | |
371 | 39 assert catalog.PYTHON_FORMAT.search('foo %()s') |
263 | 40 |
41 def test_translator_comments(self): | |
42 mess = catalog.Message('foo', user_comments=['Comment About `foo`']) | |
43 self.assertEqual(mess.user_comments, ['Comment About `foo`']) | |
44 mess = catalog.Message('foo', | |
45 auto_comments=['Comment 1 About `foo`', | |
46 'Comment 2 About `foo`']) | |
47 self.assertEqual(mess.auto_comments, ['Comment 1 About `foo`', | |
48 'Comment 2 About `foo`']) | |
49 | |
371 | 50 def test_clone_message_object(self): |
51 msg = catalog.Message('foo', locations=[('foo.py', 42)]) | |
52 clone = msg.clone() | |
53 clone.locations.append(('bar.py', 42)) | |
54 self.assertEqual(msg.locations, [('foo.py', 42)]) | |
55 msg.flags.add('fuzzy') | |
56 assert not clone.fuzzy and msg.fuzzy | |
57 | |
263 | 58 |
59 class CatalogTestCase(unittest.TestCase): | |
60 | |
61 def test_two_messages_with_same_singular(self): | |
62 cat = catalog.Catalog() | |
63 cat.add('foo') | |
64 cat.add(('foo', 'foos')) | |
65 self.assertEqual(1, len(cat)) | |
66 | |
67 def test_duplicate_auto_comment(self): | |
68 cat = catalog.Catalog() | |
69 cat.add('foo', auto_comments=['A comment']) | |
70 cat.add('foo', auto_comments=['A comment', 'Another comment']) | |
71 self.assertEqual(['A comment', 'Another comment'], | |
72 cat['foo'].auto_comments) | |
73 | |
74 def test_duplicate_user_comment(self): | |
75 cat = catalog.Catalog() | |
76 cat.add('foo', user_comments=['A comment']) | |
77 cat.add('foo', user_comments=['A comment', 'Another comment']) | |
78 self.assertEqual(['A comment', 'Another comment'], | |
79 cat['foo'].user_comments) | |
80 | |
81 def test_duplicate_location(self): | |
82 cat = catalog.Catalog() | |
83 cat.add('foo', locations=[('foo.py', 1)]) | |
84 cat.add('foo', locations=[('foo.py', 1)]) | |
85 self.assertEqual([('foo.py', 1)], cat['foo'].locations) | |
86 | |
280 | 87 def test_update_message_changed_to_plural(self): |
88 cat = catalog.Catalog() | |
89 cat.add(u'foo', u'Voh') | |
90 tmpl = catalog.Catalog() | |
91 tmpl.add((u'foo', u'foos')) | |
92 cat.update(tmpl) | |
93 self.assertEqual((u'Voh', ''), cat['foo'].string) | |
94 assert cat['foo'].fuzzy | |
95 | |
96 def test_update_message_changed_to_simple(self): | |
97 cat = catalog.Catalog() | |
98 cat.add((u'foo' u'foos'), (u'Voh', u'Vöhs')) | |
99 tmpl = catalog.Catalog() | |
100 tmpl.add(u'foo') | |
101 cat.update(tmpl) | |
102 self.assertEqual(u'Voh', cat['foo'].string) | |
103 assert cat['foo'].fuzzy | |
104 | |
263 | 105 def test_update_message_updates_comments(self): |
106 cat = catalog.Catalog() | |
107 cat[u'foo'] = catalog.Message('foo', locations=[('main.py', 5)]) | |
108 self.assertEqual(cat[u'foo'].auto_comments, []) | |
109 self.assertEqual(cat[u'foo'].user_comments, []) | |
110 # Update cat[u'foo'] with a new location and a comment | |
111 cat[u'foo'] = catalog.Message('foo', locations=[('main.py', 7)], | |
112 user_comments=['Foo Bar comment 1']) | |
113 self.assertEqual(cat[u'foo'].user_comments, ['Foo Bar comment 1']) | |
114 # now add yet another location with another comment | |
115 cat[u'foo'] = catalog.Message('foo', locations=[('main.py', 9)], | |
116 auto_comments=['Foo Bar comment 2']) | |
117 self.assertEqual(cat[u'foo'].auto_comments, ['Foo Bar comment 2']) | |
118 | |
119 def test_update_fuzzy_matching_with_case_change(self): | |
120 cat = catalog.Catalog() | |
121 cat.add('foo', 'Voh') | |
122 cat.add('bar', 'Bahr') | |
123 tmpl = catalog.Catalog() | |
124 tmpl.add('Foo') | |
125 cat.update(tmpl) | |
126 self.assertEqual(1, len(cat.obsolete)) | |
127 assert 'foo' not in cat | |
128 | |
129 self.assertEqual('Voh', cat['Foo'].string) | |
130 self.assertEqual(True, cat['Foo'].fuzzy) | |
131 | |
132 def test_update_fuzzy_matching_with_char_change(self): | |
133 cat = catalog.Catalog() | |
134 cat.add('fo', 'Voh') | |
135 cat.add('bar', 'Bahr') | |
136 tmpl = catalog.Catalog() | |
137 tmpl.add('foo') | |
138 cat.update(tmpl) | |
139 self.assertEqual(1, len(cat.obsolete)) | |
140 assert 'fo' not in cat | |
141 | |
142 self.assertEqual('Voh', cat['foo'].string) | |
143 self.assertEqual(True, cat['foo'].fuzzy) | |
144 | |
316 | 145 def test_update_fuzzy_matching_no_msgstr(self): |
146 cat = catalog.Catalog() | |
147 cat.add('fo', '') | |
148 tmpl = catalog.Catalog() | |
149 tmpl.add('fo') | |
150 tmpl.add('foo') | |
151 cat.update(tmpl) | |
152 assert 'fo' in cat | |
153 assert 'foo' in cat | |
154 | |
155 self.assertEqual('', cat['fo'].string) | |
156 self.assertEqual(False, cat['fo'].fuzzy) | |
157 self.assertEqual(None, cat['foo'].string) | |
158 self.assertEqual(False, cat['foo'].fuzzy) | |
159 | |
160 def test_update_fuzzy_matching_no_cascading(self): | |
161 cat = catalog.Catalog() | |
162 cat.add('fo', 'Voh') | |
163 cat.add('foo', 'Vohe') | |
164 tmpl = catalog.Catalog() | |
165 tmpl.add('fo') | |
166 tmpl.add('foo') | |
167 tmpl.add('fooo') | |
168 cat.update(tmpl) | |
169 assert 'fo' in cat | |
170 assert 'foo' in cat | |
171 | |
172 self.assertEqual('Voh', cat['fo'].string) | |
173 self.assertEqual(False, cat['fo'].fuzzy) | |
174 self.assertEqual('Vohe', cat['foo'].string) | |
175 self.assertEqual(False, cat['foo'].fuzzy) | |
176 self.assertEqual('Vohe', cat['fooo'].string) | |
177 self.assertEqual(True, cat['fooo'].fuzzy) | |
178 | |
263 | 179 def test_update_without_fuzzy_matching(self): |
180 cat = catalog.Catalog() | |
181 cat.add('fo', 'Voh') | |
182 cat.add('bar', 'Bahr') | |
183 tmpl = catalog.Catalog() | |
184 tmpl.add('foo') | |
185 cat.update(tmpl, no_fuzzy_matching=True) | |
186 self.assertEqual(2, len(cat.obsolete)) | |
187 | |
454 | 188 def test_fuzzy_matching_regarding_plurals(self): |
189 cat = catalog.Catalog() | |
190 cat.add(('foo', 'foh'), ('foo', 'foh')) | |
191 ru = copy.copy(cat) | |
192 ru.locale = 'ru_RU' | |
193 ru.update(cat) | |
194 self.assertEqual(True, ru['foo'].fuzzy) | |
195 ru = copy.copy(cat) | |
196 ru.locale = 'ru_RU' | |
197 ru['foo'].string = ('foh', 'fohh', 'fohhh') | |
198 ru.update(cat) | |
199 self.assertEqual(False, ru['foo'].fuzzy) | |
200 | |
316 | 201 def test_update_no_template_mutation(self): |
202 tmpl = catalog.Catalog() | |
203 tmpl.add('foo') | |
204 cat1 = catalog.Catalog() | |
205 cat1.add('foo', 'Voh') | |
206 cat1.update(tmpl) | |
207 cat2 = catalog.Catalog() | |
208 cat2.update(tmpl) | |
209 | |
210 self.assertEqual(None, cat2['foo'].string) | |
211 self.assertEqual(False, cat2['foo'].fuzzy) | |
474 | 212 |
213 def test_update_po_updates_pot_creation_date(self): | |
214 template = catalog.Catalog() | |
215 localized_catalog = copy.deepcopy(template) | |
216 localized_catalog.locale = 'de_DE' | |
217 self.assertNotEqual(template.mime_headers, | |
218 localized_catalog.mime_headers) | |
219 self.assertEqual(template.creation_date, | |
220 localized_catalog.creation_date) | |
221 template.creation_date = datetime.datetime.now() - \ | |
222 datetime.timedelta(minutes=5) | |
223 localized_catalog.update(template) | |
224 self.assertEqual(template.creation_date, | |
225 localized_catalog.creation_date) | |
477 | 226 |
227 def test_update_po_keeps_po_revision_date(self): | |
228 template = catalog.Catalog() | |
229 localized_catalog = copy.deepcopy(template) | |
230 localized_catalog.locale = 'de_DE' | |
231 fake_rev_date = datetime.datetime.now() - datetime.timedelta(days=5) | |
232 localized_catalog.revision_date = fake_rev_date | |
233 self.assertNotEqual(template.mime_headers, | |
234 localized_catalog.mime_headers) | |
235 self.assertEqual(template.creation_date, | |
236 localized_catalog.creation_date) | |
237 template.creation_date = datetime.datetime.now() - \ | |
238 datetime.timedelta(minutes=5) | |
239 localized_catalog.update(template) | |
240 self.assertEqual(localized_catalog.revision_date, fake_rev_date) | |
263 | 241 |
481 | 242 def test_stores_datetime_correctly(self): |
243 localized = catalog.Catalog() | |
244 localized.locale = 'de_DE' | |
245 localized[''] = catalog.Message('', | |
246 "POT-Creation-Date: 2009-03-09 15:47-0700\n" + | |
247 "PO-Revision-Date: 2009-03-09 15:47-0700\n") | |
248 for key, value in localized.mime_headers: | |
249 if key in ('POT-Creation-Date', 'PO-Revision-Date'): | |
250 self.assertEqual(value, '2009-03-09 15:47-0700') | |
251 | |
263 | 252 def suite(): |
253 suite = unittest.TestSuite() | |
510
4c473bedd528
Fix Python 2.3 compatibility for 0.9 branch (closes #233)
fschwarz
parents:
481
diff
changeset
|
254 if hasattr(doctest, 'ELLIPSIS'): |
4c473bedd528
Fix Python 2.3 compatibility for 0.9 branch (closes #233)
fschwarz
parents:
481
diff
changeset
|
255 suite.addTest(doctest.DocTestSuite(catalog, optionflags=doctest.ELLIPSIS)) |
4c473bedd528
Fix Python 2.3 compatibility for 0.9 branch (closes #233)
fschwarz
parents:
481
diff
changeset
|
256 else: |
4c473bedd528
Fix Python 2.3 compatibility for 0.9 branch (closes #233)
fschwarz
parents:
481
diff
changeset
|
257 # Python 2.3 has no doctest.ELLIPSIS option, it's implicit |
4c473bedd528
Fix Python 2.3 compatibility for 0.9 branch (closes #233)
fschwarz
parents:
481
diff
changeset
|
258 suite.addTest(doctest.DocTestSuite(catalog)) |
263 | 259 suite.addTest(unittest.makeSuite(MessageTestCase)) |
260 suite.addTest(unittest.makeSuite(CatalogTestCase)) | |
261 return suite | |
262 | |
263 if __name__ == '__main__': | |
264 unittest.main(defaultTest='suite') |