89
87
user_encoding='user_encoding',
90
88
enable_fake_encodings=True):
92
sys.stdout = StringIOWithEncoding()
94
sys.stdout = BytesIOWithEncoding()
89
sys.stdout = StringIOWrapper()
95
90
sys.stdout.encoding = stdout_encoding
97
sys.stderr = StringIOWithEncoding()
99
sys.stderr = BytesIOWithEncoding()
91
sys.stderr = StringIOWrapper()
100
92
sys.stderr.encoding = stderr_encoding
102
sys.stdin = StringIOWithEncoding()
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:
171
160
self.assertEqual('latin-1', osutils.get_terminal_encoding())
174
self.assertEqual('brz: warning: unknown terminal encoding cp-unknown.\n'
175
' Using encoding latin-1 instead.\n',
176
sys.stderr.getvalue())
163
self.assertEquals('bzr: warning: unknown terminal encoding cp-unknown.\n'
164
' Using encoding latin-1 instead.\n',
165
sys.stderr.getvalue())
179
168
class TestUserEncoding(TestCase):
180
169
"""Test detection of default user encoding."""
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)
188
self.overrideAttr(sys, 'stderr', StringIOWithEncoding())
190
self.overrideAttr(sys, 'stderr', BytesIOWithEncoding())
192
def get_encoding(self, do_setlocale=True):
193
return self._encoding
173
self.overrideAttr(locale, 'getpreferredencoding')
174
self.addCleanup(osutils.set_or_unset_env,
175
'LANG', os.environ.get('LANG'))
176
self.overrideAttr(sys, 'stderr', StringIOWrapper())
195
178
def test_get_user_encoding(self):
196
self._encoding = 'user_encoding'
180
return 'user_encoding'
182
locale.getpreferredencoding = f
197
183
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())
184
self.assertEquals('user_encoding', osutils.get_user_encoding(use_cache=False))
185
self.assertEquals('', sys.stderr.getvalue())
202
187
def test_user_cp0(self):
203
self._encoding = 'cp0'
204
self.assertEqual('ascii', osutils.get_user_encoding())
205
self.assertEqual('', sys.stderr.getvalue())
191
locale.getpreferredencoding = f
192
self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
193
self.assertEquals('', sys.stderr.getvalue())
207
195
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())
199
locale.getpreferredencoding = f
200
self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
201
self.assertEquals('bzr: warning: unknown encoding cp-unknown.'
202
' Continuing with ascii encoding.\n',
203
sys.stderr.getvalue())
214
205
def test_user_empty(self):
215
206
"""Running bzr from a vim script gives '' for a preferred locale"""
217
self.assertEqual('ascii', osutils.get_user_encoding())
218
self.assertEqual('', sys.stderr.getvalue())
210
locale.getpreferredencoding = f
211
self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
212
self.assertEquals('', sys.stderr.getvalue())
214
def test_user_locale_error(self):
216
raise locale.Error, 'unsupported locale'
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())