]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
added test cases for correct po/mofile sorting, following up r264
authorPhilip Jenvey <pjenvey@underboss.org>
Mon, 13 Aug 2007 04:16:16 +0000 (04:16 +0000)
committerPhilip Jenvey <pjenvey@underboss.org>
Mon, 13 Aug 2007 04:16:16 +0000 (04:16 +0000)
babel/messages/tests/mofile.py
babel/messages/tests/pofile.py

index 9c8ed34affa5026d2011cc95156fd6b2abed0152..adaa3e4fa4eccc57f6c3fdd0cd51959b63813ef1 100644 (file)
 # 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__':
index f28735af7e504cb9603e21961339b5f128f33c16..6572300149ea3037d9d2f23d6dc806f416421b68 100644 (file)
@@ -285,6 +285,29 @@ msgid_plural "foos"
 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()