34
from . import features, TestCaseInTempDir, TestCase, TestSkipped
33
from ..sixish import (
37
from . import features, TestCaseInTempDir, TestCase
35
38
from ..trace import (
36
39
mutter, mutter_callsite, report_exception,
37
40
set_verbosity_level, get_verbosity_level, is_quiet, is_verbose, be_quiet,
141
144
def test_format_unicode_error(self):
143
raise errors.CommandError(u'argument foo\xb5 does not exist')
144
except errors.CommandError:
146
raise errors.BzrCommandError(u'argument foo\xb5 does not exist')
147
except errors.BzrCommandError:
145
148
msg = _format_exception()
146
expected = 'brz: ERROR: argument foo\xb5 does not exist\n'
150
expected = 'brz: ERROR: argument foo\xb5 does not exist\n'
152
# GZ 2017-06-10: Pretty bogus, should encode per the output stream
153
expected = 'brz: ERROR: argument foo\xc2\xb5 does not exist\n'
147
154
self.assertEqual(msg, expected)
149
156
def test_format_exception(self):
320
327
self.overrideEnv('BRZ_LOG', '/no-such-dir/brz.log')
321
328
self.overrideAttr(trace, '_brz_log_filename')
322
329
logf = trace._open_brz_log()
323
if os.path.isdir('/no-such-dir'):
324
raise TestSkipped('directory creation succeeded')
325
330
self.assertIs(None, logf)
326
331
self.assertContainsRe(
327
332
sys.stderr.getvalue(),
328
333
"failed to open trace file: .* '/no-such-dir/brz.log'$")
330
def test__open_brz_log_ignores_cache_dir_error(self):
331
# If the cache directory can not be created and _open_brz_log can thus
332
# not open the file, then we should write the warning to stderr. Since
333
# this is normally happening before logging is set up.
334
self.overrideAttr(sys, 'stderr', StringIO())
335
# Set the cache directory to something that cannot exist
336
self.overrideEnv('BRZ_LOG', None)
337
self.overrideEnv('BRZ_HOME', '/no-such-dir')
338
self.overrideEnv('XDG_CACHE_HOME', '/no-such-dir')
339
self.overrideAttr(trace, '_brz_log_filename')
340
logf = trace._open_brz_log()
341
if os.path.isdir('/no-such-dir'):
342
raise TestSkipped('directory creation succeeded')
343
self.assertIs(None, logf)
344
self.assertContainsRe(
345
sys.stderr.getvalue(),
346
"failed to open trace file: .* '/no-such-dir'$")
349
336
class TestVerbosityLevel(TestCase):
404
391
def test_log_utf8_arg(self):
405
392
logging.getLogger("brz").debug(b"%s", b"\xc2\xa7")
406
expected = u" DEBUG b'\\xc2\\xa7'\n"
394
expected = u" DEBUG b'\\xc2\\xa7'\n"
396
expected = u" DEBUG \xa7\n"
407
397
self.assertEqual(expected, self.get_log())
409
399
def test_log_bytes_msg(self):
416
406
def test_log_bytes_arg(self):
417
407
logging.getLogger("brz").debug(b"%s", b"\xa7")
418
408
log = self.get_log()
419
self.assertEqual(u" DEBUG b'\\xa7'\n", self.get_log())
410
self.assertEqual(u" DEBUG b'\\xa7'\n", self.get_log())
412
self.assertContainsString(log, "UnicodeDecodeError: ")
413
self.assertContainsRe(
415
"Logging record unformattable: ?'%s' % \\(b?'\\\\xa7',\\)\n")
421
417
def test_log_mixed_strings(self):
422
418
logging.getLogger("brz").debug(u"%s", b"\xa7")
423
419
log = self.get_log()
424
self.assertEqual(u" DEBUG b'\\xa7'\n", self.get_log())
421
self.assertEqual(u" DEBUG b'\\xa7'\n", self.get_log())
423
self.assertContainsString(log, "UnicodeDecodeError: ")
424
self.assertContainsRe(
426
"Logging record unformattable: u'%s' % \\('\\\\xa7',\\)\n")
426
428
def test_log_repr_broken(self):
427
429
class BadRepr(object):