325
329
+ self._shortened_test_description(test))
331
def _test_description(self, test):
333
return '#%d %s' % (self.count,
334
self._shortened_test_description(test))
336
return self._shortened_test_description(test)
327
338
def report_error(self, test, err):
328
339
self.error_count += 1
329
340
self.pb.note('ERROR: %s\n %s\n',
330
self._shortened_test_description(test),
341
self._test_description(test),
334
345
def report_failure(self, test, err):
335
346
self.failure_count += 1
336
347
self.pb.note('FAIL: %s\n %s\n',
337
self._shortened_test_description(test),
348
self._test_description(test),
380
391
name = self._shortened_test_description(test)
381
392
# width needs space for 6 char status, plus 1 for slash, plus 2 10-char
382
393
# numbers, plus a trailing blank
383
self.stream.write(self._ellipsize_to_right(name,
384
osutils.terminal_width()-30))
394
# when NUMBERED_DIRS: plus 5 chars on test number, plus 1 char on space
396
self.stream.write('%5d ' % self.count)
397
self.stream.write(self._ellipsize_to_right(name,
398
osutils.terminal_width()-36))
400
self.stream.write(self._ellipsize_to_right(name,
401
osutils.terminal_width()-30))
385
402
self.stream.flush()
404
def _error_summary(self, err):
408
return '%s%s' % (indent, err[1])
387
410
def report_error(self, test, err):
388
411
self.error_count += 1
389
self.stream.writeln('ERROR %s\n %s'
390
% (self._testTimeString(), err[1]))
412
self.stream.writeln('ERROR %s\n%s'
413
% (self._testTimeString(),
414
self._error_summary(err)))
392
416
def report_failure(self, test, err):
393
417
self.failure_count += 1
394
self.stream.writeln(' FAIL %s\n %s'
395
% (self._testTimeString(), err[1]))
418
self.stream.writeln(' FAIL %s\n%s'
419
% (self._testTimeString(),
420
self._error_summary(err)))
397
422
def report_success(self, test):
398
423
self.stream.writeln(' OK %s' % self._testTimeString())
399
424
for bench_called, stats in getattr(test, '_benchcalls', []):
426
self.stream.write(' ' * 6)
400
427
self.stream.writeln('LSProf output for %s(%s, %s)' % bench_called)
401
428
stats.pprint(file=self.stream)
402
429
self.stream.flush()
404
431
def report_skip(self, test, skip_excinfo):
405
print >>self.stream, ' SKIP %s' % self._testTimeString()
406
print >>self.stream, ' %s' % skip_excinfo[1]
433
self.stream.writeln(' SKIP %s\n%s'
434
% (self._testTimeString(),
435
self._error_summary(skip_excinfo)))
409
438
class TextTestRunner(object):
456
485
self.stream.writeln(")")
458
487
self.stream.writeln("OK")
488
if result.skip_count > 0:
489
skipped = result.skip_count
490
self.stream.writeln('%d test%s skipped' %
491
(skipped, skipped != 1 and "s" or ""))
459
492
result.report_cleaning_up()
460
493
# This is still a little bogus,
461
494
# but only a little. Folk not using our testrunner will
608
641
charjunk=lambda x: False)
609
642
return ''.join(difflines)
644
def assertEqual(self, a, b, message=''):
649
raise AssertionError("%snot equal:\na = %s\nb = %s\n"
651
pformat(a, indent=4), pformat(b, indent=4)))
653
assertEquals = assertEqual
611
655
def assertEqualDiff(self, a, b, message=None):
612
656
"""Assert two texts are equal, if not raise an exception.
638
682
def assertContainsRe(self, haystack, needle_re):
639
683
"""Assert that a contains something matching a regular expression."""
640
684
if not re.search(needle_re, haystack):
641
raise AssertionError('pattern "%s" not found in "%s"'
685
raise AssertionError('pattern "%r" not found in "%r"'
642
686
% (needle_re, haystack))
644
688
def assertNotContainsRe(self, haystack, needle_re):
749
793
expected_first_warning = symbol_versioning.deprecation_string(
750
794
a_callable, deprecation_format)
751
795
if len(call_warnings) == 0:
752
self.fail("No assertion generated by call to %s" %
796
self.fail("No deprecation warning generated by call to %s" %
754
798
self.assertEqual(expected_first_warning, call_warnings[0])
1010
1054
where it may be useful for debugging. See also run_captured.
1012
1056
:param stdin: A string to be used as stdin for the command.
1057
:param retcode: The status code the command should return
1058
:param working_dir: The directory to run the command in
1014
1060
retcode = kwargs.pop('retcode', 0)
1015
1061
encoding = kwargs.pop('encoding', None)
1503
1549
For TestCaseInTempDir we create a temporary directory based on the test
1504
1550
name and then create two subdirs - test and home under it.
1552
if NUMBERED_DIRS: # strongly recommended on Windows
1553
# due the path length limitation (260 chars)
1554
candidate_dir = '%s/%dK/%05d' % (self.TEST_ROOT,
1555
int(self.number/1000),
1557
os.makedirs(candidate_dir)
1558
self.test_home_dir = candidate_dir + '/home'
1559
os.mkdir(self.test_home_dir)
1560
self.test_dir = candidate_dir + '/work'
1561
os.mkdir(self.test_dir)
1562
os.chdir(self.test_dir)
1563
# put name of test inside
1564
f = file(candidate_dir + '/name', 'w')
1506
1569
# shorten the name, to avoid test failures due to path length
1507
1570
short_id = self.id().replace('bzrlib.tests.', '') \
1508
1571
.replace('__main__.', '')[-100:]
1660
1723
self.fail("path %s is not a directory; has mode %#o"
1661
1724
% (relpath, mode))
1726
def assertTreesEqual(self, left, right):
1727
"""Check that left and right have the same content and properties."""
1728
# we use a tree delta to check for equality of the content, and we
1729
# manually check for equality of other things such as the parents list.
1730
self.assertEqual(left.get_parent_ids(), right.get_parent_ids())
1731
differences = left.changes_from(right)
1732
self.assertFalse(differences.has_changed(),
1733
"Trees %r and %r are different: %r" % (left, right, differences))
1663
1735
def setUp(self):
1664
1736
super(TestCaseWithTransport, self).setUp()
1665
1737
self.__server = None
1707
1779
def run_suite(suite, name='test', verbose=False, pattern=".*",
1708
1780
stop_on_failure=False, keep_output=False,
1709
1781
transport=None, lsprof_timed=None, bench_history=None,
1710
matching_tests_first=None):
1782
matching_tests_first=None,
1783
numbered_dirs=False):
1784
global NUMBERED_DIRS
1785
NUMBERED_DIRS = bool(numbered_dirs)
1711
1787
TestCase._gather_lsprof_in_benchmarks = lsprof_timed
1757
1834
transport=transport,
1758
1835
lsprof_timed=lsprof_timed,
1759
1836
bench_history=bench_history,
1760
matching_tests_first=matching_tests_first)
1837
matching_tests_first=matching_tests_first,
1838
numbered_dirs=numbered_dirs)
1762
1840
default_transport = old_transport
1786
1864
'bzrlib.tests.test_decorators',
1787
1865
'bzrlib.tests.test_delta',
1788
1866
'bzrlib.tests.test_diff',
1867
'bzrlib.tests.test_dirstate',
1789
1868
'bzrlib.tests.test_doc_generate',
1790
1869
'bzrlib.tests.test_errors',
1791
1870
'bzrlib.tests.test_escaped_store',
1871
'bzrlib.tests.test_extract',
1792
1872
'bzrlib.tests.test_fetch',
1793
1873
'bzrlib.tests.test_ftp_transport',
1794
1874
'bzrlib.tests.test_generate_docs',
1841
1921
'bzrlib.tests.test_source',
1842
1922
'bzrlib.tests.test_status',
1843
1923
'bzrlib.tests.test_store',
1924
'bzrlib.tests.test_subsume',
1844
1925
'bzrlib.tests.test_symbol_versioning',
1845
1926
'bzrlib.tests.test_tag',
1846
1927
'bzrlib.tests.test_testament',
1863
1944
'bzrlib.tests.test_weave',
1864
1945
'bzrlib.tests.test_whitebox',
1865
1946
'bzrlib.tests.test_workingtree',
1947
'bzrlib.tests.test_workingtree_4',
1866
1948
'bzrlib.tests.test_wsgi',
1867
1949
'bzrlib.tests.test_xml',