/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
1
# Copyright (C) 2011, 2016 Canonical Ltd
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
17
"""Tests for breezy.i18n"""
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
18
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
19
import io
20
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
21
from .. import (
6189.1.1 by Jelmer Vernooij
Add a load_plugin_translations method.
22
    i18n,
23
    tests,
24
    errors,
25
    workingtree,
26
    )
7058.4.10 by Jelmer Vernooij
Fix i18n stuff.
27
from ..sixish import PY3
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
28
29
5875.2.9 by Vincent Ladeuil
Cleanup some PEP8 issues and move test code in test module, test_multiline still failing.
30
class ZzzTranslations(object):
31
    """Special Zzz translation for debugging i18n stuff.
32
33
    This class can be used to confirm that the message is properly translated
34
    during black box tests.
35
    """
36
    _null_translation = i18n._gettext.NullTranslations()
37
38
    def zzz(self, s):
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
39
        return u'zz\xe5{{%s}}' % s
5875.2.9 by Vincent Ladeuil
Cleanup some PEP8 issues and move test code in test module, test_multiline still failing.
40
7045.5.4 by Jelmer Vernooij
Fix a few more tests.
41
    def gettext(self, s):
42
        return self.zzz(self._null_translation.gettext(s))
43
7058.4.10 by Jelmer Vernooij
Fix i18n stuff.
44
    def ngettext(self, s, p, n):
45
        return self.zzz(self._null_translation.ngettext(s, p, n))
46
5875.2.9 by Vincent Ladeuil
Cleanup some PEP8 issues and move test code in test module, test_multiline still failing.
47
    def ugettext(self, s):
48
        return self.zzz(self._null_translation.ugettext(s))
49
50
    def ungettext(self, s, p, n):
51
        return self.zzz(self._null_translation.ungettext(s, p, n))
52
53
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
54
class TestZzzTranslation(tests.TestCase):
55
56
    def _check_exact(self, expected, source):
57
        self.assertEqual(expected, source)
58
        self.assertEqual(type(expected), type(source))
59
60
    def test_translation(self):
5875.2.9 by Vincent Ladeuil
Cleanup some PEP8 issues and move test code in test module, test_multiline still failing.
61
        trans = ZzzTranslations()
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
62
63
        t = trans.zzz('msg')
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
64
        self._check_exact(u'zz\xe5{{msg}}', t)
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
65
7058.4.10 by Jelmer Vernooij
Fix i18n stuff.
66
        if PY3:
67
            t = trans.gettext('msg')
68
            self._check_exact(u'zz\xe5{{msg}}', t)
69
70
            t = trans.ngettext('msg1', 'msg2', 0)
71
            self._check_exact(u'zz\xe5{{msg2}}', t)
72
            t = trans.ngettext('msg1', 'msg2', 2)
73
            self._check_exact(u'zz\xe5{{msg2}}', t)
74
75
            t = trans.ngettext('msg1', 'msg2', 1)
76
            self._check_exact(u'zz\xe5{{msg1}}', t)
77
        else:
78
            t = trans.ugettext('msg')
79
            self._check_exact(u'zz\xe5{{msg}}', t)
80
81
            t = trans.ungettext('msg1', 'msg2', 0)
82
            self._check_exact(u'zz\xe5{{msg2}}', t)
83
            t = trans.ungettext('msg1', 'msg2', 2)
84
            self._check_exact(u'zz\xe5{{msg2}}', t)
85
86
            t = trans.ungettext('msg1', 'msg2', 1)
87
            self._check_exact(u'zz\xe5{{msg1}}', t)
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
88
89
90
class TestGetText(tests.TestCase):
91
92
    def setUp(self):
93
        super(TestGetText, self).setUp()
5875.3.28 by Vincent Ladeuil
Fix more test failures.
94
        self.overrideAttr(i18n, '_translations', ZzzTranslations())
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
95
96
    def test_oneline(self):
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
97
        self.assertEqual(u"zz\xe5{{spam ham eggs}}",
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
98
                         i18n.gettext("spam ham eggs"))
99
100
    def test_multiline(self):
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
101
        self.assertEqual(u"zz\xe5{{spam\nham\n\neggs\n}}",
5875.2.10 by INADA Naoki
Add TestGetTextPerParagraph and fix error on TestGetText.test_multiline.
102
                         i18n.gettext("spam\nham\n\neggs\n"))
103
104
105
class TestGetTextPerParagraph(tests.TestCase):
106
107
    def setUp(self):
108
        super(TestGetTextPerParagraph, self).setUp()
5875.3.28 by Vincent Ladeuil
Fix more test failures.
109
        self.overrideAttr(i18n, '_translations', ZzzTranslations())
5875.2.10 by INADA Naoki
Add TestGetTextPerParagraph and fix error on TestGetText.test_multiline.
110
111
    def test_oneline(self):
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
112
        self.assertEqual(u"zz\xe5{{spam ham eggs}}",
5875.2.10 by INADA Naoki
Add TestGetTextPerParagraph and fix error on TestGetText.test_multiline.
113
                         i18n.gettext_per_paragraph("spam ham eggs"))
