annotate babel/messages/tests/pofile.py @ 377:d0ee047cd3ae trunk

Use item access to catalog messages in tests, so that they can be easily ported back to the 0.9.x branch.
author cmlenz
date Tue, 08 Jul 2008 20:50:07 +0000
parents bc18179832b7
children fcde0f2ff278
rev   line source
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
2 #
335
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
3 # Copyright (C) 2007-2008 Edgewall Software
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
4 # All rights reserved.
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
5 #
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
8 # are also available at http://babel.edgewall.org/wiki/License.
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
9 #
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
10 # This software consists of voluntary contributions made by many
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
11 # individuals. For the exact contribution history, see the revision
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
12 # history and logs, available at http://babel.edgewall.org/log/.
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
13
104
395704fda00b 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
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
15 import doctest
24
b09e90803d1b 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
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
17 import unittest
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
18
181
8a762ce37bf7 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
7dbcbc3f07e0 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
291
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
21 from babel.util import FixedOffsetTimezone, LOCALTZ
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
22
17
55e22bc56f0c Recognize python-format messages also for unnamed parameters.
cmlenz
parents: 12
diff changeset
23
106
2cd83f77cc98 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):
2cd83f77cc98 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
25
196
b38a6b220ea2 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):
b38a6b220ea2 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"
b38a6b220ea2 Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
28 msgstr "Voh"''')
b38a6b220ea2 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')
b38a6b220ea2 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)
b38a6b220ea2 Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
31
b38a6b220ea2 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):
b38a6b220ea2 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"
b38a6b220ea2 Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
34 msgstr "Voh"''')
b38a6b220ea2 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')
b38a6b220ea2 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)
b38a6b220ea2 Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
37
106
2cd83f77cc98 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):
2cd83f77cc98 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 ""
2cd83f77cc98 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"
2cd83f77cc98 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
41 "includesareallylongwordthatmightbutshouldnt"
2cd83f77cc98 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 "
2cd83f77cc98 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
43 "loop\n"
2cd83f77cc98 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
44 msgstr ""''')
2cd83f77cc98 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)
2cd83f77cc98 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))
2cd83f77cc98 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]
2cd83f77cc98 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"
2cd83f77cc98 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",
2cd83f77cc98 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
b38a6b220ea2 Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
51
175
5d32098d8352 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):
5d32098d8352 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'''\
5d32098d8352 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.
5d32098d8352 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
5d32098d8352 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
5d32098d8352 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.
5d32098d8352 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.
5d32098d8352 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 #
5d32098d8352 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
5d32098d8352 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 ''')
5d32098d8352 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)
5d32098d8352 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)))
5d32098d8352 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
b38a6b220ea2 Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents: 191
diff changeset
65
175
5d32098d8352 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):
5d32098d8352 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'''\
5d32098d8352 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.
5d32098d8352 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
5d32098d8352 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
5d32098d8352 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.
5d32098d8352 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.
5d32098d8352 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 #
5d32098d8352 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 ''')
5d32098d8352 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)
5d32098d8352 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)))
5d32098d8352 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
2cd83f77cc98 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
78
291
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
79 def test_header_entry(self):
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
80 buf = StringIO(r'''\
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
81 # SOME DESCRIPTIVE TITLE.
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
82 # Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
83 # This file is distributed under the same license as the PACKAGE package.
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
84 # FIRST AUTHOR <EMAIL@ADDRESS>, 2007.
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
85 #
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
86 #, fuzzy
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
87 msgid ""
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
88 msgstr ""
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
89 "Project-Id-Version: 3.15\n"
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
90 "Report-Msgid-Bugs-To: Fliegender Zirkus <fliegender@zirkus.de>\n"
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
91 "POT-Creation-Date: 2007-09-27 11:19+0700\n"
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
92 "PO-Revision-Date: 2007-09-27 21:42-0700\n"
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
93 "Last-Translator: John <cleese@bavaria.de>\n"
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
94 "Language-Team: German Lang <de@babel.org>\n"
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
95 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
96 "MIME-Version: 1.0\n"
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
97 "Content-Type: text/plain; charset=iso-8859-2\n"
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
98 "Content-Transfer-Encoding: 8bit\n"
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
99 "Generated-By: Babel 1.0dev-r313\n"
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
100 ''')
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
101 catalog = pofile.read_po(buf)
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
102 self.assertEqual(1, len(list(catalog)))
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
103 self.assertEqual(u'3.15', catalog.version)
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
104 self.assertEqual(u'Fliegender Zirkus <fliegender@zirkus.de>',
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
105 catalog.msgid_bugs_address)
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
106 self.assertEqual(datetime(2007, 9, 27, 11, 19,
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
107 tzinfo=FixedOffsetTimezone(7 * 60)),
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
108 catalog.creation_date)
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
109 self.assertEqual(u'John <cleese@bavaria.de>', catalog.last_translator)
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
110 self.assertEqual(u'German Lang <de@babel.org>', catalog.language_team)
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
111 self.assertEqual(u'iso-8859-2', catalog.charset)
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
112 self.assertEqual(True, list(catalog)[0].fuzzy)
2f6b2b06a428 fix catalogs' charset values not being recognized
pjenvey
parents: 249
diff changeset
113
199
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
114 def test_obsolete_message(self):
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
115 buf = StringIO(r'''# This is an obsolete message
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
116 #~ msgid "foo"
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
117 #~ msgstr "Voh"
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
118
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
119 # This message is not obsolete
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
120 #: main.py:1
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
121 msgid "bar"
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
122 msgstr "Bahr"
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
123 ''')
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
124 catalog = pofile.read_po(buf)
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
125 self.assertEqual(1, len(catalog))
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
126 self.assertEqual(1, len(catalog.obsolete))
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
127 message = catalog.obsolete[u'foo']
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
128 self.assertEqual(u'foo', message.id)
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
129 self.assertEqual(u'Voh', message.string)
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
130 self.assertEqual(['This is an obsolete message'], message.user_comments)
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
131
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
132 def test_obsolete_message_ignored(self):
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
133 buf = StringIO(r'''# This is an obsolete message
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
134 #~ msgid "foo"
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
135 #~ msgstr "Voh"
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
136
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
137 # This message is not obsolete
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
138 #: main.py:1
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
139 msgid "bar"
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
140 msgstr "Bahr"
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
141 ''')
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
142 catalog = pofile.read_po(buf, ignore_obsolete=True)
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
143 self.assertEqual(1, len(catalog))
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
144 self.assertEqual(0, len(catalog.obsolete))
a0d22f2f2df0 Handle obsolete messages when parsing catalogs. Closes #32.
cmlenz
parents: 196
diff changeset
145
335
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
146 def test_with_context(self):
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
147 buf = StringIO(r'''# Some string in the menu
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
148 #: main.py:1
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
149 msgctxt "Menu"
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
150 msgid "foo"
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
151 msgstr "Voh"
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
152
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
153 # Another string in the menu
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
154 #: main.py:2
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
155 msgctxt "Menu"
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
156 msgid "bar"
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
157 msgstr "Bahr"
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
158 ''')
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
159 catalog = pofile.read_po(buf, ignore_obsolete=True)
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
160 self.assertEqual(2, len(catalog))
350
9166eab61e29 More work on msgctxt support (#54).
cmlenz
parents: 335
diff changeset
161 message = catalog.get('foo', context='Menu')
335
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
162 self.assertEqual('Menu', message.context)
350
9166eab61e29 More work on msgctxt support (#54).
cmlenz
parents: 335
diff changeset
163 message = catalog.get('bar', context='Menu')
335
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
164 self.assertEqual('Menu', message.context)
4db404d0c19b More preparation for msgctxt support (#54).
cmlenz
parents: 315
diff changeset
165
370
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
166 def test_singlular_plural_form(self):
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
167 buf = StringIO(r'''msgid "foo"
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
168 msgid_plural "foo"
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
169 msgstr[0] "Voh"
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
170 msgstr[1] "Vohs"''') # This is a bad po, ja_JP only uses msgstr[0]
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
171 catalog = pofile.read_po(buf, locale='ja_JP')
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
172 self.assertEqual(1, len(catalog))
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
173 self.assertEqual(1, catalog.num_plurals)
377
d0ee047cd3ae Use item access to catalog messages in tests, so that they can be easily ported back to the 0.9.x branch.
cmlenz
parents: 370
diff changeset
174 message = catalog['foo']
370
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
175 self.assertEqual(1, len(message.string))
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
176
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
177 def test_more_than_two_plural_forms(self):
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
178 buf = StringIO(r'''msgid "foo"
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
179 msgid_plural "foo"
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
180 msgstr[0] "Voh"
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
181 msgstr[1] "Vohs"''') # last translation form is missing
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
182 #msgstr[2] "Vohss"''')
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
183 catalog = pofile.read_po(buf, locale='lv_LV')
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
184 self.assertEqual(1, len(catalog))
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
185 self.assertEqual(3, catalog.num_plurals)
377
d0ee047cd3ae Use item access to catalog messages in tests, so that they can be easily ported back to the 0.9.x branch.
cmlenz
parents: 370
diff changeset
186 message = catalog['foo']
370
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
187 self.assertEqual(3, len(message.string))
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
188 self.assertEqual('', message.string[2])
bc18179832b7 We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents: 356
diff changeset
189
106
2cd83f77cc98 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
190
104
395704fda00b 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
191 class WritePoTestCase(unittest.TestCase):
24
b09e90803d1b 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
192
b09e90803d1b 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 def test_join_locations(self):
56
f40fc143439c Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
194 catalog = Catalog()
f40fc143439c 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.add(u'foo', locations=[('main.py', 1)])
f40fc143439c 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=[('utils.py', 3)])
24
b09e90803d1b 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
197 buf = StringIO()
104
395704fda00b 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
198 pofile.write_po(buf, catalog, omit_header=True)
24
b09e90803d1b 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
199 self.assertEqual('''#: main.py:1 utils.py:3
b09e90803d1b 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 msgid "foo"
b09e90803d1b 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 msgstr ""''', buf.getvalue().strip())
b09e90803d1b 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
228
6582494abc36 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
203 def test_duplicate_comments(self):
6582494abc36 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
204 catalog = Catalog()
6582494abc36 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
205 catalog.add(u'foo', auto_comments=['A comment'])
6582494abc36 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'])
6582494abc36 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
207 buf = StringIO()
6582494abc36 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
208 pofile.write_po(buf, catalog, omit_header=True)
6582494abc36 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
209 self.assertEqual('''#. A comment
6582494abc36 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
210 msgid "foo"
6582494abc36 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
211 msgstr ""''', buf.getvalue().strip())
6582494abc36 Follow-up to [239]: also combine duplicate comments when writing PO files.
cmlenz
parents: 203
diff changeset
212
24
b09e90803d1b 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
213 def test_wrap_long_lines(self):
b09e90803d1b 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 text = """Here's some text where
b09e90803d1b 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 white space and line breaks matter, and should
b09e90803d1b 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
b09e90803d1b 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 not be removed
b09e90803d1b 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
b09e90803d1b 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 """
56
f40fc143439c Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
220 catalog = Catalog()
f40fc143439c 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.add(text, locations=[('main.py', 1)])
24
b09e90803d1b 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
222 buf = StringIO()
104
395704fda00b 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
223 pofile.write_po(buf, catalog, no_location=True, omit_header=True,
56
f40fc143439c Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
224 width=42)
24
b09e90803d1b 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
225 self.assertEqual(r'''msgid ""
b09e90803d1b 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 "Here's some text where \n"
b09e90803d1b 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 "white space and line breaks matter, and"
b09e90803d1b 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 " should\n"
b09e90803d1b 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 "\n"
b09e90803d1b 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 "not be removed\n"
b09e90803d1b 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 "\n"
b09e90803d1b 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 msgstr ""''', buf.getvalue().strip())
b09e90803d1b 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
b09e90803d1b 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 def test_wrap_long_lines_with_long_word(self):
b09e90803d1b 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 text = """Here's some text that
b09e90803d1b 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 includesareallylongwordthatmightbutshouldnt throw us into an infinite loop
b09e90803d1b 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 """
56
f40fc143439c Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
238 catalog = Catalog()
f40fc143439c 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.add(text, locations=[('main.py', 1)])
24
b09e90803d1b 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
240 buf = StringIO()
104
395704fda00b 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
241 pofile.write_po(buf, catalog, no_location=True, omit_header=True,
56
f40fc143439c Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 54
diff changeset
242 width=32)
24
b09e90803d1b 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
243 self.assertEqual(r'''msgid ""
b09e90803d1b 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 "Here's some text that\n"
b09e90803d1b 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 "includesareallylongwordthatmightbutshouldnt"
b09e90803d1b 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 " throw us into an infinite "
b09e90803d1b 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 "loop\n"
b09e90803d1b 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 msgstr ""''', buf.getvalue().strip())
80
116e34b8cefa 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
249
103
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
250 def test_wrap_long_lines_in_header(self):
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
251 """
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
252 Verify that long lines in the header comment are wrapped correctly.
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
253 """
104
395704fda00b 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
254 catalog = Catalog(project='AReallyReallyLongNameForAProject',
395704fda00b 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 revision_date=datetime(2007, 4, 1))
103
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
256 buf = StringIO()
104
395704fda00b 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
257 pofile.write_po(buf, catalog)
103
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
258 self.assertEqual('''\
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
259 # Translations template for AReallyReallyLongNameForAProject.
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
260 # Copyright (C) 2007 ORGANIZATION
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
261 # This file is distributed under the same license as the
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
262 # AReallyReallyLongNameForAProject project.
104
395704fda00b 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
263 # FIRST AUTHOR <EMAIL@ADDRESS>, 2007.
103
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
264 #
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
265 #, fuzzy''', '\n'.join(buf.getvalue().splitlines()[:7]))
dacfbaf0d1e0 Implement wrapping of header comments in PO(T) output. Related to #14.
cmlenz
parents: 80
diff changeset
266
315
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
267 def test_wrap_locations_with_hyphens(self):
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
268 catalog = Catalog()
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
269 catalog.add(u'foo', locations=[
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
270 ('doupy/templates/base/navmenu.inc.html.py', 60)
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
271 ])
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
272 catalog.add(u'foo', locations=[
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
273 ('doupy/templates/job-offers/helpers.html', 22)
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
274 ])
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
275 buf = StringIO()
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
276 pofile.write_po(buf, catalog, omit_header=True)
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
277 self.assertEqual('''#: doupy/templates/base/navmenu.inc.html.py:60
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
278 #: doupy/templates/job-offers/helpers.html:22
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
279 msgid "foo"
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
280 msgstr ""''', buf.getvalue().strip())
59c7849d8b32 Fix for #79 (location lines wrapping at hyphens).
cmlenz
parents: 291
diff changeset
281
80
116e34b8cefa 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
282 def test_pot_with_translator_comments(self):
116e34b8cefa 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
283 catalog = Catalog()
116e34b8cefa 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
284 catalog.add(u'foo', locations=[('main.py', 1)],
105
c62b68a0b65e `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
285 auto_comments=['Comment About `foo`'])
80
116e34b8cefa 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
286 catalog.add(u'bar', locations=[('utils.py', 3)],
105
c62b68a0b65e `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
287 user_comments=['Comment About `bar` with',
c62b68a0b65e `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
288 'multiple lines.'])
80
116e34b8cefa 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
289 buf = StringIO()
104
395704fda00b 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
290 pofile.write_po(buf, catalog, omit_header=True)
80
116e34b8cefa 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
291 self.assertEqual('''#. Comment About `foo`
116e34b8cefa 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
292 #: main.py:1
116e34b8cefa 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
293 msgid "foo"
116e34b8cefa 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
294 msgstr ""
116e34b8cefa 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
295
105
c62b68a0b65e `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
296 # Comment About `bar` with
c62b68a0b65e `Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents: 104
diff changeset
297 # multiple lines.
80
116e34b8cefa 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
298 #: utils.py:3
116e34b8cefa 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
299 msgid "bar"
116e34b8cefa 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
300 msgstr ""''', buf.getvalue().strip())
24
b09e90803d1b 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
301
190
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
302 def test_po_with_obsolete_message(self):
181
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
303 catalog = Catalog()
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
304 catalog.add(u'foo', u'Voh', locations=[('main.py', 1)])
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
305 catalog.obsolete['bar'] = Message(u'bar', u'Bahr',
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
306 locations=[('utils.py', 3)],
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
307 user_comments=['User comment'])
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
308 buf = StringIO()
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
309 pofile.write_po(buf, catalog, omit_header=True)
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
310 self.assertEqual('''#: main.py:1
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
311 msgid "foo"
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
312 msgstr "Voh"
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
313
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
314 # User comment
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
315 #~ msgid "bar"
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
316 #~ msgstr "Bahr"''', buf.getvalue().strip())
8a762ce37bf7 The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents: 175
diff changeset
317
190
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
318 def test_po_with_multiline_obsolete_message(self):
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
319 catalog = Catalog()
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
320 catalog.add(u'foo', u'Voh', locations=[('main.py', 1)])
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
321 msgid = r"""Here's a message that covers
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
322 multiple lines, and should still be handled
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
323 correctly.
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
324 """
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
325 msgstr = r"""Here's a message that covers
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
326 multiple lines, and should still be handled
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
327 correctly.
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
328 """
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
329 catalog.obsolete[msgid] = Message(msgid, msgstr,
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
330 locations=[('utils.py', 3)])
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
331 buf = StringIO()
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
332 pofile.write_po(buf, catalog, omit_header=True)
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
333 self.assertEqual(r'''#: main.py:1
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
334 msgid "foo"
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
335 msgstr "Voh"
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
336
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
337 #~ msgid ""
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
338 #~ "Here's a message that covers\n"
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
339 #~ "multiple lines, and should still be handled\n"
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
340 #~ "correctly.\n"
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
341 #~ msgstr ""
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
342 #~ "Here's a message that covers\n"
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
343 #~ "multiple lines, and should still be handled\n"
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
344 #~ "correctly.\n"''', buf.getvalue().strip())
5041d90edf0c Correctly write out obsolete messages spanning multiple lines. Fixes #33.
cmlenz
parents: 181
diff changeset
345
191
c171a0041ad2 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
346 def test_po_with_obsolete_message_ignored(self):
c171a0041ad2 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
347 catalog = Catalog()
c171a0041ad2 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
348 catalog.add(u'foo', u'Voh', locations=[('main.py', 1)])
c171a0041ad2 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
349 catalog.obsolete['bar'] = Message(u'bar', u'Bahr',
c171a0041ad2 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
350 locations=[('utils.py', 3)],
c171a0041ad2 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
351 user_comments=['User comment'])
c171a0041ad2 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
352 buf = StringIO()
c171a0041ad2 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
353 pofile.write_po(buf, catalog, omit_header=True, ignore_obsolete=True)
c171a0041ad2 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
354 self.assertEqual('''#: main.py:1
c171a0041ad2 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
355 msgid "foo"
c171a0041ad2 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
356 msgstr "Voh"''', buf.getvalue().strip())
c171a0041ad2 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
357
203
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
358 def test_po_with_previous_msgid(self):
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
359 catalog = Catalog()
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
360 catalog.add(u'foo', u'Voh', locations=[('main.py', 1)],
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
361 previous_id=u'fo')
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
362 buf = StringIO()
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
363 pofile.write_po(buf, catalog, omit_header=True, include_previous=True)
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
364 self.assertEqual('''#: main.py:1
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
365 #| msgid "fo"
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
366 msgid "foo"
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
367 msgstr "Voh"''', buf.getvalue().strip())
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
368
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
369 def test_po_with_previous_msgid_plural(self):
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
370 catalog = Catalog()
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
371 catalog.add((u'foo', u'foos'), (u'Voh', u'Voeh'),
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
372 locations=[('main.py', 1)], previous_id=(u'fo', u'fos'))
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
373 buf = StringIO()
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
374 pofile.write_po(buf, catalog, omit_header=True, include_previous=True)
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
375 self.assertEqual('''#: main.py:1
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
376 #| msgid "fo"
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
377 #| msgid_plural "fos"
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
378 msgid "foo"
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
379 msgid_plural "foos"
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
380 msgstr[0] "Voh"
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
381 msgstr[1] "Voeh"''', buf.getvalue().strip())
fc1f8cd448fc Minor changes to how previous msgids are processed.
cmlenz
parents: 199
diff changeset
382
249
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
383 def test_sorted_po(self):
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
384 catalog = Catalog()
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
385 catalog.add(u'bar', locations=[('utils.py', 3)],
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
386 user_comments=['Comment About `bar` with',
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
387 'multiple lines.'])
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
388 catalog.add((u'foo', u'foos'), (u'Voh', u'Voeh'),
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
389 locations=[('main.py', 1)])
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
390 buf = StringIO()
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
391 pofile.write_po(buf, catalog, sort_output=True)
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
392 value = buf.getvalue().strip()
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
393 assert '''\
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
394 # Comment About `bar` with
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
395 # multiple lines.
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
396 #: utils.py:3
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
397 msgid "bar"
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
398 msgstr ""
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
399
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
400 #: main.py:1
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
401 msgid "foo"
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
402 msgid_plural "foos"
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
403 msgstr[0] "Voh"
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
404 msgstr[1] "Voeh"''' in value
51a1f6101fa6 added test cases for correct po/mofile sorting, following up r264
pjenvey
parents: 228
diff changeset
405 assert value.find('msgid ""') < value.find('msgid "bar"') < value.find('msgid "foo"')
24
b09e90803d1b 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
406
356
4cdca48fc832 Fixed #59 by falling back silently on invalid location comments.
aronacher
parents: 350
diff changeset
407 def test_silent_location_fallback(self):
4cdca48fc832 Fixed #59 by falling back silently on invalid location comments.
aronacher
parents: 350
diff changeset
408 buf = StringIO('''\
4cdca48fc832 Fixed #59 by falling back silently on invalid location comments.
aronacher
parents: 350
diff changeset
409 #: broken_file.py
4cdca48fc832 Fixed #59 by falling back silently on invalid location comments.
aronacher
parents: 350
diff changeset
410 msgid "missing line number"
4cdca48fc832 Fixed #59 by falling back silently on invalid location comments.
aronacher
parents: 350
diff changeset
411 msgstr ""
4cdca48fc832 Fixed #59 by falling back silently on invalid location comments.
aronacher
parents: 350
diff changeset
412
4cdca48fc832 Fixed #59 by falling back silently on invalid location comments.
aronacher
parents: 350
diff changeset
413 #: broken_file.py:broken_line_number
4cdca48fc832 Fixed #59 by falling back silently on invalid location comments.
aronacher
parents: 350
diff changeset
414 msgid "broken line number"
4cdca48fc832 Fixed #59 by falling back silently on invalid location comments.
aronacher
parents: 350
diff changeset
415 msgstr ""''')
4cdca48fc832 Fixed #59 by falling back silently on invalid location comments.
aronacher
parents: 350
diff changeset
416 catalog = pofile.read_po(buf)
377
d0ee047cd3ae Use item access to catalog messages in tests, so that they can be easily ported back to the 0.9.x branch.
cmlenz
parents: 370
diff changeset
417 self.assertEqual(catalog['missing line number'].locations, [])
d0ee047cd3ae Use item access to catalog messages in tests, so that they can be easily ported back to the 0.9.x branch.
cmlenz
parents: 370
diff changeset
418 self.assertEqual(catalog['broken line number'].locations, [])
356
4cdca48fc832 Fixed #59 by falling back silently on invalid location comments.
aronacher
parents: 350
diff changeset
419
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
420 def suite():
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
421 suite = unittest.TestSuite()
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
422 suite.addTest(doctest.DocTestSuite(pofile))
106
2cd83f77cc98 Fix for #16: the header message (`msgid = ""`) is now treated specially by `read_po` and `Catalog`.
cmlenz
parents: 105
diff changeset
423 suite.addTest(unittest.makeSuite(ReadPoTestCase))
104
395704fda00b 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
424 suite.addTest(unittest.makeSuite(WritePoTestCase))
1
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
425 return suite
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
426
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
427 if __name__ == '__main__':
7870274479f5 Import of initial code base.
cmlenz
parents:
diff changeset
428 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software