annotate babel/messages/tests/catalog.py @ 421:cadc2f937a78

Testcase for fix of #148.
author palgarvio
date Tue, 16 Dec 2008 13:35:23 +0000
parents 1b78b747b386
children d07989336794
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
421
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
14 import copy
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
15 import datetime
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
16 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
17 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
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 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
20
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 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
23
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
24 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
25 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
26 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
27 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
28 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
29 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
30 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
31 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
32 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
33 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
34 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
35 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
36 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
37 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
38 assert catalog.PYTHON_FORMAT.search('foo %(name)*.*f')
360
36408f068138 Message.clone doesn't return a shallow copy any longer. This fixes a bug with update where flags where shared.
aronacher
parents: 352
diff changeset
39 assert catalog.PYTHON_FORMAT.search('foo %()s')
107
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
40
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 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
42 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
43 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
44 mess = catalog.Message('foo',
107
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
45 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
46 'Comment 2 About `foo`'])
107
4b42e23644e5 `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 97
diff changeset
47 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
48 '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
49
360
36408f068138 Message.clone doesn't return a shallow copy any longer. This fixes a bug with update where flags where shared.
aronacher
parents: 352
diff changeset
50 def test_clone_message_object(self):
36408f068138 Message.clone doesn't return a shallow copy any longer. This fixes a bug with update where flags where shared.
aronacher
parents: 352
diff changeset
51 msg = catalog.Message('foo', locations=[('foo.py', 42)])
36408f068138 Message.clone doesn't return a shallow copy any longer. This fixes a bug with update where flags where shared.
aronacher
parents: 352
diff changeset
52 clone = msg.clone()
36408f068138 Message.clone doesn't return a shallow copy any longer. This fixes a bug with update where flags where shared.
aronacher
parents: 352
diff changeset
53 clone.locations.append(('bar.py', 42))
36408f068138 Message.clone doesn't return a shallow copy any longer. This fixes a bug with update where flags where shared.
aronacher
parents: 352
diff changeset
54 self.assertEqual(msg.locations, [('foo.py', 42)])
361
1b78b747b386 Updated catalog test case for last commit, flags are now tested too in the clone test case.
aronacher
parents: 360
diff changeset
55 msg.flags.add('fuzzy')
1b78b747b386 Updated catalog test case for last commit, flags are now tested too in the clone test case.
aronacher
parents: 360
diff changeset
56 assert not clone.fuzzy and msg.fuzzy
360
36408f068138 Message.clone doesn't return a shallow copy any longer. This fixes a bug with update where flags where shared.
aronacher
parents: 352
diff changeset
57
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
58
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
59 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
60
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
61 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
62 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
63 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
64 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
65 self.assertEqual(1, len(cat))
97
debd9ac3bb4d Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents: 91
diff changeset
66
229
85340bec3a97 Fix tests broken by [233], and add new tests.
cmlenz
parents: 227
diff changeset
67 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
68 cat = catalog.Catalog()
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
69 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
70 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
71 self.assertEqual(['A comment', 'Another comment'],
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
72 cat['foo'].auto_comments)
229
85340bec3a97 Fix tests broken by [233], and add new tests.
cmlenz
parents: 227
diff changeset
73
85340bec3a97 Fix tests broken by [233], and add new tests.
cmlenz
parents: 227
diff changeset
74 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
75 cat = catalog.Catalog()
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
76 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
77 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
78 self.assertEqual(['A comment', 'Another comment'],
aaf36f409166 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 229
diff changeset
79 cat['foo'].user_comments)
229
85340bec3a97 Fix tests broken by [233], and add new tests.
cmlenz
parents: 227
diff changeset
80
232
1448b500de40 Forgot to update test method name after copy/paste.
cmlenz
parents: 231
diff changeset
81 def test_duplicate_location(self):
231
fc8b8c2bba53 Remove duplicate locations of catalog messages.
cmlenz
parents: 230
diff changeset
82 cat = catalog.Catalog()
fc8b8c2bba53 Remove duplicate locations of catalog messages.
cmlenz
parents: 230
diff changeset
83 cat.add('foo', locations=[('foo.py', 1)])
fc8b8c2bba53 Remove duplicate locations of catalog messages.
cmlenz
parents: 230
diff changeset
84 cat.add('foo', locations=[('foo.py', 1)])
fc8b8c2bba53 Remove duplicate locations of catalog messages.
cmlenz
parents: 230
diff changeset
85 self.assertEqual([('foo.py', 1)], cat['foo'].locations)
fc8b8c2bba53 Remove duplicate locations of catalog messages.
cmlenz
parents: 230
diff changeset
86
279
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
87 def test_update_message_changed_to_plural(self):
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
88 cat = catalog.Catalog()
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
89 cat.add(u'foo', u'Voh')
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
90 tmpl = catalog.Catalog()
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
91 tmpl.add((u'foo', u'foos'))
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
92 cat.update(tmpl)
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
93 self.assertEqual((u'Voh', ''), cat['foo'].string)
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
94 assert cat['foo'].fuzzy
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
95
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
96 def test_update_message_changed_to_simple(self):
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
97 cat = catalog.Catalog()
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
98 cat.add((u'foo' u'foos'), (u'Voh', u'Vöhs'))
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
99 tmpl = catalog.Catalog()
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
100 tmpl.add(u'foo')
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
101 cat.update(tmpl)
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
102 self.assertEqual(u'Voh', cat['foo'].string)
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
103 assert cat['foo'].fuzzy
3308e9971fab Fix for updating catalog messages that changed from gettext to ngettext or vice versa.
cmlenz
parents: 232
diff changeset
104
91
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
105 def test_update_message_updates_comments(self):
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
106 cat = catalog.Catalog()
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
107 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
108 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
109 self.assertEqual(cat[u'foo'].user_comments, [])
91
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
110 # 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
111 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
112 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
113 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
114 # now add yet another location with another comment
f517ad70d8fc Unittest for the problem reported by pjenvey fixed on [88].
palgarvio
parents: 82
diff changeset
115 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
116 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
117 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
118
167
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
119 def test_update_fuzzy_matching_with_case_change(self):
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
120 cat = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
121 cat.add('foo', 'Voh')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
122 cat.add('bar', 'Bahr')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
123 tmpl = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
124 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
125 cat.update(tmpl)
e927dffc9ab4 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 167
diff changeset
126 self.assertEqual(1, len(cat.obsolete))
167
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
127 assert 'foo' not in cat
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
128
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
129 self.assertEqual('Voh', cat['Foo'].string)
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
130 self.assertEqual(True, cat['Foo'].fuzzy)
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
131
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
132 def test_update_fuzzy_matching_with_char_change(self):
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
133 cat = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
134 cat.add('fo', 'Voh')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
135 cat.add('bar', 'Bahr')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
136 tmpl = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
137 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
138 cat.update(tmpl)
e927dffc9ab4 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 167
diff changeset
139 self.assertEqual(1, len(cat.obsolete))
167
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
140 assert 'fo' not in cat
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
141
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
142 self.assertEqual('Voh', cat['foo'].string)
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
143 self.assertEqual(True, cat['foo'].fuzzy)
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
144
314
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
145 def test_update_fuzzy_matching_no_msgstr(self):
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
146 cat = catalog.Catalog()
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
147 cat.add('fo', '')
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
148 tmpl = catalog.Catalog()
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
149 tmpl.add('fo')
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
150 tmpl.add('foo')
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
151 cat.update(tmpl)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
152 assert 'fo' in cat
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
153 assert 'foo' in cat
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
154
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
155 self.assertEqual('', cat['fo'].string)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
156 self.assertEqual(False, cat['fo'].fuzzy)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
157 self.assertEqual(None, cat['foo'].string)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
158 self.assertEqual(False, cat['foo'].fuzzy)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
159
352
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
160 def test_update_fuzzy_matching_with_new_context(self):
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
161 cat = catalog.Catalog()
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
162 cat.add('foo', 'Voh')
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
163 cat.add('bar', 'Bahr')
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
164 tmpl = catalog.Catalog()
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
165 tmpl.add('Foo', context='Menu')
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
166 cat.update(tmpl)
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
167 self.assertEqual(1, len(cat.obsolete))
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
168 assert 'foo' not in cat
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
169
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
170 message = cat.get('Foo', 'Menu')
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
171 self.assertEqual('Voh', message.string)
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
172 self.assertEqual(True, message.fuzzy)
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
173 self.assertEqual('Menu', message.context)
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
174
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
175 def test_update_fuzzy_matching_with_changed_context(self):
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
176 cat = catalog.Catalog()
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
177 cat.add('foo', 'Voh', context='Menu|File')
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
178 cat.add('bar', 'Bahr', context='Menu|File')
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
179 tmpl = catalog.Catalog()
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
180 tmpl.add('Foo', context='Menu|Edit')
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
181 cat.update(tmpl)
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
182 self.assertEqual(1, len(cat.obsolete))
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
183 assert cat.get('Foo', 'Menu|File') is None
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
184
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
185 message = cat.get('Foo', 'Menu|Edit')
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
186 self.assertEqual('Voh', message.string)
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
187 self.assertEqual(True, message.fuzzy)
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
188 self.assertEqual('Menu|Edit', message.context)
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
189
314
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
190 def test_update_fuzzy_matching_no_cascading(self):
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
191 cat = catalog.Catalog()
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
192 cat.add('fo', 'Voh')
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
193 cat.add('foo', 'Vohe')
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
194 tmpl = catalog.Catalog()
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
195 tmpl.add('fo')
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
196 tmpl.add('foo')
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
197 tmpl.add('fooo')
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
198 cat.update(tmpl)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
199 assert 'fo' in cat
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
200 assert 'foo' in cat
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
201
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
202 self.assertEqual('Voh', cat['fo'].string)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
203 self.assertEqual(False, cat['fo'].fuzzy)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
204 self.assertEqual('Vohe', cat['foo'].string)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
205 self.assertEqual(False, cat['foo'].fuzzy)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
206 self.assertEqual('Vohe', cat['fooo'].string)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
207 self.assertEqual(True, cat['fooo'].fuzzy)
5c0bda4f20b1 Fix catalog updating with fuzzy matches. Closes #82.
cmlenz
parents: 279
diff changeset
208
167
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
209 def test_update_without_fuzzy_matching(self):
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
210 cat = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
211 cat.add('fo', 'Voh')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
212 cat.add('bar', 'Bahr')
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
213 tmpl = catalog.Catalog()
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
214 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
215 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
216 self.assertEqual(2, len(cat.obsolete))
167
533baef258bb Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents: 113
diff changeset
217
315
654b632e5482 Merging catalogs would sometimes mix translations from different runs.
cmlenz
parents: 314
diff changeset
218 def test_update_no_template_mutation(self):
654b632e5482 Merging catalogs would sometimes mix translations from different runs.
cmlenz
parents: 314
diff changeset
219 tmpl = catalog.Catalog()
654b632e5482 Merging catalogs would sometimes mix translations from different runs.
cmlenz
parents: 314
diff changeset
220 tmpl.add('foo')
654b632e5482 Merging catalogs would sometimes mix translations from different runs.
cmlenz
parents: 314
diff changeset
221 cat1 = catalog.Catalog()
654b632e5482 Merging catalogs would sometimes mix translations from different runs.
cmlenz
parents: 314
diff changeset
222 cat1.add('foo', 'Voh')
654b632e5482 Merging catalogs would sometimes mix translations from different runs.
cmlenz
parents: 314
diff changeset
223 cat1.update(tmpl)
654b632e5482 Merging catalogs would sometimes mix translations from different runs.
cmlenz
parents: 314
diff changeset
224 cat2 = catalog.Catalog()
654b632e5482 Merging catalogs would sometimes mix translations from different runs.
cmlenz
parents: 314
diff changeset
225 cat2.update(tmpl)
654b632e5482 Merging catalogs would sometimes mix translations from different runs.
cmlenz
parents: 314
diff changeset
226
654b632e5482 Merging catalogs would sometimes mix translations from different runs.
cmlenz
parents: 314
diff changeset
227 self.assertEqual(None, cat2['foo'].string)
654b632e5482 Merging catalogs would sometimes mix translations from different runs.
cmlenz
parents: 314
diff changeset
228 self.assertEqual(False, cat2['foo'].fuzzy)
421
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
229
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
230 def test_update_po_updates_pot_creation_date(self):
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
231 template = catalog.Catalog()
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
232 localized_catalog = copy.deepcopy(template)
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
233 localized_catalog.locale = 'de_DE'
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
234 self.assertNotEqual(template.mime_headers,
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
235 localized_catalog.mime_headers)
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
236 self.assertEqual(template.creation_date,
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
237 localized_catalog.creation_date)
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
238 template.creation_date = datetime.datetime.now() - \
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
239 datetime.timedelta(minutes=5)
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
240 localized_catalog.update(template)
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
241 self.assertEqual(template.creation_date,
cadc2f937a78 Testcase for fix of #148.
palgarvio
parents: 361
diff changeset
242 localized_catalog.creation_date)
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
243
352
90849c44c531 More work on msgctxt support (#54).
cmlenz
parents: 315
diff changeset
244
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
245 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
246 suite = unittest.TestSuite()
69
1d8e81bfedf9 Enhance catalog to also manage the MIME headers.
cmlenz
parents: 58
diff changeset
247 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
248 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
249 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
250 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
251
068952b4d4c0 Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
diff changeset
252 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
253 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software