/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
    )
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
27
28
5875.2.9 by Vincent Ladeuil
Cleanup some PEP8 issues and move test code in test module, test_multiline still failing.
29
class ZzzTranslations(object):
30
    """Special Zzz translation for debugging i18n stuff.
31
32
    This class can be used to confirm that the message is properly translated
33
    during black box tests.
34
    """
35
    _null_translation = i18n._gettext.NullTranslations()
36
37
    def zzz(self, s):
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
38
        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.
39
40
    def ugettext(self, s):
41
        return self.zzz(self._null_translation.ugettext(s))
42
43
    def ungettext(self, s, p, n):
44
        return self.zzz(self._null_translation.ungettext(s, p, n))
45
46
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
47
class TestZzzTranslation(tests.TestCase):
48
49
    def _check_exact(self, expected, source):
50
        self.assertEqual(expected, source)
51
        self.assertEqual(type(expected), type(source))
52
53
    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.
54
        trans = ZzzTranslations()
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
55
56
        t = trans.zzz('msg')
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
57
        self._check_exact(u'zz\xe5{{msg}}', t)
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
58
59
        t = trans.ugettext('msg')
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
60
        self._check_exact(u'zz\xe5{{msg}}', t)
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
61
62
        t = trans.ungettext('msg1', 'msg2', 0)
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
63
        self._check_exact(u'zz\xe5{{msg2}}', t)
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
64
        t = trans.ungettext('msg1', 'msg2', 2)
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
65
        self._check_exact(u'zz\xe5{{msg2}}', t)
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
66
67
        t = trans.ungettext('msg1', 'msg2', 1)
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
68
        self._check_exact(u'zz\xe5{{msg1}}', t)
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
69
70
71
class TestGetText(tests.TestCase):
72
73
    def setUp(self):
74
        super(TestGetText, self).setUp()
5875.3.28 by Vincent Ladeuil
Fix more test failures.
75
        self.overrideAttr(i18n, '_translations', ZzzTranslations())
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
76
77
    def test_oneline(self):
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
78
        self.assertEqual(u"zz\xe5{{spam ham eggs}}",
5875.2.2 by INADA Naoki
Add tests for bzrlib.i18n
79
                         i18n.gettext("spam ham eggs"))
80
81
    def test_multiline(self):
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
82
        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.
83
                         i18n.gettext("spam\nham\n\neggs\n"))
84
85
86
class TestGetTextPerParagraph(tests.TestCase):
87
88
    def setUp(self):
89
        super(TestGetTextPerParagraph, self).setUp()
5875.3.28 by Vincent Ladeuil
Fix more test failures.
90
        self.overrideAttr(i18n, '_translations', ZzzTranslations())
5875.2.10 by INADA Naoki
Add TestGetTextPerParagraph and fix error on TestGetText.test_multiline.
91
92
    def test_oneline(self):
6112.5.12 by Jonathan Riddell
use non-ascii in error i18n tests to make it more realistic
93
        self.assertEqual(u"zz\xe5{{spam ham eggs}}",
5875.2.10 by INADA Naoki
Add TestGetTextPerParagraph and fix error on TestGetText.test_multiline.
94
                         i18n.gettext_per_paragraph("spam ham eggs"))
95
96
    def test_multiline(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\nham}}\n\nzz\xe5{{eggs\n}}",
5875.2.10 by INADA Naoki
Add TestGetTextPerParagraph and fix error on TestGetText.test_multiline.
98
                         i18n.gettext_per_paragraph("spam\nham\n\neggs\n"))
6025.1.1 by Jelmer Vernooij
Fix i18n use when no environment variables are set.
99
100
101
class TestInstall(tests.TestCase):
102
6133.3.11 by Jonathan Riddell
make TestInstall tests more consistent
103
    def setUp(self):
104
        super(TestInstall, self).setUp()
105
        # Restore a proper env to test translation installation
106
        self.overrideAttr(i18n, '_translations', None)
107
6025.1.1 by Jelmer Vernooij
Fix i18n use when no environment variables are set.
108
    def test_custom_languages(self):
109
        i18n.install('nl:fy')
6133.3.13 by Jonathan Riddell
vila sorts it out, fix disable_i18n() and use it in tests.__init__
110
        # Whether we found a valid tranlsation or not doesn't matter, we got
111
        # one and _translations is not None anymore.
112
        self.assertIsInstance(i18n._translations,
113
                              i18n._gettext.NullTranslations)
6025.1.1 by Jelmer Vernooij
Fix i18n use when no environment variables are set.
114
115
    def test_no_env_variables(self):
116
        self.overrideEnv('LANGUAGE', None)
117
        self.overrideEnv('LC_ALL', None)
118
        self.overrideEnv('LC_MESSAGES', None)
119
        self.overrideEnv('LANG', None)
120
        i18n.install()
6133.3.13 by Jonathan Riddell
vila sorts it out, fix disable_i18n() and use it in tests.__init__
121
        # Whether we found a valid tranlsation or not doesn't matter, we got
122
        # one and _translations is not None anymore.
123
        self.assertIsInstance(i18n._translations,
124
                              i18n._gettext.NullTranslations)
6112.5.3 by Jonathan Riddell
start a test case
125
6131.2.4 by Jonathan Riddell
add test for i18n.disable_i18n()
126
    def test_disable_i18n(self):
127
        i18n.disable_i18n()
128
        i18n.install()
6133.3.13 by Jonathan Riddell
vila sorts it out, fix disable_i18n() and use it in tests.__init__
129
        # It's disabled, you can't install anything and we fallback to null
130
        self.assertIsInstance(i18n._translations,
131
                              i18n._gettext.NullTranslations)
6133.3.10 by Jonathan Riddell
default _translations back to None so we can tell if it gets installed
132
6131.2.4 by Jonathan Riddell
add test for i18n.disable_i18n()
133
6112.5.3 by Jonathan Riddell
start a test case
134
class TestTranslate(tests.TestCaseWithTransport):
135
136
    def setUp(self):
137
        super(TestTranslate, self).setUp()
138
        self.overrideAttr(i18n, '_translations', ZzzTranslations())
139
140
    def test_error_message_translation(self):
6112.5.5 by Jonathan Riddell
finish test_error_message_translation()
141
        """do errors get translated?"""
6112.5.3 by Jonathan Riddell
start a test case
142
        err = None
143
        tree = self.make_branch_and_tree('.')
144
        try:
145
            workingtree.WorkingTree.open('./foo')
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
146
        except errors.NotBranchError as e:
6112.5.3 by Jonathan Riddell
start a test case
147
            err = str(e)
6118.1.7 by Jonathan Riddell
merge in trunk
148
        self.assertContainsRe(err, 
149
                              u"zz\xe5{{Not a branch: .*}}".encode("utf-8"))
6110.7.7 by Jonathan Riddell
add a test for topic help translations
150
151
    def test_topic_help_translation(self):
152
        """does topic help get translated?"""
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
153
        from .. import help
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
154
        out = io.StringIO()
6110.7.7 by Jonathan Riddell
add a test for topic help translations
155
        help.help("authentication", out)
6110.7.8 by Jonathan Riddell
merge in trunk
156
        self.assertContainsRe(out.getvalue(), "zz\xe5{{Authentication Settings")
6189.1.1 by Jelmer Vernooij
Add a load_plugin_translations method.
157
158
159
class LoadPluginTranslations(tests.TestCase):
160
161
    def test_does_not_exist(self):
162
        translation = i18n.load_plugin_translations("doesnotexist")
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
163
        self.assertEqual("foo", translation.gettext("foo"))