~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils_encodings.py

  • Committer: Tarmac
  • Author(s): Vincent Ladeuil
  • Date: 2017-01-30 14:42:05 UTC
  • mfrom: (6620.1.1 trunk)
  • Revision ID: tarmac-20170130144205-r8fh2xpmiuxyozpv
Merge  2.7 into trunk including fix for bug #1657238 [r=vila]

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006-2012, 2016 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
22
21
import sys
23
22
 
24
23
from bzrlib import (
25
 
    errors,
26
24
    osutils,
27
25
    )
28
26
from bzrlib.tests import (
74
72
    """Test the auto-detection of proper terminal encoding."""
75
73
 
76
74
    def setUp(self):
77
 
        TestCase.setUp(self)
 
75
        super(TestTerminalEncoding, self).setUp()
78
76
        self.overrideAttr(sys, 'stdin')
79
77
        self.overrideAttr(sys, 'stdout')
80
78
        self.overrideAttr(sys, 'stderr')
146
144
        self.assertEqual('latin-1', osutils.get_terminal_encoding())
147
145
 
148
146
        # check stderr
149
 
        self.assertEquals('', sys.stderr.getvalue())
 
147
        self.assertEqual('', sys.stderr.getvalue())
150
148
 
151
149
    def test_terminal_cp_unknown(self):
152
150
        # test against really unknown encoding
160
158
        self.assertEqual('latin-1', osutils.get_terminal_encoding())
161
159
 
162
160
        # check stderr
163
 
        self.assertEquals('bzr: warning: unknown terminal encoding cp-unknown.\n'
 
161
        self.assertEqual('bzr: warning: unknown terminal encoding cp-unknown.\n'
164
162
                          '  Using encoding latin-1 instead.\n',
165
163
                          sys.stderr.getvalue())
166
164
 
169
167
    """Test detection of default user encoding."""
170
168
 
171
169
    def setUp(self):
172
 
        TestCase.setUp(self)
173
 
        self.overrideAttr(locale, 'getpreferredencoding')
174
 
        self.addCleanup(osutils.set_or_unset_env,
175
 
                        'LANG', os.environ.get('LANG'))
 
170
        super(TestUserEncoding, self).setUp()
 
171
        self.overrideAttr(osutils, '_cached_user_encoding', None)
 
172
        self.overrideAttr(locale, 'getpreferredencoding', self.get_encoding)
 
173
        self.overrideAttr(locale, 'CODESET', None)
176
174
        self.overrideAttr(sys, 'stderr', StringIOWrapper())
177
175
 
 
176
    def get_encoding(self, do_setlocale=True):
 
177
        return self._encoding
 
178
 
178
179
    def test_get_user_encoding(self):
179
 
        def f():
180
 
            return 'user_encoding'
181
 
 
182
 
        locale.getpreferredencoding = f
 
180
        self._encoding = 'user_encoding'
183
181
        fake_codec.add('user_encoding')
184
 
        self.assertEquals('user_encoding', osutils.get_user_encoding(use_cache=False))
185
 
        self.assertEquals('', sys.stderr.getvalue())
 
182
        self.assertEqual('iso8859-1', # fake_codec maps to latin-1
 
183
                          osutils.get_user_encoding())
 
184
        self.assertEqual('', sys.stderr.getvalue())
186
185
 
187
186
    def test_user_cp0(self):
188
 
        def f():
189
 
            return 'cp0'
190
 
 
191
 
        locale.getpreferredencoding = f
192
 
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
193
 
        self.assertEquals('', sys.stderr.getvalue())
 
187
        self._encoding = 'cp0'
 
188
        self.assertEqual('ascii', osutils.get_user_encoding())
 
189
        self.assertEqual('', sys.stderr.getvalue())
194
190
 
195
191
    def test_user_cp_unknown(self):
196
 
        def f():
197
 
            return 'cp-unknown'
198
 
 
199
 
        locale.getpreferredencoding = f
200
 
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
201
 
        self.assertEquals('bzr: warning: unknown encoding cp-unknown.'
 
192
        self._encoding = 'cp-unknown'
 
193
        self.assertEqual('ascii', osutils.get_user_encoding())
 
194
        self.assertEqual('bzr: warning: unknown encoding cp-unknown.'
202
195
                          ' Continuing with ascii encoding.\n',
203
196
                          sys.stderr.getvalue())
204
197
 
205
198
    def test_user_empty(self):
206
199
        """Running bzr from a vim script gives '' for a preferred locale"""
207
 
        def f():
208
 
            return ''
209
 
 
210
 
        locale.getpreferredencoding = f
211
 
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
212
 
        self.assertEquals('', sys.stderr.getvalue())
213
 
 
214
 
    def test_user_locale_error(self):
215
 
        def f():
216
 
            raise locale.Error, 'unsupported locale'
217
 
 
218
 
        locale.getpreferredencoding = f
219
 
        os.environ['LANG'] = 'BOGUS'
220
 
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
221
 
        self.assertEquals('bzr: warning: unsupported locale\n'
222
 
                          '  Could not determine what text encoding to use.\n'
223
 
                          '  This error usually means your Python interpreter\n'
224
 
                          '  doesn\'t support the locale set by $LANG (BOGUS)\n'
225
 
                          '  Continuing with ascii encoding.\n',
226
 
                          sys.stderr.getvalue())
 
200
        self._encoding = ''
 
201
        self.assertEqual('ascii', osutils.get_user_encoding())
 
202
        self.assertEqual('', sys.stderr.getvalue())