annotate babel/messages/tests/pofile.py @ 228:fd29fabdc986

Follow-up to [239]: also combine duplicate comments when writing PO files.
author cmlenz
date Fri, 20 Jul 2007 16:47:08 +0000
parents e50aaaabb3d3
children 00960ab0a631
rev   line source
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
2 #
12
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 1
diff changeset
3 # Copyright (C) 2007 Edgewall Software
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
4 # All rights reserved.
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
5 #
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
8 # are also available at http://babel.edgewall.org/wiki/License.
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
9 #
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
10 # This software consists of voluntary contributions made by many
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
11 # individuals. For the exact contribution history, see the revision
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
12 # history and logs, available at http://babel.edgewall.org/log/.
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
13
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
14 from datetime import datetime
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
15 import doctest
24
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
16 from StringIO import StringIO
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
17 import unittest
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
18
181
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
19 from babel.messages.catalog import Catalog, Message
54
b3395b285104 Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents: 51
diff changeset
20 from babel.messages import pofile
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
21
17
6aa4c4df8871 Recognize python-format messages also for unnamed parameters.
cmlenz
parents: 12
diff changeset
22
106
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
23 class ReadPoTestCase(unittest.TestCase):
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
24
196
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
25 def test_preserve_locale(self):
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
26 buf = StringIO(r'''msgid "foo"
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
27 msgstr "Voh"''')
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
28 catalog = pofile.read_po(buf, locale='en_US')
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
29 self.assertEqual('en_US', catalog.locale)
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
30
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
31 def test_preserve_domain(self):
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
32 buf = StringIO(r'''msgid "foo"
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
33 msgstr "Voh"''')
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
34 catalog = pofile.read_po(buf, domain='mydomain')
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
35 self.assertEqual('mydomain', catalog.domain)
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
36
106
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
37 def test_read_multiline(self):
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
38 buf = StringIO(r'''msgid ""
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
39 "Here's some text that\n"
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
40 "includesareallylongwordthatmightbutshouldnt"
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
41 " throw us into an infinite "
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
42 "loop\n"
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
43 msgstr ""''')
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
44 catalog = pofile.read_po(buf)
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
45 self.assertEqual(1, len(catalog))
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
46 message = list(catalog)[1]
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
47 self.assertEqual("Here's some text that\nincludesareallylongwordthat"
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
48 "mightbutshouldnt throw us into an infinite loop\n",
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
49 message.id)
196
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
50
175
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
51 def test_fuzzy_header(self):
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
52 buf = StringIO(r'''\
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
53 # Translations template for AReallyReallyLongNameForAProject.
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
54 # Copyright (C) 2007 ORGANIZATION
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
55 # This file is distributed under the same license as the
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
56 # AReallyReallyLongNameForAProject project.
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
57 # FIRST AUTHOR <EMAIL@ADDRESS>, 2007.
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
58 #
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
59 #, fuzzy
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
60 ''')
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
61 catalog = pofile.read_po(buf)
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
62 self.assertEqual(1, len(list(catalog)))
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
63 self.assertEqual(True, list(catalog)[0].fuzzy)
196
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
64
175
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
65 def test_not_fuzzy_header(self):
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
66 buf = StringIO(r'''\
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
67 # Translations template for AReallyReallyLongNameForAProject.
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
68 # Copyright (C) 2007 ORGANIZATION
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
69 # This file is distributed under the same license as the
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
70 # AReallyReallyLongNameForAProject project.
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
71 # FIRST AUTHOR <EMAIL@ADDRESS>, 2007.
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
72 #
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
73 ''')
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
74 catalog = pofile.read_po(buf)
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
75 self.assertEqual(1, len(list(catalog)))
3c4718fb7435 Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents: 106
diff changeset
76 self.assertEqual(False, list(catalog)[0].fuzzy)
106
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
77
199
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
78 def test_obsolete_message(self):
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
79 buf = StringIO(r'''# This is an obsolete message
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
80 #~ msgid "foo"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
81 #~ msgstr "Voh"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
82
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
83 # This message is not obsolete
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
84 #: main.py:1
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
85 msgid "bar"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
86 msgstr "Bahr"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
87 ''')
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
88 catalog = pofile.read_po(buf)
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
89 self.assertEqual(1, len(catalog))
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
90 self.assertEqual(1, len(catalog.obsolete))
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
91 message = catalog.obsolete[u'foo']
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
92 self.assertEqual(u'foo', message.id)
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
93 self.assertEqual(u'Voh', message.string)
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
94 self.assertEqual(['This is an obsolete message'], message.user_comments)
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
95
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
96 def test_obsolete_message_ignored(self):
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
97 buf = StringIO(r'''# This is an obsolete message
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
98 #~ msgid "foo"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
99 #~ msgstr "Voh"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
100
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
101 # This message is not obsolete
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
102 #: main.py:1
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
103 msgid "bar"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
104 msgstr "Bahr"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
105 ''')
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
106 catalog = pofile.read_po(buf, ignore_obsolete=True)
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
107 self.assertEqual(1, len(catalog))
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
108 self.assertEqual(0, len(catalog.obsolete))
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
109
106
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
110
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
111 class WritePoTestCase(unittest.TestCase):
24
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
112
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
113 def test_join_locations(self):
56
27fba894d3ca Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
114 catalog = Catalog()
27fba894d3ca Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
115 catalog.add(u'foo', locations=[('main.py', 1)])
27fba894d3ca Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
116 catalog.add(u'foo', locations=[('utils.py', 3)])
24
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
117 buf = StringIO()
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
118 pofile.write_po(buf, catalog, omit_header=True)
24
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
119 self.assertEqual('''#: main.py:1 utils.py:3
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
120 msgid "foo"
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
121 msgstr ""''', buf.getvalue().strip())
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
122
228
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
123 def test_duplicate_comments(self):
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
124 catalog = Catalog()
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
125 catalog.add(u'foo', auto_comments=['A comment'])
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
126 catalog.add(u'foo', auto_comments=['A comment'])
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
127 buf = StringIO()
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
128 pofile.write_po(buf, catalog, omit_header=True)
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
129 self.assertEqual('''#. A comment
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
130 msgid "foo"
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
131 msgstr ""''', buf.getvalue().strip())
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
132
24
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
133 def test_wrap_long_lines(self):
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
134 text = """Here's some text where
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
135 white space and line breaks matter, and should
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
136
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
137 not be removed
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
138
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
139 """
56
27fba894d3ca Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
140 catalog = Catalog()
27fba894d3ca Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
141 catalog.add(text, locations=[('main.py', 1)])
24
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
142 buf = StringIO()
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
143 pofile.write_po(buf, catalog, no_location=True, omit_header=True,
56
27fba894d3ca Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
144 width=42)
24
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
145 self.assertEqual(r'''msgid ""
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
146 "Here's some text where \n"
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
147 "white space and line breaks matter, and"
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
148 " should\n"
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
149 "\n"
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
150 "not be removed\n"
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
151 "\n"
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
152 msgstr ""''', buf.getvalue().strip())
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
153
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
154 def test_wrap_long_lines_with_long_word(self):
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
155 text = """Here's some text that
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
156 includesareallylongwordthatmightbutshouldnt throw us into an infinite loop
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
157 """
56
27fba894d3ca Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
158 catalog = Catalog()
27fba894d3ca Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
159 catalog.add(text, locations=[('main.py', 1)])
24
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
160 buf = StringIO()
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
161 pofile.write_po(buf, catalog, no_location=True, omit_header=True,
56
27fba894d3ca Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
162 width=32)
24
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
163 self.assertEqual(r'''msgid ""
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
164 "Here's some text that\n"
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
165 "includesareallylongwordthatmightbutshouldnt"
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
166 " throw us into an infinite "
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
167 "loop\n"
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
168 msgstr ""''', buf.getvalue().strip())
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
169
103
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
170 def test_wrap_long_lines_in_header(self):
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
171 """
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
172 Verify that long lines in the header comment are wrapped correctly.
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
173 """
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
174 catalog = Catalog(project='AReallyReallyLongNameForAProject',
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
175 revision_date=datetime(2007, 4, 1))
103
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
176 buf = StringIO()
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
177 pofile.write_po(buf, catalog)
103
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
178 self.assertEqual('''\
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
179 # Translations template for AReallyReallyLongNameForAProject.
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
180 # Copyright (C) 2007 ORGANIZATION
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
181 # This file is distributed under the same license as the
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
182 # AReallyReallyLongNameForAProject project.
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
183 # FIRST AUTHOR <EMAIL@ADDRESS>, 2007.
103
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
184 #
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
185 #, fuzzy''', '\n'.join(buf.getvalue().splitlines()[:7]))
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
186
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
187 def test_pot_with_translator_comments(self):
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
188 catalog = Catalog()
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
189 catalog.add(u'foo', locations=[('main.py', 1)],
105
f744dd56573d `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
190 auto_comments=['Comment About `foo`'])
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
191 catalog.add(u'bar', locations=[('utils.py', 3)],
105
f744dd56573d `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
192 user_comments=['Comment About `bar` with',
f744dd56573d `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
193 'multiple lines.'])
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
194 buf = StringIO()
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
195 pofile.write_po(buf, catalog, omit_header=True)
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
196 self.assertEqual('''#. Comment About `foo`
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
197 #: main.py:1
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
198 msgid "foo"
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
199 msgstr ""
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
200
105
f744dd56573d `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
201 # Comment About `bar` with
f744dd56573d `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
202 # multiple lines.
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
203 #: utils.py:3
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
204 msgid "bar"
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 56
diff changeset
205 msgstr ""''', buf.getvalue().strip())
24
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
206
190
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
207 def test_po_with_obsolete_message(self):
181
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
208 catalog = Catalog()
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
209 catalog.add(u'foo', u'Voh', locations=[('main.py', 1)])
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
210 catalog.obsolete['bar'] = Message(u'bar', u'Bahr',
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
211 locations=[('utils.py', 3)],
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
212 user_comments=['User comment'])
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
213 buf = StringIO()
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
214 pofile.write_po(buf, catalog, omit_header=True)
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
215 self.assertEqual('''#: main.py:1
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
216 msgid "foo"
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
217 msgstr "Voh"
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
218
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
219 # User comment
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
220 #~ msgid "bar"
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
221 #~ msgstr "Bahr"''', buf.getvalue().strip())
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
222
190
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
223 def test_po_with_multiline_obsolete_message(self):
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
224 catalog = Catalog()
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
225 catalog.add(u'foo', u'Voh', locations=[('main.py', 1)])
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
226 msgid = r"""Here's a message that covers
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
227 multiple lines, and should still be handled
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
228 correctly.
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
229 """
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
230 msgstr = r"""Here's a message that covers
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
231 multiple lines, and should still be handled
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
232 correctly.
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
233 """
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
234 catalog.obsolete[msgid] = Message(msgid, msgstr,
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
235 locations=[('utils.py', 3)])
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
236 buf = StringIO()
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
237 pofile.write_po(buf, catalog, omit_header=True)
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
238 self.assertEqual(r'''#: main.py:1
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
239 msgid "foo"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
240 msgstr "Voh"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
241
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
242 #~ msgid ""
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
243 #~ "Here's a message that covers\n"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
244 #~ "multiple lines, and should still be handled\n"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
245 #~ "correctly.\n"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
246 #~ msgstr ""
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
247 #~ "Here's a message that covers\n"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
248 #~ "multiple lines, and should still be handled\n"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
249 #~ "correctly.\n"''', buf.getvalue().strip())
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
250
191
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
251 def test_po_with_obsolete_message_ignored(self):
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
252 catalog = Catalog()
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
253 catalog.add(u'foo', u'Voh', locations=[('main.py', 1)])
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
254 catalog.obsolete['bar'] = Message(u'bar', u'Bahr',
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
255 locations=[('utils.py', 3)],
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
256 user_comments=['User comment'])
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
257 buf = StringIO()
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
258 pofile.write_po(buf, catalog, omit_header=True, ignore_obsolete=True)
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
259 self.assertEqual('''#: main.py:1
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
260 msgid "foo"
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
261 msgstr "Voh"''', buf.getvalue().strip())
cf09490f22b3 Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents: 190
diff changeset
262
203
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
263 def test_po_with_previous_msgid(self):
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
264 catalog = Catalog()
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
265 catalog.add(u'foo', u'Voh', locations=[('main.py', 1)],
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
266 previous_id=u'fo')
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
267 buf = StringIO()
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
268 pofile.write_po(buf, catalog, omit_header=True, include_previous=True)
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
269 self.assertEqual('''#: main.py:1
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
270 #| msgid "fo"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
271 msgid "foo"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
272 msgstr "Voh"''', buf.getvalue().strip())
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
273
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
274 def test_po_with_previous_msgid_plural(self):
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
275 catalog = Catalog()
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
276 catalog.add((u'foo', u'foos'), (u'Voh', u'Voeh'),
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
277 locations=[('main.py', 1)], previous_id=(u'fo', u'fos'))
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
278 buf = StringIO()
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
279 pofile.write_po(buf, catalog, omit_header=True, include_previous=True)
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
280 self.assertEqual('''#: main.py:1
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
281 #| msgid "fo"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
282 #| msgid_plural "fos"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
283 msgid "foo"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
284 msgid_plural "foos"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
285 msgstr[0] "Voh"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
286 msgstr[1] "Voeh"''', buf.getvalue().strip())
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
287
24
4fad20ab7cca Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents: 17
diff changeset
288
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
289 def suite():
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
290 suite = unittest.TestSuite()
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
291 suite.addTest(doctest.DocTestSuite(pofile))
106
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
292 suite.addTest(unittest.makeSuite(ReadPoTestCase))
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
293 suite.addTest(unittest.makeSuite(WritePoTestCase))
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
294 return suite
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
295
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
296 if __name__ == '__main__':
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
297 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software