/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils_encodings.py

  • Committer: Robert Collins
  • Date: 2010-05-05 00:05:29 UTC
  • mto: This revision was merged to the branch mainline in revision 5206.
  • Revision ID: robertc@robertcollins.net-20100505000529-ltmllyms5watqj5u
Make 'pydoc bzrlib.tests.build_tree_shape' useful.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2012, 2016 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
18
18
 
19
19
import codecs
20
20
import locale
 
21
import os
21
22
import sys
22
23
 
23
 
from .. import (
 
24
from bzrlib import (
 
25
    errors,
24
26
    osutils,
25
27
    )
26
 
from ..sixish import PY3
27
 
from . import (
28
 
    TestCase,
29
 
    )
30
 
from .ui_testing import (
31
 
    BytesIOWithEncoding,
32
 
    StringIOWithEncoding,
33
 
    )
 
28
from bzrlib.tests import (
 
29
        StringIOWrapper,
 
30
        TestCase,
 
31
        )
34
32
 
35
33
 
36
34
class FakeCodec(object):
76
74
    """Test the auto-detection of proper terminal encoding."""
77
75
 
78
76
    def setUp(self):
79
 
        super(TestTerminalEncoding, self).setUp()
 
77
        TestCase.setUp(self)
80
78
        self.overrideAttr(sys, 'stdin')
81
79
        self.overrideAttr(sys, 'stdout')
82
80
        self.overrideAttr(sys, 'stderr')
88
86
                             stdin_encoding,
89
87
                             user_encoding='user_encoding',
90
88
                             enable_fake_encodings=True):
91
 
        if PY3:
92
 
            sys.stdout = StringIOWithEncoding()
93
 
        else:
94
 
            sys.stdout = BytesIOWithEncoding()
 
89
        sys.stdout = StringIOWrapper()
95
90
        sys.stdout.encoding = stdout_encoding
96
 
        if PY3:
97
 
            sys.stderr = StringIOWithEncoding()
98
 
        else:
99
 
            sys.stderr = BytesIOWithEncoding()
 
91
        sys.stderr = StringIOWrapper()
100
92
        sys.stderr.encoding = stderr_encoding
101
 
        if PY3:
102
 
            sys.stdin = StringIOWithEncoding()
103
 
        else:
104
 
            sys.stdin = BytesIOWithEncoding()
 
93
        sys.stdin = StringIOWrapper()
105
94
        sys.stdin.encoding = stdin_encoding
106
95
        osutils._cached_user_encoding = user_encoding
107
96
        if enable_fake_encodings:
125
114
        # and in the worst case, use osutils.get_user_encoding()
126
115
        self.assertEqual('user_encoding', osutils.get_terminal_encoding())
127
116
 
128
 
    def test_get_terminal_encoding_silent(self):
129
 
        self.make_wrapped_streams('stdout_encoding',
130
 
                                  'stderr_encoding',
131
 
                                  'stdin_encoding')
132
 
        # Calling get_terminal_encoding should not mutter when silent=True is
133
 
        # passed.
134
 
        log = self.get_log()
135
 
        osutils.get_terminal_encoding()
136
 
        self.assertEqual(log, self.get_log())
137
 
 
138
 
    def test_get_terminal_encoding_trace(self):
139
 
        self.make_wrapped_streams('stdout_encoding',
140
 
                                  'stderr_encoding',
141
 
                                  'stdin_encoding')
142
 
        # Calling get_terminal_encoding should not mutter when silent=True is
143
 
        # passed.
144
 
        log = self.get_log()
145
 
        osutils.get_terminal_encoding(trace=True)
146
 
        self.assertNotEqual(log, self.get_log())
147
 
 
148
117
    def test_terminal_cp0(self):
149
118
        # test cp0 encoding (Windows returns cp0 when there is no encoding)