114
115
    def test_multiline(self):
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
116
        self.assertEqual(u"zz\xe5{{spam\nham}}\n\nzz\xe5{{eggs\n}}",
5875.2.10 by INADA Naoki
Add TestGetTextPerParagraph and fix error on TestGetText.test_multiline.
117
                         i18n.gettext_per_paragraph("spam\nham\n\neggs\n"))
6025.1.1 by Jelmer Vernooij
Fix i18n use when no environment variables are set.
118
119
120
class TestInstall(tests.TestCase):
121
6133.3.11 by Jonathan Riddell
make TestInstall tests more consistent
122
    def setUp(self):
123
        super(TestInstall, self).setUp()
124
        # Restore a proper env to test translation installation
125
        self.overrideAttr(i18n, '_translations', None)
126
6025.1.1 by Jelmer Vernooij
Fix i18n use when no environment variables are set.
127
    def test_custom_languages(self):
128
        i18n.install('nl:fy')
6133.3.13 by Jonathan Riddell
vila sorts it out, fix disable_i18n() and use it in tests.__init__
129
        # Whether we found a valid tranlsation or not doesn't matter, we got
130
        # one and _translations is not None anymore.
131
        self.assertIsInstance(i18n._translations,
132
                              i18n._gettext.NullTranslations)
6025.1.1 by Jelmer Vernooij
Fix i18n use when no environment variables are set.
133
134
    def test_no_env_variables(self):
135
        self.overrideEnv('LANGUAGE', None)
136
        self.overrideEnv('LC_ALL', None)
137
        self.overrideEnv('LC_MESSAGES', None)
138
        self.overrideEnv('LANG', None)
139
        i18n.install()
6133.3.13 by Jonathan Riddell
vila sorts it out, fix disable_i18n() and use it in tests.__init__
140
        # Whether we found a valid tranlsation or not doesn't matter, we got
141
        # one and _translations is not None anymore.
142
        self.assertIsInstance(i18n._translations,
143
                              i18n._gettext.NullTranslations)
6112.5.3 by Jonathan Riddell
start a test case
144
6131.2.4 by Jonathan Riddell
add test for i18n.disable_i18n()
145
    def test_disable_i18n(self):
146
        i18n.disable_i18n()
147
        i18n.install()
6133.3.13 by Jonathan Riddell
vila sorts it out, fix disable_i18n() and use it in tests.__init__
148
        # It's disabled, you can't install anything and we fallback to null
149
        self.assertIsInstance(i18n._translations,
150
                              i18n._gettext.NullTranslations)
6133.3.10 by Jonathan Riddell
default _translations back to None so we can tell if it gets installed
151
6131.2.4 by Jonathan Riddell
add test for i18n.disable_i18n()
152
6112.5.3 by Jonathan Riddell
start a test case
153
class TestTranslate(tests.TestCaseWithTransport):
154
155
    def setUp(self):
156
        super(TestTranslate, self).setUp()
157
        self.overrideAttr(i18n, '_translations', ZzzTranslations())
158
159
    def test_error_message_translation(self):
6112.5.5 by Jonathan Riddell
finish test_error_message_translation()
160
        """do errors get translated?"""
6112.5.3 by Jonathan Riddell
start a test case
161
        err = None
162
        tree = self.make_branch_and_tree('.')
163
        try:
164
            workingtree.WorkingTree.open('./foo')
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
165
        except errors.NotBranchError as e:
6112.5.3 by Jonathan Riddell
start a test case
166
            err = str(e)
7058.4.10 by Jelmer Vernooij
Fix i18n stuff.
167
        if PY3:
168
            self.assertContainsRe(err, u"zz\xe5{{Not a branch: .*}}")
169
        else:
170
            self.assertContainsRe(
7143.15.2 by Jelmer Vernooij
Run autopep8.
171
                err, u"zz\xe5{{Not a branch: .*}}".encode('utf-8'))
6110.7.7 by Jonathan Riddell
add a test for topic help translations
172
173
    def test_topic_help_translation(self):
174
        """does topic help get translated?"""
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
175
        from .. import help
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
176
        out = io.StringIO()
6110.7.7 by Jonathan Riddell
add a test for topic help translations
177
        help.help("authentication", out)
7143.15.2 by Jelmer Vernooij
Run autopep8.
178
        self.assertContainsRe(
179
            out.getvalue(), "zz\xe5{{Authentication Settings")
6189.1.1 by Jelmer Vernooij
Add a load_plugin_translations method.
180
181
182
class LoadPluginTranslations(tests.TestCase):
183
184
    def test_does_not_exist(self):
185
        translation = i18n.load_plugin_translations("doesnotexist")
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
186
        self.assertEqual("foo", translation.gettext("foo"))