devtools/test/unittest_i18n.py
branchstable
changeset 9153 bc1b8e77d6ce
child 9200 1ba5961b19dd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devtools/test/unittest_i18n.py	Mon Jul 15 16:55:03 2013 +0200
@@ -0,0 +1,74 @@
+# -*- coding: iso-8859-1 -*-
+# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
+#
+# This file is part of CubicWeb.
+#
+# CubicWeb is free software: you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License along
+# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
+"""unit tests for i18n messages generator"""
+
+import os, os.path as osp
+import sys
+
+from logilab.common.testlib import TestCase, unittest_main
+
+from cubicweb.cwconfig import CubicWebNoAppConfiguration
+
+DATADIR = osp.join(osp.abspath(osp.dirname(__file__)), 'data')
+
+def load_po(fname):
+    msgs = []
+    msgid = None
+    msgctxt = None
+    for line in open(fname):
+        if line.strip() in ('', '#'):
+            continue
+        if line.startswith('msgstr'):
+            msgs.append((msgid, msgctxt))
+            msgid = None
+            msgctxt = None
+        elif line.startswith('msgid'):
+            msgid = line.split(' ', 1)[1][1:-1]
+        elif line.startswith('msgctx'):
+            msgctxt = line.split(' ', 1)[1][1: -1]
+
+        else:
+            if msgctxt is not None:
+                msgctxt += line[1:-1]
+            elif msgid is not None:
+                msgid += line[1:-1]
+    return set(msgs)
+
+class cubePotGeneratorTC(TestCase):
+    """test case for i18n pot file generator"""
+    def setUp(self):
+        self._CUBES_PATH = CubicWebNoAppConfiguration.CUBES_PATH[:]
+        CubicWebNoAppConfiguration.CUBES_PATH.append(osp.join(DATADIR, 'cubes'))
+        CubicWebNoAppConfiguration.cls_adjust_sys_path()
+
+    def tearDown(self):
+        CubicWebNoAppConfiguration.CUBES_PATH[:] = self._CUBES_PATH
+
+    def test_i18ncube(self):
+        # MUST import here to make, since the import statement fire
+        # the cube paths setup (and then must occur after the setUp)
+        from cubicweb.devtools.devctl import update_cube_catalogs
+        cube = osp.join(DATADIR, 'cubes', 'i18ntestcube')
+        msgs = load_po(osp.join(cube, 'i18n', 'en.po.ref'))
+        update_cube_catalogs(cube)
+        newmsgs = load_po(osp.join(cube, 'i18n', 'en.po'))
+        self.assertEqual(msgs, newmsgs)
+
+if __name__ == '__main__':
+    unittest_main()