cubicweb/devtools/test/unittest_i18n.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Fri, 05 Apr 2019 17:58:19 +0200
changeset 12567 26744ad37953
parent 12546 465ee7fb16e3
child 12568 fc45f22c8100
permissions -rw-r--r--
Drop python2 support This mostly consists in removing the dependency on "six" and updating the code to use only Python3 idioms. Notice that we previously used TemporaryDirectory from cubicweb.devtools.testlib for compatibility with Python2. We now directly import it from tempfile.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
11735
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    21
from contextlib import contextmanager
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12546
diff changeset
    22
from io import StringIO
11208
fe57dc4adfea [test] Use a Popen in i18n tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11099
diff changeset
    23
import os
fe57dc4adfea [test] Use a Popen in i18n tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11099
diff changeset
    24
import os.path as osp
9153
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    25
import sys
11208
fe57dc4adfea [test] Use a Popen in i18n tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11099
diff changeset
    26
from subprocess import PIPE, Popen, STDOUT
10464
5ad491852062 [test] Fix unittest_i18n to run properly with "pytest -t" (closes #5576169)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9202
diff changeset
    27
from unittest import TestCase, main
9153
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    28
11735
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    29
from mock import patch
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    30
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    31
from cubicweb.devtools import devctl
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    32
from cubicweb.devtools.testlib import BaseTestCase
9153
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    33
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    34
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
    35
11208
fe57dc4adfea [test] Use a Popen in i18n tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11099
diff changeset
    36
9153
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    37
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
    38
    """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
    39
    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
    40
    msgid = msgctxt = None
10964
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    41
    with open(fname) as fobj:
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    42
        for line in fobj:
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    43
            if line.strip() in ('', '#'):
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    44
                continue
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    45
            if line.startswith('msgstr'):
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    46
                assert not (msgid, msgctxt) in msgs
11208
fe57dc4adfea [test] Use a Popen in i18n tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11099
diff changeset
    47
                msgs.add((msgid, msgctxt))
10964
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    48
                msgid = msgctxt = None
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    49
            elif line.startswith('msgid'):
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    50
                msgid = line.split(' ', 1)[1][1:-1]
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    51
            elif line.startswith('msgctx'):
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    52
                msgctxt = line.split(' ', 1)[1][1: -1]
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    53
            elif msgid is not None:
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    54
                msgid += line[1:-1]
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    55
            elif msgctxt is not None:
bf381a894cd3 [devtools] Fix fd leak in tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10464
diff changeset
    56
                msgctxt += line[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
    57
    return msgs
9153
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    58
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    59
12546
465ee7fb16e3 [devtools/test] drop legacy cube i18n tests
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11822
diff changeset
    60
TESTCUBE_DIR = osp.join(DATADIR, 'libpython', 'cubicweb_i18ntestcube')
11735
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    61
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    62
9153
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    63
class cubePotGeneratorTC(TestCase):
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    64
    """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
    65
9153
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    66
    def test_i18ncube(self):
10464
5ad491852062 [test] Fix unittest_i18n to run properly with "pytest -t" (closes #5576169)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9202
diff changeset
    67
        env = os.environ.copy()
11460
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    68
        if 'PYTHONPATH' in env:
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    69
            env['PYTHONPATH'] += os.pathsep
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    70
        else:
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    71
            env['PYTHONPATH'] = ''
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    72
        env['PYTHONPATH'] += osp.join(DATADIR, 'libpython')
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    73
        cubedir = osp.join(DATADIR, 'libpython', 'cubicweb_i18ntestcube')
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    74
        self._check(cubedir, env)
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    75
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    76
    def _check(self, cubedir, env):
11208
fe57dc4adfea [test] Use a Popen in i18n tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11099
diff changeset
    77
        cmd = [sys.executable, '-m', 'cubicweb', 'i18ncube', 'i18ntestcube']
fe57dc4adfea [test] Use a Popen in i18n tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11099
diff changeset
    78
        proc = Popen(cmd, env=env, stdout=PIPE, stderr=STDOUT)
fe57dc4adfea [test] Use a Popen in i18n tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11099
diff changeset
    79
        stdout, _ = proc.communicate()
11460
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    80
        msg = stdout.decode(sys.getdefaultencoding(), errors='replace')
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    81
        self.assertEqual(proc.returncode, 0, msg=msg)
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    82
        msgs = load_po(osp.join(cubedir, 'i18n', 'en.po.ref'))
5be729810695 [devtools] Handle i18ncube command for "cubes as packages"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11208
diff changeset
    83
        newmsgs = load_po(osp.join(cubedir, 'i18n', 'en.po'))
9153
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    84
        self.assertEqual(msgs, newmsgs)
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    85
10464
5ad491852062 [test] Fix unittest_i18n to run properly with "pytest -t" (closes #5576169)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9202
diff changeset
    86
11735
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    87
class CustomMessageExtractor(devctl.I18nCubeMessageExtractor):
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    88
    blacklist = devctl.I18nCubeMessageExtractor.blacklist | set(['excludeme'])
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    89
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    90
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    91
@contextmanager
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    92
def capture_stdout():
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12546
diff changeset
    93
    stream = StringIO()
11735
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    94
    sys.stdout = stream
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    95
    yield stream
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    96
    stream.seek(0)
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    97
    sys.stdout = sys.__stdout__
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    98
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
    99
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   100
class I18nCollectorTest(BaseTestCase):
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   101
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   102
    def test_i18ncube_py_collection(self):
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   103
        extractor = CustomMessageExtractor(DATADIR, TESTCUBE_DIR)
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   104
        collected = extractor.collect_py()
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   105
        expected = [osp.join(TESTCUBE_DIR, path)
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   106
                    for path in ('__init__.py', '__pkginfo__.py',
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   107
                                 'views.py', 'schema.py')]
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   108
        self.assertCountEqual(expected, collected)
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   109
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   110
    def test_i18ncube_js_collection(self):
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   111
        extractor = CustomMessageExtractor(DATADIR, TESTCUBE_DIR)
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   112
        collected = extractor.collect_js()
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   113
        self.assertCountEqual([], collected, [])
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   114
        extractor.blacklist = ()  # don't ignore anything
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   115
        collected = extractor.collect_js()
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   116
        expected = [osp.join(TESTCUBE_DIR, 'node_modules/cubes.somefile.js')]
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   117
        self.assertCountEqual(expected, collected)
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   118
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   119
    class FakeMessageExtractor(devctl.I18nCubeMessageExtractor):
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   120
        """Fake message extractor that generates no pot file."""
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   121
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   122
        def generate_pot_file(self):
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   123
            return None
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   124
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   125
    @patch('pkg_resources.load_entry_point', return_value=FakeMessageExtractor)
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   126
    def test_cube_custom_extractor(self, mock_load_entry_point):
11822
adf0212d1dcc [devctl] make i18n custom message extractors work with legacy layouts
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11735
diff changeset
   127
        distname = 'cubicweb_i18ntestcube'  # same for new and legacy layout
12546
465ee7fb16e3 [devtools/test] drop legacy cube i18n tests
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11822
diff changeset
   128
        cubedir = osp.join(DATADIR, 'libpython', 'cubicweb_i18ntestcube')
465ee7fb16e3 [devtools/test] drop legacy cube i18n tests
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11822
diff changeset
   129
        with capture_stdout() as stream:
465ee7fb16e3 [devtools/test] drop legacy cube i18n tests
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11822
diff changeset
   130
            devctl.update_cube_catalogs(cubedir)
465ee7fb16e3 [devtools/test] drop legacy cube i18n tests
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11822
diff changeset
   131
        self.assertIn(u'no message catalog for cube i18ntestcube',
465ee7fb16e3 [devtools/test] drop legacy cube i18n tests
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11822
diff changeset
   132
                      stream.read())
465ee7fb16e3 [devtools/test] drop legacy cube i18n tests
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11822
diff changeset
   133
        mock_load_entry_point.assert_called_once_with(
465ee7fb16e3 [devtools/test] drop legacy cube i18n tests
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11822
diff changeset
   134
            distname, 'cubicweb.i18ncube', 'i18ntestcube')
465ee7fb16e3 [devtools/test] drop legacy cube i18n tests
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11822
diff changeset
   135
        mock_load_entry_point.reset_mock()
11735
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   136
7a170207acbf [devtools] make i18ncube customizable in a cube
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 11460
diff changeset
   137
9153
bc1b8e77d6ce [test/devctl] add a test case for i18ncube command
David Douard <david.douard@logilab.fr>
parents:
diff changeset
   138
if __name__ == '__main__':
10464
5ad491852062 [test] Fix unittest_i18n to run properly with "pytest -t" (closes #5576169)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9202
diff changeset
   139
    main()