151
153
self.assertTrue(' branch 1' in out)
152
154
self.assertTrue(' first post' in out)
153
155
self.assertEqual('', err)
158
class TestLogEncodings(TestCaseInTempDir):
161
_message = u'Message with \xb5'
163
# Encodings which can encode mu
168
'cp437', # Common windows encoding
169
'cp1251', # Alexander Belchenko's windows encoding
170
'cp1258', # Common windows encoding
172
# Encodings which cannot encode mu
180
TestCaseInTempDir.setUp(self)
181
self.user_encoding = bzrlib.user_encoding
184
bzrlib.user_encoding = self.user_encoding
185
TestCaseInTempDir.tearDown(self)
187
def create_branch(self):
190
open('a', 'wb').write('some stuff\n')
192
bzr('commit', '-m', self._message)
194
def try_encoding(self, encoding, fail=False):
197
self.assertRaises(UnicodeEncodeError,
198
self._mu.encode, encoding)
199
encoded_msg = self._message.encode(encoding, 'replace')
201
encoded_msg = self._message.encode(encoding)
203
old_encoding = bzrlib.user_encoding
204
# This test requires that 'run_bzr' uses the current
205
# bzrlib, because we override user_encoding, and expect
208
bzrlib.user_encoding = 'ascii'
209
# We should be able to handle any encoding
210
out, err = bzr('log', encoding=encoding)
212
# Make sure we wrote mu as we expected it to exist
213
self.assertNotEqual(-1, out.find(encoded_msg))
214
out_unicode = out.decode(encoding)
215
self.assertNotEqual(-1, out_unicode.find(self._message))
217
self.assertNotEqual(-1, out.find('Message with ?'))
219
bzrlib.user_encoding = old_encoding
221
def test_log_handles_encoding(self):
224
for encoding in self.good_encodings:
225
self.try_encoding(encoding)
227
def test_log_handles_bad_encoding(self):
230
for encoding in self.bad_encodings:
231
self.try_encoding(encoding, fail=True)
233
def test_stdout_encoding(self):
235
bzrlib.user_encoding = "cp1251"
238
self.build_tree(['a'])
240
bzr('commit', '-m', u'\u0422\u0435\u0441\u0442')
241
stdout, stderr = self.run_bzr('log', encoding='cp866')
243
message = stdout.splitlines()[-1]
245
# explanation of the check:
246
# u'\u0422\u0435\u0441\u0442' is word 'Test' in russian
247
# in cp866 encoding this is string '\x92\xa5\xe1\xe2'
248
# in cp1251 encoding this is string '\xd2\xe5\xf1\xf2'
249
# This test should check that output of log command
250
# encoded to sys.stdout.encoding
251
test_in_cp866 = '\x92\xa5\xe1\xe2'
252
test_in_cp1251 = '\xd2\xe5\xf1\xf2'
253
# Make sure the log string is encoded in cp866
254
self.assertEquals(test_in_cp866, message[2:])
255
# Make sure the cp1251 string is not found anywhere
256
self.assertEquals(-1, stdout.find(test_in_cp1251))