annotate babel/messages/tests/catalog.py @ 232:1448b500de40

Forgot to update test method name after copy/paste.
author cmlenz
date Tue, 24 Jul 2007 21:25:19 +0000
parents fc8b8c2bba53
children 3308e9971fab
rev   line source
58
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
2 #
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
3 # Copyright (C) 2007 Edgewall Software
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
4 # All rights reserved.
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
5 #
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
8 # are also available at http://babel.edgewall.org/wiki/License.
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
9 #
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
10 # This software consists of voluntary contributions made by many
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
11 # individuals. For the exact contribution history, see the revision
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
12 # history and logs, available at http://babel.edgewall.org/log/.
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
13
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
14 import doctest
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
15 import unittest
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
16
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
17 from babel.messages import catalog
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
18
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
19
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
20 class MessageTestCase(unittest.TestCase):
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
21
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
22 def test_python_format(self):
222
bd8b1301b27e Added infrastructure for adding catalog checkers, and implement a checker that validations Python format parameters in translations, closing #19.
cmlenz
parents: 202
diff changeset
23 assert catalog.PYTHON_FORMAT.search('foo %d bar')
bd8b1301b27e Added infrastructure for adding catalog checkers, and implement a checker that validations Python format parameters in translations, closing #19.
cmlenz
parents: 202
diff changeset
24 assert catalog.PYTHON_FORMAT.search('foo %s bar')
bd8b1301b27e Added infrastructure for adding catalog checkers, and implement a checker that validations Python format parameters in translations, closing #19.
cmlenz
parents: 202
diff changeset
25 assert catalog.PYTHON_FORMAT.search('foo %r bar')
227
f358dd40a960 Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
cmlenz
parents: 222
diff changeset
26 assert catalog.PYTHON_FORMAT.search('foo %(name).1f')
f358dd40a960 Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
cmlenz
parents: 222
diff changeset
27 assert catalog.PYTHON_FORMAT.search('foo %(name)3.3f')
f358dd40a960 Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
cmlenz
parents: 222
diff changeset
28 assert catalog.PYTHON_FORMAT.search('foo %(name)3f')
f358dd40a960 Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
cmlenz
parents: 222
diff changeset
29 assert catalog.PYTHON_FORMAT.search('foo %(name)06d')
f358dd40a960 Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
cmlenz
parents: 222
diff changeset
30 assert catalog.PYTHON_FORMAT.search('foo %(name)Li')
f358dd40a960 Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
cmlenz
parents: 222
diff changeset
31 assert catalog.PYTHON_FORMAT.search('foo %(name)#d')
f358dd40a960 Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
cmlenz
parents: 222
diff changeset
32 assert catalog.PYTHON_FORMAT.search('foo %(name)-4.4hs')
f358dd40a960 Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
cmlenz
parents: 222
diff changeset
33 assert catalog.PYTHON_FORMAT.search('foo %(name)*.3f')
f358dd40a960 Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
cmlenz
parents: 222
diff changeset
34 assert catalog.PYTHON_FORMAT.search('foo %(name).*f')
f358dd40a960 Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
cmlenz
parents: 222
diff changeset
35 assert catalog.PYTHON_FORMAT.search('foo %(name)3.*f')
f358dd40a960 Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
cmlenz
parents: 222
diff changeset
36 assert catalog.PYTHON_FORMAT.search('foo %(name)*.*f')
107
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
37
82
f421e5576d26 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 71
diff changeset
38 def test_translator_comments(self):
107
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
39 mess = catalog.Message('foo', user_comments=['Comment About `foo`'])
202
d3c272492053 Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents: 183
diff changeset
40 self.assertEqual(mess.user_comments, ['Comment About `foo`'])
82
f421e5576d26 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 71
diff changeset
41 mess = catalog.Message('foo',
107
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
42 auto_comments=['Comment 1 About `foo`',
82
f421e5576d26 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 71
diff changeset
43 'Comment 2 About `foo`'])
107
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
44 self.assertEqual(mess.auto_comments, ['Comment 1 About `foo`',
82
f421e5576d26 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 71
diff changeset
45 'Comment 2 About `foo`'])
58
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
46
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
47
71
b260ffa01a2d Message catalogs can have multiple messages with the same ID, where some of them have plural strings, and others don't. Still the same message.
cmlenz
parents: 69
diff changeset
48 class CatalogTestCase(unittest.TestCase):
b260ffa01a2d Message catalogs can have multiple messages with the same ID, where some of them have plural strings, and others don't. Still the same message.
cmlenz
parents: 69
diff changeset
49
b260ffa01a2d Message catalogs can have multiple messages with the same ID, where some of them have plural strings, and others don't. Still the same message.
cmlenz
parents: 69
diff changeset
50 def test_two_messages_with_same_singular(self):
b260ffa01a2d Message catalogs can have multiple messages with the same ID, where some of them have plural strings, and others don't. Still the same message.
cmlenz
parents: 69
diff changeset
51 cat = catalog.Catalog()
b260ffa01a2d Message catalogs can have multiple messages with the same ID, where some of them have plural strings, and others don't. Still the same message.
cmlenz
parents: 69
diff changeset
52 cat.add('foo')
b260ffa01a2d Message catalogs can have multiple messages with the same ID, where some of them have plural strings, and others don't. Still the same message.
cmlenz
parents: 69
diff changeset
53 cat.add(('foo', 'foos'))
b260ffa01a2d Message catalogs can have multiple messages with the same ID, where some of them have plural strings, and others don't. Still the same message.
cmlenz
parents: 69
diff changeset
54 self.assertEqual(1, len(cat))
97
debd9ac3bb4d Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents: 91
diff changeset
55
229
85340bec3a97 Fix tests broken by [233], and add new tests.
cmlenz
parents: 227
diff changeset
56 def test_duplicate_auto_comment(self):
230
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
57 cat = catalog.Catalog()
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
58 cat.add('foo', auto_comments=['A comment'])
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
59 cat.add('foo', auto_comments=['A comment', 'Another comment'])
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
60 self.assertEqual(['A comment', 'Another comment'],
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
61 cat['foo'].auto_comments)
229
85340bec3a97 Fix tests broken by [233], and add new tests.
cmlenz
parents: 227
diff changeset
62
85340bec3a97 Fix tests broken by [233], and add new tests.
cmlenz
parents: 227
diff changeset
63 def test_duplicate_user_comment(self):
230
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
64 cat = catalog.Catalog()
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
65 cat.add('foo', user_comments=['A comment'])
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
66 cat.add('foo', user_comments=['A comment', 'Another comment'])
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
67 self.assertEqual(['A comment', 'Another comment'],
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
68 cat['foo'].user_comments)
229
85340bec3a97 Fix tests broken by [233], and add new tests.
cmlenz
parents: 227
diff changeset
69
232
1448b500de40 Forgot to update test method name after copy/paste.
cmlenz
parents: 231
diff changeset
70 def test_duplicate_location(self):
231
fc8b8c2bba53 Remove duplicate locations of catalog messages.
cmlenz
parents: 230
diff changeset
71 cat = catalog.Catalog()
fc8b8c2bba53 Remove duplicate locations of catalog messages.
cmlenz
parents: 230
diff changeset
72 cat.add('foo', locations=[('foo.py', 1)])
fc8b8c2bba53 Remove duplicate locations of catalog messages.
cmlenz
parents: 230
diff changeset
73 cat.add('foo', locations=[('foo.py', 1)])
fc8b8c2bba53 Remove duplicate locations of catalog messages.
cmlenz
parents: 230
diff changeset
74 self.assertEqual([('foo.py', 1)], cat['foo'].locations)
fc8b8c2bba53 Remove duplicate locations of catalog messages.
cmlenz
parents: 230
diff changeset
75
91
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
76 def test_update_message_updates_comments(self):
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
77 cat = catalog.Catalog()
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
78 cat[u'foo'] = catalog.Message('foo', locations=[('main.py', 5)])
107
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
79 self.assertEqual(cat[u'foo'].auto_comments, [])
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
80 self.assertEqual(cat[u'foo'].user_comments, [])
91
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
81 # Update cat[u'foo'] with a new location and a comment
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
82 cat[u'foo'] = catalog.Message('foo', locations=[('main.py', 7)],
107
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
83 user_comments=['Foo Bar comment 1'])
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
84 self.assertEqual(cat[u'foo'].user_comments, ['Foo Bar comment 1'])
91
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
85 # now add yet another location with another comment
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
86 cat[u'foo'] = catalog.Message('foo', locations=[('main.py', 9)],
202
d3c272492053 Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents: 183
diff changeset
87 auto_comments=['Foo Bar comment 2'])
107
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
88 self.assertEqual(cat[u'foo'].auto_comments, ['Foo Bar comment 2'])
71
b260ffa01a2d Message catalogs can have multiple messages with the same ID, where some of them have plural strings, and others don't. Still the same message.
cmlenz
parents: 69
diff changeset
89
167
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
90 def test_update_fuzzy_matching_with_case_change(self):
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
91 cat = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
92 cat.add('foo', 'Voh')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
93 cat.add('bar', 'Bahr')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
94 tmpl = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
95 tmpl.add('Foo')
183
e927dffc9ab4 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 167
diff changeset
96 cat.update(tmpl)
e927dffc9ab4 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 167
diff changeset
97 self.assertEqual(1, len(cat.obsolete))
167
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
98 assert 'foo' not in cat
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
99
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
100 self.assertEqual('Voh', cat['Foo'].string)
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
101 self.assertEqual(True, cat['Foo'].fuzzy)
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
102
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
103 def test_update_fuzzy_matching_with_char_change(self):
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
104 cat = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
105 cat.add('fo', 'Voh')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
106 cat.add('bar', 'Bahr')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
107 tmpl = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
108 tmpl.add('foo')
183
e927dffc9ab4 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 167
diff changeset
109 cat.update(tmpl)
e927dffc9ab4 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 167
diff changeset
110 self.assertEqual(1, len(cat.obsolete))
167
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
111 assert 'fo' not in cat
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
112
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
113 self.assertEqual('Voh', cat['foo'].string)
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
114 self.assertEqual(True, cat['foo'].fuzzy)
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
115
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
116 def test_update_without_fuzzy_matching(self):
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
117 cat = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
118 cat.add('fo', 'Voh')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
119 cat.add('bar', 'Bahr')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
120 tmpl = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
121 tmpl.add('foo')
202
d3c272492053 Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents: 183
diff changeset
122 cat.update(tmpl, no_fuzzy_matching=True)
183
e927dffc9ab4 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 167
diff changeset
123 self.assertEqual(2, len(cat.obsolete))
167
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
124
71
b260ffa01a2d Message catalogs can have multiple messages with the same ID, where some of them have plural strings, and others don't. Still the same message.
cmlenz
parents: 69
diff changeset
125
58
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
126 def suite():
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
127 suite = unittest.TestSuite()
69
1d8e81bfedf9 Enhance catalog to also manage the MIME headers.
cmlenz
parents: 58
diff changeset
128 suite.addTest(doctest.DocTestSuite(catalog, optionflags=doctest.ELLIPSIS))
58
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
129 suite.addTest(unittest.makeSuite(MessageTestCase))
71
b260ffa01a2d Message catalogs can have multiple messages with the same ID, where some of them have plural strings, and others don't. Still the same message.
cmlenz
parents: 69
diff changeset
130 suite.addTest(unittest.makeSuite(CatalogTestCase))
58
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
131 return suite
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
132
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
133 if __name__ == '__main__':
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
134 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software