annotate babel/messages/tests/pofile.py @ 487:2d1c17275e5b stable-0.9.x

Merged revisions 484-489 via svnmerge from http://svn.edgewall.org/repos/babel/trunk ........ r484 | jruigrok | 2010-02-19 14:16:08 +0100 (vr, 19 feb 2010) | 4 lines Fix testcase name typo. Switch to use a locale that uses a different singular and plural form instead of just one form for both singular and plural. ........ r485 | jruigrok | 2010-02-19 14:38:24 +0100 (vr, 19 feb 2010) | 2 lines Add a test for a locale with one plural form. ........ r486 | jruigrok | 2010-02-19 14:45:25 +0100 (vr, 19 feb 2010) | 3 lines Put the square brackets test after all the normal plural tests. It's more logical. ........ r487 | jruigrok | 2010-02-19 15:12:41 +0100 (vr, 19 feb 2010) | 2 lines More than two plural forms work nowadays. Adjust the test. ........ r488 | jruigrok | 2010-02-19 15:15:56 +0100 (vr, 19 feb 2010) | 2 lines Actually make the msgid_plural be a plural as per typical use case. ........ r489 | jruigrok | 2010-02-24 13:27:32 +0100 (wo, 24 feb 2010) | 2 lines Forgot to bump the copyright line. ........
author jruigrok
date Sun, 11 Apr 2010 09:09:11 +0000
parents 2c6f5e610e86
children dbb70d75718a
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 #
448
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
3 # Copyright (C) 2007-2010 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
293
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
21 from babel.util import FixedOffsetTimezone, LOCALTZ
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
22
17
6aa4c4df8871 Recognize python-format messages also for unnamed parameters.
cmlenz
parents: 12
diff changeset
23
106
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
24 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
25
196
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
26 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
27 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
28 msgstr "Voh"''')
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
29 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
30 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
31
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
32 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
33 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
34 msgstr "Voh"''')
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
35 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
36 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
37
106
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
38 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
39 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
40 "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
41 "includesareallylongwordthatmightbutshouldnt"
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
42 " 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
43 "loop\n"
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
44 msgstr ""''')
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
45 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
46 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
47 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
48 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
49 "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
50 message.id)
196
93a922d31eca Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
51
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
52 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
53 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
54 # 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
55 # 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
56 # 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
57 # 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
58 # 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
59 #
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 #, 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
61 ''')
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 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
63 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
64 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
65
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
66 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
67 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
68 # 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
69 # 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
70 # 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
71 # 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
72 # 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
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 ''')
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 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
76 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
77 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
78
293
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
79 def test_header_entry(self):
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
80 buf = StringIO(r'''\
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
81 # SOME DESCRIPTIVE TITLE.
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
82 # Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
83 # This file is distributed under the same license as the PACKAGE package.
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
84 # FIRST AUTHOR <EMAIL@ADDRESS>, 2007.
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
85 #
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
86 #, fuzzy
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
87 msgid ""
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
88 msgstr ""
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
89 "Project-Id-Version: 3.15\n"
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
90 "Report-Msgid-Bugs-To: Fliegender Zirkus <fliegender@zirkus.de>\n"
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
91 "POT-Creation-Date: 2007-09-27 11:19+0700\n"
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
92 "PO-Revision-Date: 2007-09-27 21:42-0700\n"
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
93 "Last-Translator: John <cleese@bavaria.de>\n"
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
94 "Language-Team: German Lang <de@babel.org>\n"
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
95 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
96 "MIME-Version: 1.0\n"
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
97 "Content-Type: text/plain; charset=iso-8859-2\n"
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
98 "Content-Transfer-Encoding: 8bit\n"
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
99 "Generated-By: Babel 1.0dev-r313\n"
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
100 ''')
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
101 catalog = pofile.read_po(buf)
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
102 self.assertEqual(1, len(list(catalog)))
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
103 self.assertEqual(u'3.15', catalog.version)
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
104 self.assertEqual(u'Fliegender Zirkus <fliegender@zirkus.de>',
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
105 catalog.msgid_bugs_address)
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
106 self.assertEqual(datetime(2007, 9, 27, 11, 19,
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
107 tzinfo=FixedOffsetTimezone(7 * 60)),
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
108 catalog.creation_date)
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
109 self.assertEqual(u'John <cleese@bavaria.de>', catalog.last_translator)
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
110 self.assertEqual(u'German Lang <de@babel.org>', catalog.language_team)
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
111 self.assertEqual(u'iso-8859-2', catalog.charset)
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
112 self.assertEqual(True, list(catalog)[0].fuzzy)
e1c100327308 Merged revisions 321-323 via svnmerge from
pjenvey
parents: 249
diff changeset
113
199
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
114 def test_obsolete_message(self):
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
115 buf = StringIO(r'''# This is an obsolete message
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
116 #~ msgid "foo"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
117 #~ msgstr "Voh"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
118
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
119 # This message is not obsolete
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
120 #: main.py:1
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
121 msgid "bar"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
122 msgstr "Bahr"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
123 ''')
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
124 catalog = pofile.read_po(buf)
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
125 self.assertEqual(1, len(catalog))
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
126 self.assertEqual(1, len(catalog.obsolete))
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
127 message = catalog.obsolete[u'foo']
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
128 self.assertEqual(u'foo', message.id)
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
129 self.assertEqual(u'Voh', message.string)
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
130 self.assertEqual(['This is an obsolete message'], message.user_comments)
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
131
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
132 def test_obsolete_message_ignored(self):
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
133 buf = StringIO(r'''# This is an obsolete message
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
134 #~ msgid "foo"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
135 #~ msgstr "Voh"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
136
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
137 # This message is not obsolete
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
138 #: main.py:1
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
139 msgid "bar"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
140 msgstr "Bahr"
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
141 ''')
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
142 catalog = pofile.read_po(buf, ignore_obsolete=True)
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
143 self.assertEqual(1, len(catalog))
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
144 self.assertEqual(0, len(catalog.obsolete))
ace575fff5ac Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
145
487
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
146 def test_single_plural_form(self):
379
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
147 buf = StringIO(r'''msgid "foo"
487
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
148 msgid_plural "foos"
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
149 msgstr[0] "Voh"''')
379
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
150 catalog = pofile.read_po(buf, locale='ja_JP')
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
151 self.assertEqual(1, len(catalog))
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
152 self.assertEqual(1, catalog.num_plurals)
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
153 message = catalog['foo']
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
154 self.assertEqual(1, len(message.string))
487
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
155
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
156 def test_singular_plural_form(self):
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
157 buf = StringIO(r'''msgid "foo"
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
158 msgid_plural "foos"
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
159 msgstr[0] "Voh"
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
160 msgstr[1] "Vohs"''')
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
161 catalog = pofile.read_po(buf, locale='nl_NL')
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
162 self.assertEqual(1, len(catalog))
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
163 self.assertEqual(2, catalog.num_plurals)
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
164 message = catalog['foo']
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
165 self.assertEqual(2, len(message.string))
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
166
379
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
167 def test_more_than_two_plural_forms(self):
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
168 buf = StringIO(r'''msgid "foo"
487
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
169 msgid_plural "foos"
379
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
170 msgstr[0] "Voh"
487
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
171 msgstr[1] "Vohs"
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
172 msgstr[2] "Vohss"''')
379
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
173 catalog = pofile.read_po(buf, locale='lv_LV')
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
174 self.assertEqual(1, len(catalog))
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
175 self.assertEqual(3, catalog.num_plurals)
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
176 message = catalog['foo']
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
177 self.assertEqual(3, len(message.string))
487
2d1c17275e5b Merged revisions 484-489 via svnmerge from
jruigrok
parents: 476
diff changeset
178 self.assertEqual(u'Vohss', message.string[2])
379
1c0915da48c6 Ported [407:415/trunk] back to 0.9.x branch.
cmlenz
parents: 369
diff changeset
179
448
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
180 def test_plural_with_square_brackets(self):
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
181 buf = StringIO(r'''msgid "foo"
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
182 msgid_plural "foos"
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
183 msgstr[0] "Voh [text]"
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
184 msgstr[1] "Vohs [text]"''')
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
185 catalog = pofile.read_po(buf, locale='nb_NO')
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
186 self.assertEqual(1, len(catalog))
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
187 self.assertEqual(2, catalog.num_plurals)
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
188 message = catalog['foo']
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
189 self.assertEqual(2, len(message.string))
c6babc3bbc10 Backport r483. This fixes messages containing square brackets from failing
jruigrok
parents: 379
diff changeset
190
106
9b22b36066f6 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
191
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
192 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
193
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
194 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
195 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
196 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
197 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
198 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
199 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
200 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
201 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
202 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
203
228
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
204 def test_duplicate_comments(self):
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
205 catalog = Catalog()
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
206 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
207 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
208 buf = StringIO()
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
209 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
210 self.assertEqual('''#. A comment
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
211 msgid "foo"
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
212 msgstr ""''', buf.getvalue().strip())
fd29fabdc986 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
213
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
214 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
215 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
216 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
217
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
218 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
219
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
220 """
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
221 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
222 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
223 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
224 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
225 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
226 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
227 "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
228 "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
229 " 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
230 "\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
231 "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
232 "\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
233 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
234
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
235 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
236 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
237 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
238 """
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
239 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
240 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
241 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
242 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
243 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
244 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
245 "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
246 "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
247 " 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
248 "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
249 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
250
103
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
251 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
252 """
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
253 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
254 """
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
255 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
256 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
257 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
258 pofile.write_po(buf, catalog)
103
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
259 self.assertEqual('''\
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
260 # Translations template for AReallyReallyLongNameForAProject.
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
261 # Copyright (C) 2007 ORGANIZATION
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
262 # 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
263 # 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
264 # FIRST AUTHOR <EMAIL@ADDRESS>, 2007.
103
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
265 #
7cdf89eb9007 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
266 #, 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
267
316
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
268 def test_wrap_locations_with_hyphens(self):
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
269 catalog = Catalog()
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
270 catalog.add(u'foo', locations=[
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
271 ('doupy/templates/base/navmenu.inc.html.py', 60)
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
272 ])
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
273 catalog.add(u'foo', locations=[
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
274 ('doupy/templates/job-offers/helpers.html', 22)
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
275 ])
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
276 buf = StringIO()
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
277 pofile.write_po(buf, catalog, omit_header=True)
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
278 self.assertEqual('''#: doupy/templates/base/navmenu.inc.html.py:60
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
279 #: doupy/templates/job-offers/helpers.html:22
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
280 msgid "foo"
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
281 msgstr ""''', buf.getvalue().strip())
476
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
282
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
283 def test_no_wrap_and_width_behaviour_on_comments(self):
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
284 catalog = Catalog()
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
285 catalog.add("Pretty dam long message id, which must really be big "
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
286 "to test this wrap behaviour, if not it won't work.",
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
287 locations=[("fake.py", n) for n in range(1, 30)])
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
288 buf = StringIO()
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
289 pofile.write_po(buf, catalog, width=None, omit_header=True)
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
290 self.assertEqual("""\
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
291 #: fake.py:1 fake.py:2 fake.py:3 fake.py:4 fake.py:5 fake.py:6 fake.py:7
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
292 #: fake.py:8 fake.py:9 fake.py:10 fake.py:11 fake.py:12 fake.py:13 fake.py:14
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
293 #: fake.py:15 fake.py:16 fake.py:17 fake.py:18 fake.py:19 fake.py:20 fake.py:21
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
294 #: fake.py:22 fake.py:23 fake.py:24 fake.py:25 fake.py:26 fake.py:27 fake.py:28
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
295 #: fake.py:29
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
296 msgid "pretty dam long message id, which must really be big to test this wrap behaviour, if not it won't work."
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
297 msgstr ""
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
298
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
299 """, buf.getvalue().lower())
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
300 buf = StringIO()
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
301 pofile.write_po(buf, catalog, width=100, omit_header=True)
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
302 self.assertEqual("""\
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
303 #: fake.py:1 fake.py:2 fake.py:3 fake.py:4 fake.py:5 fake.py:6 fake.py:7 fake.py:8 fake.py:9 fake.py:10
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
304 #: fake.py:11 fake.py:12 fake.py:13 fake.py:14 fake.py:15 fake.py:16 fake.py:17 fake.py:18 fake.py:19
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
305 #: fake.py:20 fake.py:21 fake.py:22 fake.py:23 fake.py:24 fake.py:25 fake.py:26 fake.py:27 fake.py:28
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
306 #: fake.py:29
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
307 msgid ""
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
308 "pretty dam long message id, which must really be big to test this wrap behaviour, if not it won't"
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
309 " work."
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
310 msgstr ""
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
311
2c6f5e610e86 Merged revisions 465 via svnmerge from
jruigrok
parents: 448
diff changeset
312 """, buf.getvalue().lower())
316
3d67cf6d8022 Ported [349] to 0.9.x branch.
cmlenz
parents: 293
diff changeset
313
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
314 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
315 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
316 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
317 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
318 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
319 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
320 '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
321 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
322 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
323 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
324 #: 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
325 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
326 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
327
105
f744dd56573d `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
328 # Comment About `bar` with
f744dd56573d `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
329 # 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
330 #: 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
331 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
332 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
333
190
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
334 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
335 catalog = Catalog()
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
336 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
337 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
338 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
339 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
340 buf = StringIO()
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
341 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
342 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
343 msgid "foo"
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
344 msgstr "Voh"
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
345
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
346 # User comment
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
347 #~ msgid "bar"
9a1acb41e7dd The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
348 #~ 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
349
190
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
350 def test_po_with_multiline_obsolete_message(self):
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
351 catalog = Catalog()
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
352 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
353 msgid = r"""Here's a message that covers
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
354 multiple lines, and should still be handled
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
355 correctly.
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
356 """
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
357 msgstr = r"""Here's a message that covers
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
358 multiple lines, and should still be handled
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
359 correctly.
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
360 """
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
361 catalog.obsolete[msgid] = Message(msgid, msgstr,
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
362 locations=[('utils.py', 3)])
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
363 buf = StringIO()
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
364 pofile.write_po(buf, catalog, omit_header=True)
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
365 self.assertEqual(r'''#: main.py:1
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
366 msgid "foo"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
367 msgstr "Voh"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
368
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
369 #~ msgid ""
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
370 #~ "Here's a message that covers\n"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
371 #~ "multiple lines, and should still be handled\n"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
372 #~ "correctly.\n"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
373 #~ msgstr ""
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
374 #~ "Here's a message that covers\n"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
375 #~ "multiple lines, and should still be handled\n"
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
376 #~ "correctly.\n"''', buf.getvalue().strip())
84193e6612f8 Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
377
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
378 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
379 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
380 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
381 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
382 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
383 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
384 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
385 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
386 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
387 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
388 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
389
203
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
390 def test_po_with_previous_msgid(self):
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
391 catalog = Catalog()
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
392 catalog.add(u'foo', u'Voh', locations=[('main.py', 1)],
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
393 previous_id=u'fo')
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
394 buf = StringIO()
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
395 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
396 self.assertEqual('''#: main.py:1
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
397 #| msgid "fo"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
398 msgid "foo"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
399 msgstr "Voh"''', buf.getvalue().strip())
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
400
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
401 def test_po_with_previous_msgid_plural(self):
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
402 catalog = Catalog()
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
403 catalog.add((u'foo', u'foos'), (u'Voh', u'Voeh'),
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
404 locations=[('main.py', 1)], previous_id=(u'fo', u'fos'))
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
405 buf = StringIO()
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
406 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
407 self.assertEqual('''#: main.py:1
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
408 #| msgid "fo"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
409 #| msgid_plural "fos"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
410 msgid "foo"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
411 msgid_plural "foos"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
412 msgstr[0] "Voh"
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
413 msgstr[1] "Voeh"''', buf.getvalue().strip())
e50aaaabb3d3 Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
414
249
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
415 def test_sorted_po(self):
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
416 catalog = Catalog()
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
417 catalog.add(u'bar', locations=[('utils.py', 3)],
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
418 user_comments=['Comment About `bar` with',
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
419 'multiple lines.'])
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
420 catalog.add((u'foo', u'foos'), (u'Voh', u'Voeh'),
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
421 locations=[('main.py', 1)])
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
422 buf = StringIO()
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
423 pofile.write_po(buf, catalog, sort_output=True)
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
424 value = buf.getvalue().strip()
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
425 assert '''\
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
426 # Comment About `bar` with
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
427 # multiple lines.
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
428 #: utils.py:3
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
429 msgid "bar"
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
430 msgstr ""
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
431
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
432 #: main.py:1
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
433 msgid "foo"
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
434 msgid_plural "foos"
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
435 msgstr[0] "Voh"
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
436 msgstr[1] "Voeh"''' in value
00960ab0a631 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
437 assert value.find('msgid ""') < value.find('msgid "bar"') < value.find('msgid "foo"')
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
438
369
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
439 def test_silent_location_fallback(self):
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
440 buf = StringIO('''\
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
441 #: broken_file.py
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
442 msgid "missing line number"
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
443 msgstr ""
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
444
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
445 #: broken_file.py:broken_line_number
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
446 msgid "broken line number"
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
447 msgstr ""''')
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
448 catalog = pofile.read_po(buf)
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
449 self.assertEqual(catalog['missing line number'].locations, [])
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
450 self.assertEqual(catalog['broken line number'].locations, [])
c2ae38340540 Ported [388:405/trunk] to 0.9.x branch.
cmlenz
parents: 316
diff changeset
451
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
452 def suite():
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
453 suite = unittest.TestSuite()
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
454 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
455 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
456 suite.addTest(unittest.makeSuite(WritePoTestCase))
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
457 return suite
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
458
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
459 if __name__ == '__main__':
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
460 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software