87
88
user_encoding='user_encoding',
88
89
enable_fake_encodings=True):
89
sys.stdout = StringIOWrapper()
90
sys.stdout = StringIOWithEncoding()
90
91
sys.stdout.encoding = stdout_encoding
91
sys.stderr = StringIOWrapper()
92
sys.stderr = StringIOWithEncoding()
92
93
sys.stderr.encoding = stderr_encoding
93
sys.stdin = StringIOWrapper()
94
sys.stdin = StringIOWithEncoding()
94
95
sys.stdin.encoding = stdin_encoding
95
96
osutils._cached_user_encoding = user_encoding
96
97
if enable_fake_encodings:
114
115
# and in the worst case, use osutils.get_user_encoding()
115
116
self.assertEqual('user_encoding', osutils.get_terminal_encoding())
118
def test_get_terminal_encoding_silent(self):
119
self.make_wrapped_streams('stdout_encoding',
122
# Calling get_terminal_encoding should not mutter when silent=True is
125
osutils.get_terminal_encoding()
126
self.assertEqual(log, self.get_log())
128
def test_get_terminal_encoding_trace(self):
129
self.make_wrapped_streams('stdout_encoding',
132
# Calling get_terminal_encoding should not mutter when silent=True is
135
osutils.get_terminal_encoding(trace=True)
136
self.assertNotEqual(log, self.get_log())
117
138
def test_terminal_cp0(self):
118
139
# test cp0 encoding (Windows returns cp0 when there is no encoding)
119
140
self.make_wrapped_streams('cp0',
140
161
self.assertEqual('latin-1', osutils.get_terminal_encoding())
143
self.assertEquals('bzr: warning: unknown terminal encoding cp-unknown.\n'
144
' Using encoding latin-1 instead.\n',
145
sys.stderr.getvalue())
164
self.assertEqual('brz: warning: unknown terminal encoding cp-unknown.\n'
165
' Using encoding latin-1 instead.\n',
166
sys.stderr.getvalue())
148
169
class TestUserEncoding(TestCase):
149
170
"""Test detection of default user encoding."""
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())
173
super(TestUserEncoding, self).setUp()
174
self.overrideAttr(osutils, '_cached_user_encoding', None)
175
self.overrideAttr(locale, 'getpreferredencoding', self.get_encoding)
176
self.overrideAttr(locale, 'CODESET', None)
177
self.overrideAttr(sys, 'stderr', StringIOWithEncoding())
179
def get_encoding(self, do_setlocale=True):
180
return self._encoding
158
182
def test_get_user_encoding(self):
160
return 'user_encoding'
162
locale.getpreferredencoding = f
183
self._encoding = 'user_encoding'
163
184
fake_codec.add('user_encoding')
164
self.assertEquals('user_encoding', osutils.get_user_encoding(use_cache=False))
165
self.assertEquals('', sys.stderr.getvalue())
185
self.assertEqual('iso8859-1', # fake_codec maps to latin-1
186
osutils.get_user_encoding())
187
self.assertEqual('', sys.stderr.getvalue())
167
189
def test_user_cp0(self):
171
locale.getpreferredencoding = f
172
self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
173
self.assertEquals('', sys.stderr.getvalue())
190
self._encoding = 'cp0'
191
self.assertEqual('ascii', osutils.get_user_encoding())
192
self.assertEqual('', sys.stderr.getvalue())
175
194
def test_user_cp_unknown(self):
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())
195
self._encoding = 'cp-unknown'
196
self.assertEqual('ascii', osutils.get_user_encoding())
197
self.assertEqual('brz: warning: unknown encoding cp-unknown.'
198
' Continuing with ascii encoding.\n',
199
sys.stderr.getvalue())
185
201
def test_user_empty(self):
186
202
"""Running bzr from a vim script gives '' for a preferred locale"""
190
locale.getpreferredencoding = f
191
self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
192
self.assertEquals('', sys.stderr.getvalue())
194
def test_user_locale_error(self):
196
raise locale.Error, 'unsupported locale'
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())
204
self.assertEqual('ascii', osutils.get_user_encoding())
205
self.assertEqual('', sys.stderr.getvalue())