~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils_encodings.py

  • Committer: Jelmer Vernooij
  • Date: 2012-01-06 22:44:57 UTC
  • mfrom: (6436 +trunk)
  • mto: (6437.3.11 2.5)
  • mto: This revision was merged to the branch mainline in revision 6444.
  • Revision ID: jelmer@samba.org-20120106224457-re0pcy0fz31xob77
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
"""Tests for the osutils wrapper."""
18
18
 
19
19
import codecs
20
 
import errno
21
20
import locale
22
 
import os
23
21
import sys
24
22
 
25
23
from bzrlib import (
170
168
 
171
169
    def setUp(self):
172
170
        TestCase.setUp(self)
173
 
        self.overrideAttr(locale, 'getpreferredencoding')
 
171
        self.overrideAttr(osutils, '_cached_user_encoding', None)
 
172
        self.overrideAttr(locale, 'getpreferredencoding', self.get_encoding)
 
173
        self.overrideAttr(locale, 'CODESET', None)
174
174
        self.overrideAttr(sys, 'stderr', StringIOWrapper())
175
175
 
 
176
    def get_encoding(self, do_setlocale=True):
 
177
        return self._encoding
 
178
 
176
179
    def test_get_user_encoding(self):
177
 
        def f():
178
 
            return 'user_encoding'
179
 
 
180
 
        locale.getpreferredencoding = f
 
180
        self._encoding = 'user_encoding'
181
181
        fake_codec.add('user_encoding')
182
 
        self.assertEquals('user_encoding',
183
 
                          osutils.get_user_encoding(use_cache=False))
 
182
        self.assertEquals('iso8859-1', # fake_codec maps to latin-1
 
183
                          osutils.get_user_encoding())
184
184
        self.assertEquals('', sys.stderr.getvalue())
185
185
 
186
186
    def test_user_cp0(self):
187
 
        def f():
188
 
            return 'cp0'
189
 
 
190
 
        locale.getpreferredencoding = f
191
 
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
 
187
        self._encoding = 'cp0'
 
188
        self.assertEquals('ascii', osutils.get_user_encoding())
192
189
        self.assertEquals('', sys.stderr.getvalue())
193
190
 
194
191
    def test_user_cp_unknown(self):
195
 
        def f():
196
 
            return 'cp-unknown'
197
 
 
198
 
        locale.getpreferredencoding = f
199
 
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
 
192
        self._encoding = 'cp-unknown'
 
193
        self.assertEquals('ascii', osutils.get_user_encoding())
200
194
        self.assertEquals('bzr: warning: unknown encoding cp-unknown.'
201
195
                          ' Continuing with ascii encoding.\n',
202
196
                          sys.stderr.getvalue())
203
197
 
204
198
    def test_user_empty(self):
205
199
        """Running bzr from a vim script gives '' for a preferred locale"""
206
 
        def f():
207
 
            return ''
208
 
 
209
 
        locale.getpreferredencoding = f
210
 
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
 
200
        self._encoding = ''
 
201
        self.assertEquals('ascii', osutils.get_user_encoding())
211
202
        self.assertEquals('', sys.stderr.getvalue())
212
 
 
213
 
    def test_user_locale_error(self):
214
 
        def f():
215
 
            raise locale.Error, 'unsupported locale'
216
 
 
217
 
        locale.getpreferredencoding = f
218
 
        self.overrideEnv('LANG', 'BOGUS')
219
 
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
220
 
        self.assertEquals('bzr: warning: unsupported locale\n'
221
 
                          '  Could not determine what text encoding to use.\n'
222
 
                          '  This error usually means your Python interpreter\n'
223
 
                          '  doesn\'t support the locale set by $LANG (BOGUS)\n'
224
 
                          '  Continuing with ascii encoding.\n',
225
 
                          sys.stderr.getvalue())
226
 
 
227
 
 
228
 
class TestMessageEncoding(TestCase):
229
 
    """Tests for getting the encoding used by system messages"""
230
 
 
231
 
    def test_get_message_encoding(self):
232
 
        encoding_name = osutils.get_message_encoding()
233
 
        "".decode(encoding_name) # should be a valid encoding name
234
 
 
235
 
    def test_get_message_encoding_decodes_strerror(self):
236
 
        encoding_name = osutils.get_message_encoding()
237
 
        for number, name in errno.errorcode.iteritems():
238
 
            string = os.strerror(number)
239
 
            string.decode(encoding_name)