16
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24
from bzrlib import pyutils
23
from .. import pyutils
26
25
# Mark this python module as being part of the implementation
27
26
# of unittest: this gives us better tracebacks where the last
42
41
def makeCollectingLogger():
43
42
"""I make a logger instance that collects its logs for programmatic analysis
44
43
-> (logger, collector)"""
45
logger=logging.Logger("collector")
46
handler=LogCollector()
44
logger = logging.Logger("collector")
45
handler = LogCollector()
47
46
handler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
48
47
logger.addHandler(handler)
49
48
return logger, handler
52
51
def visitTests(suite, visitor):
53
52
"""A foreign method for visiting the tests in a test suite."""
54
53
for test in suite._tests:
55
#Abusing types to avoid monkey patching unittest.TestCase.
54
# Abusing types to avoid monkey patching unittest.TestCase.
56
55
# Maybe that would be better?
58
57
test.visit(visitor)
63
62
visitor.visitSuite(test)
64
63
visitTests(test, visitor)
66
print "unvisitable non-unittest.TestCase element %r (%r)" % (
65
print("unvisitable non-unittest.TestCase element %r (%r)" % (
66
test, test.__class__))
70
69
class FailedCollectionCase(unittest.TestCase):
105
104
count_stored_tests = getattr(result, "_count_stored_tests", int)
106
from bzrlib.tests import selftest_debug_flags
105
from breezy.tests import selftest_debug_flags
107
106
notify = "uncollected_cases" in selftest_debug_flags
109
108
if result.shouldStop:
155
154
result.addTests(self.loadTestsFromModule(module))
158
def loadTestsFromModule(self, module):
159
"""Load tests from a module object.
161
This extension of the python test loader looks for an attribute
162
load_tests in the module object, and if not found falls back to the
163
regular python loadTestsFromModule.
165
If a load_tests attribute is found, it is called and the result is
168
load_tests should be defined like so:
169
>>> def load_tests(standard_tests, module, loader):
172
standard_tests is the tests found by the stock TestLoader in the
173
module, module and loader are the module and loader instances.
175
For instance, to run every test twice, you might do:
176
>>> def load_tests(standard_tests, module, loader):
177
>>> result = loader.suiteClass()
178
>>> for test in iter_suite_tests(standard_tests):
179
>>> result.addTests([test, test])
182
if sys.version_info < (2, 7):
183
basic_tests = super(TestLoader, self).loadTestsFromModule(module)
185
# GZ 2010-07-19: Python 2.7 unittest also uses load_tests but with
186
# a different and incompatible signature
187
basic_tests = super(TestLoader, self).loadTestsFromModule(module,
188
use_load_tests=False)
189
load_tests = getattr(module, "load_tests", None)
190
if load_tests is not None:
191
return load_tests(basic_tests, module, self)
195
157
def getTestCaseNames(self, test_case_class):
196
158
test_fn_names = self.test_func_names.get(test_case_class, None)
197
159
if test_fn_names is not None: