29
29
from bzrlib.tests import TestCaseInTempDir, TestCase
30
from bzrlib.trace import mutter, report_exception
30
from bzrlib.trace import (
31
mutter, mutter_callsite, report_exception,
32
set_verbosity_level, get_verbosity_level, is_quiet, is_verbose, be_quiet,
33
36
def _format_exception():
84
87
msg = _format_exception()
85
88
self.assertTrue(len(msg) > 0)
86
self.assertEqualDiff(msg, 'bzr: ERROR: Not a branch: wibble\n')
89
self.assertEqualDiff(msg, 'bzr: ERROR: Not a branch: \"wibble\".\n')
88
91
def test_trace_unicode(self):
89
92
"""Write Unicode to trace log"""
114
117
self.fail("expected error not raised")
119
def test_mutter_callsite_1(self):
120
"""mutter_callsite can capture 1 level of stack frame."""
121
mutter_callsite(1, "foo %s", "a string")
122
log = self._get_log(keep_log_file=True)
123
# begin with the message
124
self.assertStartsWith(log, 'foo a string\nCalled from:\n')
125
# should show two frame: this frame and the one above
126
self.assertContainsRe(log,
127
'test_trace\.py", line \d+, in test_mutter_callsite_1\n')
128
# this frame should be the final one
129
self.assertEndsWith(log, ' "a string")\n')
131
def test_mutter_callsite_2(self):
132
"""mutter_callsite can capture 2 levels of stack frame."""
133
mutter_callsite(2, "foo %s", "a string")
134
log = self._get_log(keep_log_file=True)
135
# begin with the message
136
self.assertStartsWith(log, 'foo a string\nCalled from:\n')
137
# should show two frame: this frame and the one above
138
self.assertContainsRe(log,
139
'test_trace.py", line \d+, in test_mutter_callsite_2\n')
140
# this frame should be the final one
141
self.assertEndsWith(log, ' "a string")\n')
116
143
def test_mutter_never_fails(self):
117
144
# Even if the decode/encode stage fails, mutter should not
118
145
# raise an exception
123
150
self.assertContainsRe(log, 'Writing a greek mu')
124
151
self.assertContainsRe(log, "But fails in an ascii string")
125
152
self.assertContainsRe(log, u"ascii argument: \xb5")
155
class TestVerbosityLevel(TestCase):
157
def test_verbosity_level(self):
158
set_verbosity_level(1)
159
self.assertEqual(1, get_verbosity_level())
160
self.assertTrue(is_verbose())
161
self.assertFalse(is_quiet())
162
set_verbosity_level(-1)
163
self.assertEqual(-1, get_verbosity_level())
164
self.assertFalse(is_verbose())
165
self.assertTrue(is_quiet())
166
set_verbosity_level(0)
167
self.assertEqual(0, get_verbosity_level())
168
self.assertFalse(is_verbose())
169
self.assertFalse(is_quiet())
171
def test_be_quiet(self):
172
# Confirm the old API still works
174
self.assertEqual(-1, get_verbosity_level())
176
self.assertEqual(0, get_verbosity_level())