changeset 251:3b9d993b7aa3

added test cases for correct po/mofile sorting, following up r264
author pjenvey
date Mon, 13 Aug 2007 04:16:16 +0000
parents 194f927d8c5a
children 2398fc97675b
files babel/messages/tests/mofile.py babel/messages/tests/pofile.py
diffstat 2 files changed, 56 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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__':
--- 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()
Copyright (C) 2012-2017 Edgewall Software