# HG changeset patch # User pjenvey # Date 1186978576 0 # Node ID 00960ab0a63102914da4d98a5871955c18ab806a # Parent bedaaeadc1db10c45faebd1961aef8ac3207fd3f added test cases for correct po/mofile sorting, following up r264 diff --git a/babel/messages/tests/mofile.py b/babel/messages/tests/mofile.py --- a/babel/messages/tests/mofile.py +++ b/babel/messages/tests/mofile.py @@ -12,13 +12,45 @@ # history and logs, available at http://babel.edgewall.org/log/. import doctest +import gettext import unittest +from StringIO import StringIO -from babel.messages import mofile +from babel.messages import mofile, Catalog + +class WriteMoTestCase(unittest.TestCase): + + def test_sorting(self): + # Ensure the header is sorted to the first entry so that its charset + # can be applied to all subsequent messages by GNUTranslations + # (ensuring all messages are safely converted to unicode) + catalog = Catalog(locale='en_US') + catalog.add(u'', '''\ +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n''') + catalog.add(u'foo', 'Voh') + catalog.add((u'There is', u'There are'), (u'Es gibt', u'Es gibt')) + catalog.add(u'Fizz', '') + catalog.add(('Fuzz', 'Fuzzes'), ('', '')) + buf = StringIO() + mofile.write_mo(buf, catalog) + buf.seek(0) + translations = gettext.GNUTranslations(fp=buf) + self.assertEqual(u'Voh', translations.ugettext('foo')) + assert isinstance(translations.ugettext('foo'), unicode) + self.assertEqual(u'Es gibt', translations.ungettext('There is', 'There are', 1)) + assert isinstance(translations.ungettext('There is', 'There are', 1), unicode) + self.assertEqual(u'Fizz', translations.ugettext('Fizz')) + assert isinstance(translations.ugettext('Fizz'), unicode) + self.assertEqual(u'Fuzz', translations.ugettext('Fuzz')) + assert isinstance(translations.ugettext('Fuzz'), unicode) + self.assertEqual(u'Fuzzes', translations.ugettext('Fuzzes')) + assert isinstance(translations.ugettext('Fuzzes'), unicode) def suite(): suite = unittest.TestSuite() suite.addTest(doctest.DocTestSuite(mofile)) + suite.addTest(unittest.makeSuite(WriteMoTestCase)) return suite if __name__ == '__main__': diff --git a/babel/messages/tests/pofile.py b/babel/messages/tests/pofile.py --- a/babel/messages/tests/pofile.py +++ b/babel/messages/tests/pofile.py @@ -285,6 +285,29 @@ msgstr[0] "Voh" msgstr[1] "Voeh"''', buf.getvalue().strip()) + def test_sorted_po(self): + catalog = Catalog() + catalog.add(u'bar', locations=[('utils.py', 3)], + user_comments=['Comment About `bar` with', + 'multiple lines.']) + catalog.add((u'foo', u'foos'), (u'Voh', u'Voeh'), + locations=[('main.py', 1)]) + buf = StringIO() + pofile.write_po(buf, catalog, sort_output=True) + value = buf.getvalue().strip() + assert '''\ +# Comment About `bar` with +# multiple lines. +#: utils.py:3 +msgid "bar" +msgstr "" + +#: main.py:1 +msgid "foo" +msgid_plural "foos" +msgstr[0] "Voh" +msgstr[1] "Voeh"''' in value + assert value.find('msgid ""') < value.find('msgid "bar"') < value.find('msgid "foo"') def suite(): suite = unittest.TestSuite()