150
119
        self.make_wrapped_streams('cp0',
157
126
        self.assertEqual('latin-1', osutils.get_terminal_encoding())
158
127
 
159
128
        # check stderr
160
 
        self.assertEqual('', sys.stderr.getvalue())
 
129
        self.assertEquals('', sys.stderr.getvalue())
161
130
 
162
131
    def test_terminal_cp_unknown(self):
163
132
        # test against really unknown encoding
171
140
        self.assertEqual('latin-1', osutils.get_terminal_encoding())
172
141
 
173
142
        # check stderr
174
 
        self.assertEqual('brz: warning: unknown terminal encoding cp-unknown.\n'
175
 
                         '  Using encoding latin-1 instead.\n',
176
 
                         sys.stderr.getvalue())
 
143
        self.assertEquals('bzr: warning: unknown terminal encoding cp-unknown.\n'
 
144
                          '  Using encoding latin-1 instead.\n',
 
145
                          sys.stderr.getvalue())
177
146
 
178
147
 
179
148
class TestUserEncoding(TestCase):
180
149
    """Test detection of default user encoding."""
181
150
 
182
151
    def setUp(self):
183
 
        super(TestUserEncoding, self).setUp()
184
 
        self.overrideAttr(osutils, '_cached_user_encoding', None)
185
 
        self.overrideAttr(locale, 'getpreferredencoding', self.get_encoding)
186
 
        self.overrideAttr(locale, 'CODESET', None)
187
 
        if PY3:
188
 
            self.overrideAttr(sys, 'stderr', StringIOWithEncoding())
189
 
        else:
190
 
            self.overrideAttr(sys, 'stderr', BytesIOWithEncoding())
191
 
 
192
 
    def get_encoding(self, do_setlocale=True):
193
 
        return self._encoding
 
152
        TestCase.setUp(self)
 
153
        self.overrideAttr(locale, 'getpreferredencoding')
 
154
        self.addCleanup(osutils.set_or_unset_env,
 
155
                        'LANG', os.environ.get('LANG'))
 
156
        self.overrideAttr(sys, 'stderr', StringIOWrapper())
194
157
 
195
158
    def test_get_user_encoding(self):
196
 
        self._encoding = 'user_encoding'
 
159
        def f():
 
160
            return 'user_encoding'
 
161
 
 
162
        locale.getpreferredencoding = f
197
163
        fake_codec.add('user_encoding')
198
 
        self.assertEqual('iso8859-1',  # fake_codec maps to latin-1
199
 
                         osutils.get_user_encoding())
200
 
        self.assertEqual('', sys.stderr.getvalue())
 
164
        self.assertEquals('user_encoding', osutils.get_user_encoding(use_cache=False))
 
165
        self.assertEquals('', sys.stderr.getvalue())
201
166
 
202
167
    def test_user_cp0(self):
203
 
        self._encoding = 'cp0'
204
 
        self.assertEqual('ascii', osutils.get_user_encoding())
205
 
        self.assertEqual('', sys.stderr.getvalue())
 
168
        def f():
 
169
            return 'cp0'
 
170
 
 
171
        locale.getpreferredencoding = f
 
172
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
 
173
        self.assertEquals('', sys.stderr.getvalue())
206
174
 
207
175
    def test_user_cp_unknown(self):
208
 
        self._encoding = 'cp-unknown'
209
 
        self.assertEqual('ascii', osutils.get_user_encoding())
210
 
        self.assertEqual('brz: warning: unknown encoding cp-unknown.'
211
 
                         ' Continuing with ascii encoding.\n',
212
 
                         sys.stderr.getvalue())
 
176
        def f():
 
177
            return 'cp-unknown'
 
178
 
 
179
        locale.getpreferredencoding = f
 
180
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
 
181
        self.assertEquals('bzr: warning: unknown encoding cp-unknown.'
 
182
                          ' Continuing with ascii encoding.\n',
 
183
                          sys.stderr.getvalue())
213
184
 
214
185
    def test_user_empty(self):
215
186
        """Running bzr from a vim script gives '' for a preferred locale"""
216
 
        self._encoding = ''
217
 
        self.assertEqual('ascii', osutils.get_user_encoding())
218
 
        self.assertEqual('', sys.stderr.getvalue())
 
187
        def f():
 
188
            return ''
 
189
 
 
190
        locale.getpreferredencoding = f
 
191
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
 
192
        self.assertEquals('', sys.stderr.getvalue())
 
193
 
 
194
    def test_user_locale_error(self):
 
195
        def f():
 
196
            raise locale.Error, 'unsupported locale'
 
197
 
 
198
        locale.getpreferredencoding = f
 
199
        os.environ['LANG'] = 'BOGUS'
 
200
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
 
201
        self.assertEquals('bzr: warning: unsupported locale\n'
 
202
                          '  Could not determine what text encoding to use.\n'
 
203
                          '  This error usually means your Python interpreter\n'
 
204
                          '  doesn\'t support the locale set by $LANG (BOGUS)\n'
 
205
                          '  Continuing with ascii encoding.\n',
 
206
                          sys.stderr.getvalue())