~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_log.py

  • Committer: John Arbash Meinel
  • Date: 2006-09-11 22:48:57 UTC
  • mto: This revision was merged to the branch mainline in revision 2004.
  • Revision ID: john@arbash-meinel.com-20060911224857-d7008be21aeee33e
Switch from individual functions to a class

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2005 by Canonical Ltd
2
2
# -*- coding: utf-8 -*-
3
 
 
 
3
#
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.
8
 
 
 
8
#
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.
13
 
 
 
13
#
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
20
20
 
21
21
import os
22
22
 
 
23
import bzrlib
23
24
from bzrlib.tests.blackbox import ExternalBase
 
25
from bzrlib.tests import TestCaseInTempDir
24
26
 
25
27
 
26
28
class TestLog(ExternalBase):
151
153
        self.assertTrue('      branch 1' in out)
152
154
        self.assertTrue('  first post' in out)
153
155
        self.assertEqual('', err)
 
156
 
 
157
 
 
158
class TestLogEncodings(TestCaseInTempDir):
 
159
 
 
160
    _mu = u'\xb5'
 
161
    _message = u'Message with \xb5'
 
162
 
 
163
    # Encodings which can encode mu
 
164
    good_encodings = [
 
165
        'utf-8',
 
166
        'latin-1',
 
167
        'iso-8859-1',
 
168
        'cp437', # Common windows encoding
 
169
        'cp1251', # Alexander Belchenko's windows encoding
 
170
        'cp1258', # Common windows encoding
 
171
    ]
 
172
    # Encodings which cannot encode mu
 
173
    bad_encodings = [
 
174
        'ascii',
 
175
        'iso-8859-2',
 
176
        'koi8_r',
 
177
    ]
 
178
 
 
179
    def setUp(self):
 
180
        TestCaseInTempDir.setUp(self)
 
181
        self.user_encoding = bzrlib.user_encoding
 
182
 
 
183
    def tearDown(self):
 
184
        bzrlib.user_encoding = self.user_encoding
 
185
        TestCaseInTempDir.tearDown(self)
 
186
 
 
187
    def create_branch(self):
 
188
        bzr = self.run_bzr
 
189
        bzr('init')
 
190
        open('a', 'wb').write('some stuff\n')
 
191
        bzr('add', 'a')
 
192
        bzr('commit', '-m', self._message)
 
193
 
 
194
    def try_encoding(self, encoding, fail=False):
 
195
        bzr = self.run_bzr
 
196
        if fail:
 
197
            self.assertRaises(UnicodeEncodeError,
 
198
                self._mu.encode, encoding)
 
199
            encoded_msg = self._message.encode(encoding, 'replace')
 
200
        else:
 
201
            encoded_msg = self._message.encode(encoding)
 
202
 
 
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
 
206
        # it to be used
 
207
        try:
 
208
            bzrlib.user_encoding = 'ascii'
 
209
            # We should be able to handle any encoding
 
210
            out, err = bzr('log', encoding=encoding)
 
211
            if not fail:
 
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))
 
216
            else:
 
217
                self.assertNotEqual(-1, out.find('Message with ?'))
 
218
        finally:
 
219
            bzrlib.user_encoding = old_encoding
 
220
 
 
221
    def test_log_handles_encoding(self):
 
222
        self.create_branch()
 
223
 
 
224
        for encoding in self.good_encodings:
 
225
            self.try_encoding(encoding)
 
226
 
 
227
    def test_log_handles_bad_encoding(self):
 
228
        self.create_branch()
 
229
 
 
230
        for encoding in self.bad_encodings:
 
231
            self.try_encoding(encoding, fail=True)
 
232
 
 
233
    def test_stdout_encoding(self):
 
234
        bzr = self.run_bzr
 
235
        bzrlib.user_encoding = "cp1251"
 
236
 
 
237
        bzr('init')
 
238
        self.build_tree(['a'])
 
239
        bzr('add', 'a')
 
240
        bzr('commit', '-m', u'\u0422\u0435\u0441\u0442')
 
241
        stdout, stderr = self.run_bzr('log', encoding='cp866')
 
242
 
 
243
        message = stdout.splitlines()[-1]
 
244
 
 
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))
 
257