1
1
# Copyright (C) 2005 by Canonical Ltd
2
2
# -*- coding: utf-8 -*-
4
4
# This program is free software; you can redistribute it and/or modify
5
5
# it under the terms of the GNU General Public License as published by
6
6
# the Free Software Foundation; either version 2 of the License, or
7
7
# (at your option) any later version.
9
9
# This program is distributed in the hope that it will be useful,
10
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
12
# GNU General Public License for more details.
14
14
# You should have received a copy of the GNU General Public License
15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
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))