290
290
for test, err in errors:
291
291
self.stream.writeln(self.separator1)
292
292
self.stream.write("%s: " % flavour)
293
if self.use_numbered_dirs:
294
294
self.stream.write('#%d ' % test.number)
295
295
self.stream.writeln(self.getDescription(test))
296
296
if getattr(test, '_get_log', None) is not None:
320
320
bench_history=None,
323
use_numbered_dirs=False,
324
325
ExtendedTestResult.__init__(self, stream, descriptions, verbosity,
325
bench_history, num_tests)
326
bench_history, num_tests, use_numbered_dirs)
327
328
self.pb = self.ui.nested_progress_bar()
328
329
self._supplied_pb = False
364
365
+ self._shortened_test_description(test))
366
367
def _test_description(self, test):
368
if self.use_numbered_dirs:
368
369
return '#%d %s' % (self.count,
369
370
self._shortened_test_description(test))
433
434
# width needs space for 6 char status, plus 1 for slash, plus 2 10-char
434
435
# numbers, plus a trailing blank
435
436
# when NUMBERED_DIRS: plus 5 chars on test number, plus 1 char on space
437
if self.use_numbered_dirs:
437
438
self.stream.write('%5d ' % self.count)
438
439
self.stream.write(self._ellipsize_to_right(name,
439
440
osutils.terminal_width()-36))
495
496
keep_output=False,
498
use_numbered_dirs=False,
497
500
self.stream = unittest._WritelnDecorator(stream)
498
501
self.descriptions = descriptions
499
502
self.verbosity = verbosity
500
503
self.keep_output = keep_output
501
504
self._bench_history = bench_history
505
self.use_numbered_dirs = use_numbered_dirs
503
507
def run(self, test):
504
508
"Run the given test case or test suite."
513
517
bench_history=self._bench_history,
514
518
num_tests=test.countTestCases(),
519
use_numbered_dirs=self.use_numbered_dirs,
516
521
result.stop_early = self.stop_on_failure
517
522
result.report_starting()
571
576
test_root = test_root.encode(
572
577
sys.getfilesystemencoding())
574
osutils.rmtree(test_root)
576
if sys.platform == 'win32' and e.errno == errno.EACCES:
577
print >>sys.stderr, ('Permission denied: '
578
'unable to remove testing dir '
579
'%s' % os.path.basename(test_root))
578
_rmtree_temp_dir(test_root)
583
580
note("Failed tests working directories are in '%s'\n", test_root)
584
581
TestCaseWithMemoryTransport.TEST_ROOT = None
754
751
self._startLogFile()
755
752
self._benchcalls = []
756
753
self._benchtime = None
756
def _clear_hooks(self):
757
757
# prevent hooks affecting tests
758
self._preserved_hooks = bzrlib.branch.Branch.hooks
759
import bzrlib.smart.server
760
self._preserved_hooks = {
761
bzrlib.branch.Branch: bzrlib.branch.Branch.hooks,
762
bzrlib.smart.server.SmartTCPServer: bzrlib.smart.server.SmartTCPServer.hooks,
759
764
self.addCleanup(self._restoreHooks)
760
765
# this list of hooks must be kept in sync with the defaults
762
767
bzrlib.branch.Branch.hooks = bzrlib.branch.BranchHooks()
768
bzrlib.smart.server.SmartTCPServer.hooks = \
769
bzrlib.smart.server.SmartServerHooks()
764
771
def _silenceUI(self):
765
772
"""Turn off UI for duration of test"""
868
875
excName = str(excClass)
869
876
raise self.failureException, "%s not raised" % excName
878
def assertRaises(self, excClass, func, *args, **kwargs):
879
"""Assert that a callable raises a particular exception.
881
:param excClass: As for the except statement, this may be either an
882
exception class, or a tuple of classes.
884
Returns the exception so that you can examine it.
887
func(*args, **kwargs)
891
if getattr(excClass,'__name__', None) is not None:
892
excName = excClass.__name__
895
excName = str(excClass)
896
raise self.failureException, "%s not raised" % excName
871
898
def assertIs(self, left, right, message=None):
872
899
if not (left is right):
873
900
if message is not None:
900
927
self.fail("%r is an instance of %s rather than %s" % (
901
928
obj, obj.__class__, kls))
930
def expectFailure(self, reason, assertion, *args, **kwargs):
931
"""Invoke a test, expecting it to fail for the given reason.
933
This is for assertions that ought to succeed, but currently fail.
934
(The failure is *expected* but not *wanted*.) Please be very precise
935
about the failure you're expecting. If a new bug is introduced,
936
AssertionError should be raised, not KnownFailure.
938
Frequently, expectFailure should be followed by an opposite assertion.
941
Intended to be used with a callable that raises AssertionError as the
942
'assertion' parameter. args and kwargs are passed to the 'assertion'.
944
Raises KnownFailure if the test fails. Raises AssertionError if the
949
self.expectFailure('Math is broken', self.assertNotEqual, 54,
951
self.assertEqual(42, dynamic_val)
953
This means that a dynamic_val of 54 will cause the test to raise
954
a KnownFailure. Once math is fixed and the expectFailure is removed,
955
only a dynamic_val of 42 will allow the test to pass. Anything other
956
than 54 or 42 will cause an AssertionError.
959
assertion(*args, **kwargs)
960
except AssertionError:
961
raise KnownFailure(reason)
963
self.fail('Unexpected success. Should have failed: %s' % reason)
903
965
def _capture_warnings(self, a_callable, *args, **kwargs):
904
966
"""A helper for callDeprecated and applyDeprecated.
1043
1105
osutils.set_or_unset_env(name, value)
1045
1107
def _restoreHooks(self):
1046
bzrlib.branch.Branch.hooks = self._preserved_hooks
1108
for klass, hooks in self._preserved_hooks.items():
1109
setattr(klass, 'hooks', hooks)
1048
1111
def knownFailure(self, reason):
1049
1112
"""This test has failed for some known reason."""
1767
1830
OVERRIDE_PYTHON = 'python'
1831
use_numbered_dirs = False
1769
1833
def check_file_contents(self, filename, expect):
1770
1834
self.log("check contents of file %s" % filename)
1780
1844
For TestCaseInTempDir we create a temporary directory based on the test
1781
1845
name and then create two subdirs - test and home under it.
1783
if NUMBERED_DIRS: # strongly recommended on Windows
1784
# due the path length limitation (260 chars)
1847
if self.use_numbered_dirs: # strongly recommended on Windows
1848
# due the path length limitation (260 ch.)
1785
1849
candidate_dir = '%s/%dK/%05d' % (self.TEST_ROOT,
1786
1850
int(self.number/1000),
2010
2074
transport=None, lsprof_timed=None, bench_history=None,
2011
2075
matching_tests_first=None,
2012
2076
numbered_dirs=None):
2013
global NUMBERED_DIRS
2077
use_numbered_dirs = bool(numbered_dirs)
2079
TestCase._gather_lsprof_in_benchmarks = lsprof_timed
2014
2080
if numbered_dirs is not None:
2015
NUMBERED_DIRS = bool(numbered_dirs)
2017
TestCase._gather_lsprof_in_benchmarks = lsprof_timed
2081
TestCaseInTempDir.use_numbered_dirs = use_numbered_dirs
2023
2087
descriptions=0,
2024
2088
verbosity=verbosity,
2025
2089
keep_output=keep_output,
2026
bench_history=bench_history)
2090
bench_history=bench_history,
2091
use_numbered_dirs=use_numbered_dirs,
2027
2093
runner.stop_on_failure=stop_on_failure
2028
2094
if pattern != '.*':
2029
2095
if matching_tests_first:
2107
2173
'bzrlib.tests.test_gpg',
2108
2174
'bzrlib.tests.test_graph',
2109
2175
'bzrlib.tests.test_hashcache',
2176
'bzrlib.tests.test_help',
2110
2177
'bzrlib.tests.test_http',
2111
2178
'bzrlib.tests.test_http_response',
2112
2179
'bzrlib.tests.test_https_ca_bundle',
2137
2204
'bzrlib.tests.test_progress',
2138
2205
'bzrlib.tests.test_reconcile',
2139
2206
'bzrlib.tests.test_registry',
2207
'bzrlib.tests.test_remote',
2140
2208
'bzrlib.tests.test_repository',
2141
2209
'bzrlib.tests.test_revert',
2142
2210
'bzrlib.tests.test_revision',
2147
2215
'bzrlib.tests.test_selftest',
2148
2216
'bzrlib.tests.test_setup',
2149
2217
'bzrlib.tests.test_sftp_transport',
2218
'bzrlib.tests.test_smart',
2150
2219
'bzrlib.tests.test_smart_add',
2151
2220
'bzrlib.tests.test_smart_transport',
2152
2221
'bzrlib.tests.test_source',
2227
2296
suite.addTests(adapter.adapt(test))
2299
def _rmtree_temp_dir(dirname):
2301
osutils.rmtree(dirname)
2303
if sys.platform == 'win32' and e.errno == errno.EACCES:
2304
print >>sys.stderr, ('Permission denied: '
2305
'unable to remove testing dir '
2306
'%s' % os.path.basename(dirname))
2230
2311
def clean_selftest_output(root=None, quiet=False):
2231
2312
"""Remove all selftest output directories from root directory.