author | Sylvain Thénault <sylvain.thenault@logilab.fr> |
Thu, 03 Apr 2014 19:55:11 +0200 | |
changeset 9656 | 19c423d9d215 |
parent 9202 | 83f73a9746f6 |
child 10464 | 5ad491852062 |
permissions | -rw-r--r-- |
9153
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
1 |
# -*- coding: iso-8859-1 -*- |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
2 |
# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
3 |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
4 |
# |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
5 |
# This file is part of CubicWeb. |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
6 |
# |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
7 |
# CubicWeb is free software: you can redistribute it and/or modify it under the |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
8 |
# terms of the GNU Lesser General Public License as published by the Free |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
9 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
10 |
# any later version. |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
11 |
# |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
12 |
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
13 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
14 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
15 |
# details. |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
16 |
# |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
17 |
# You should have received a copy of the GNU Lesser General Public License along |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
18 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
19 |
"""unit tests for i18n messages generator""" |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
20 |
|
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
21 |
import os, os.path as osp |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
22 |
import sys |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
23 |
|
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
24 |
from logilab.common.testlib import TestCase, unittest_main |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
25 |
|
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
26 |
from cubicweb.cwconfig import CubicWebNoAppConfiguration |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
27 |
|
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
28 |
DATADIR = osp.join(osp.abspath(osp.dirname(__file__)), 'data') |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
29 |
|
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
30 |
def load_po(fname): |
9200
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
31 |
"""load a po file and return a set of encountered (msgid, msgctx)""" |
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
32 |
msgs = set() |
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
33 |
msgid = msgctxt = None |
9153
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
34 |
for line in open(fname): |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
35 |
if line.strip() in ('', '#'): |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
36 |
continue |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
37 |
if line.startswith('msgstr'): |
9200
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
38 |
assert not (msgid, msgctxt) in msgs |
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
39 |
msgs.add( (msgid, msgctxt) ) |
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
40 |
msgid = msgctxt = None |
9153
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
41 |
elif line.startswith('msgid'): |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
42 |
msgid = line.split(' ', 1)[1][1:-1] |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
43 |
elif line.startswith('msgctx'): |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
44 |
msgctxt = line.split(' ', 1)[1][1: -1] |
9200
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
45 |
elif msgid is not None: |
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
46 |
msgid += line[1:-1] |
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
47 |
elif msgctxt is not None: |
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
48 |
msgctxt += line[1:-1] |
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
49 |
return msgs |
9153
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
50 |
|
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
51 |
|
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
52 |
class cubePotGeneratorTC(TestCase): |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
53 |
"""test case for i18n pot file generator""" |
9200
1ba5961b19dd
[i18n test] load_po: fix bug in case of multi-lines msgid and ensure there are no duplicated messages
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9153
diff
changeset
|
54 |
|
9153
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
55 |
def setUp(self): |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
56 |
self._CUBES_PATH = CubicWebNoAppConfiguration.CUBES_PATH[:] |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
57 |
CubicWebNoAppConfiguration.CUBES_PATH.append(osp.join(DATADIR, 'cubes')) |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
58 |
CubicWebNoAppConfiguration.cls_adjust_sys_path() |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
59 |
|
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
60 |
def tearDown(self): |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
61 |
CubicWebNoAppConfiguration.CUBES_PATH[:] = self._CUBES_PATH |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
62 |
|
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
63 |
def test_i18ncube(self): |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
64 |
# MUST import here to make, since the import statement fire |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
65 |
# the cube paths setup (and then must occur after the setUp) |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
66 |
from cubicweb.devtools.devctl import update_cube_catalogs |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
67 |
cube = osp.join(DATADIR, 'cubes', 'i18ntestcube') |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
68 |
msgs = load_po(osp.join(cube, 'i18n', 'en.po.ref')) |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
69 |
update_cube_catalogs(cube) |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
70 |
newmsgs = load_po(osp.join(cube, 'i18n', 'en.po')) |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
71 |
self.assertEqual(msgs, newmsgs) |
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
72 |
|
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
73 |
if __name__ == '__main__': |
9202
83f73a9746f6
[i18n test] hack to make i18n tests run using a Python interpreter
David Douard <david.douard@logilab.fr>
parents:
9200
diff
changeset
|
74 |
# XXX dirty hack to make this test runnable using python (works |
83f73a9746f6
[i18n test] hack to make i18n tests run using a Python interpreter
David Douard <david.douard@logilab.fr>
parents:
9200
diff
changeset
|
75 |
# fine with pytest, but not with python directly if this hack is |
83f73a9746f6
[i18n test] hack to make i18n tests run using a Python interpreter
David Douard <david.douard@logilab.fr>
parents:
9200
diff
changeset
|
76 |
# not present) |
83f73a9746f6
[i18n test] hack to make i18n tests run using a Python interpreter
David Douard <david.douard@logilab.fr>
parents:
9200
diff
changeset
|
77 |
# XXX to remove ASA logilab.common is fixed |
83f73a9746f6
[i18n test] hack to make i18n tests run using a Python interpreter
David Douard <david.douard@logilab.fr>
parents:
9200
diff
changeset
|
78 |
sys.path.append('') |
9153
bc1b8e77d6ce
[test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
79 |
unittest_main() |