580
596
bench_history=None,
598
result_decorators=None,
600
"""Create a TextTestRunner.
602
:param result_decorators: An optional list of decorators to apply
603
to the result object being used by the runner. Decorators are
604
applied left to right - the first element in the list is the
584
607
self.stream = unittest._WritelnDecorator(stream)
585
608
self.descriptions = descriptions
586
609
self.verbosity = verbosity
587
610
self._bench_history = bench_history
588
self.list_only = list_only
589
611
self._strict = strict
612
self._result_decorators = result_decorators or []
591
614
def run(self, test):
592
615
"Run the given test case or test suite."
593
startTime = time.time()
594
616
if self.verbosity == 1:
595
617
result_class = TextTestResult
596
618
elif self.verbosity >= 2:
597
619
result_class = VerboseTestResult
598
result = result_class(self.stream,
620
original_result = result_class(self.stream,
599
621
self.descriptions,
601
623
bench_history=self._bench_history,
602
624
strict=self._strict,
604
result.stop_early = self.stop_on_failure
605
result.report_starting()
607
if self.verbosity >= 2:
608
self.stream.writeln("Listing tests only ...\n")
610
for t in iter_suite_tests(test):
611
self.stream.writeln("%s" % (t.id()))
620
if isinstance(test, testtools.ConcurrentTestSuite):
621
# We need to catch bzr specific behaviors
622
test.run(BZRTransformingResult(result))
625
run = result.testsRun
627
stopTime = time.time()
628
timeTaken = stopTime - startTime
630
self.stream.writeln(result.separator2)
631
self.stream.writeln("%s %d test%s in %.3fs" % (actionTaken,
632
run, run != 1 and "s" or "", timeTaken))
633
self.stream.writeln()
634
if not result.wasSuccessful():
635
self.stream.write("FAILED (")
636
failed, errored = map(len, (result.failures, result.errors))
638
self.stream.write("failures=%d" % failed)
640
if failed: self.stream.write(", ")
641
self.stream.write("errors=%d" % errored)
642
if result.known_failure_count:
643
if failed or errored: self.stream.write(", ")
644
self.stream.write("known_failure_count=%d" %
645
result.known_failure_count)
646
self.stream.writeln(")")
648
if result.known_failure_count:
649
self.stream.writeln("OK (known_failures=%d)" %
650
result.known_failure_count)
652
self.stream.writeln("OK")
653
if result.skip_count > 0:
654
skipped = result.skip_count
655
self.stream.writeln('%d test%s skipped' %
656
(skipped, skipped != 1 and "s" or ""))
657
if result.unsupported:
658
for feature, count in sorted(result.unsupported.items()):
659
self.stream.writeln("Missing feature '%s' skipped %d tests." %
626
# Signal to result objects that look at stop early policy to stop,
627
original_result.stop_early = self.stop_on_failure
628
result = original_result
629
for decorator in self._result_decorators:
630
result = decorator(result)
631
result.stop_early = self.stop_on_failure
637
if isinstance(test, testtools.ConcurrentTestSuite):
638
# We need to catch bzr specific behaviors
639
result = BZRTransformingResult(result)
640
result.startTestRun()
645
# higher level code uses our extended protocol to determine
646
# what exit code to give.
647
return original_result
665
650
def iter_suite_tests(suite):
929
932
def _lock_broken(self, result):
930
933
self._lock_actions.append(('broken', result))
935
def permit_dir(self, name):
936
"""Permit a directory to be used by this test. See permit_url."""
937
name_transport = get_transport(name)
938
self.permit_url(name)
939
self.permit_url(name_transport.base)
941
def permit_url(self, url):
942
"""Declare that url is an ok url to use in this test.
944
Do this for memory transports, temporary test directory etc.
946
Do not do this for the current working directory, /tmp, or any other
947
preexisting non isolated url.
949
if not url.endswith('/'):
951
self._bzr_selftest_roots.append(url)
953
def permit_source_tree_branch_repo(self):
954
"""Permit the source tree bzr is running from to be opened.
956
Some code such as bzrlib.version attempts to read from the bzr branch
957
that bzr is executing from (if any). This method permits that directory
958
to be used in the test suite.
960
path = self.get_source_path()
961
self.record_directory_isolation()
964
workingtree.WorkingTree.open(path)
965
except (errors.NotBranchError, errors.NoWorkingTree):
968
self.enable_directory_isolation()
970
def _preopen_isolate_transport(self, transport):
971
"""Check that all transport openings are done in the test work area."""
972
while isinstance(transport, pathfilter.PathFilteringTransport):
973
# Unwrap pathfiltered transports
974
transport = transport.server.backing_transport.clone(
975
transport._filter('.'))
977
# ReadonlySmartTCPServer_for_testing decorates the backing transport
978
# urls it is given by prepending readonly+. This is appropriate as the
979
# client shouldn't know that the server is readonly (or not readonly).
980
# We could register all servers twice, with readonly+ prepending, but
981
# that makes for a long list; this is about the same but easier to
983
if url.startswith('readonly+'):
984
url = url[len('readonly+'):]
985
self._preopen_isolate_url(url)
987
def _preopen_isolate_url(self, url):
988
if not self._directory_isolation:
990
if self._directory_isolation == 'record':
991
self._bzr_selftest_roots.append(url)
993
# This prevents all transports, including e.g. sftp ones backed on disk
994
# from working unless they are explicitly granted permission. We then
995
# depend on the code that sets up test transports to check that they are
996
# appropriately isolated and enable their use by calling
997
# self.permit_transport()
998
if not osutils.is_inside_any(self._bzr_selftest_roots, url):
999
raise errors.BzrError("Attempt to escape test isolation: %r %r"
1000
% (url, self._bzr_selftest_roots))
1002
def record_directory_isolation(self):
1003
"""Gather accessed directories to permit later access.
1005
This is used for tests that access the branch bzr is running from.
1007
self._directory_isolation = "record"
1009
def start_server(self, transport_server, backing_server=None):
1010
"""Start transport_server for this test.
1012
This starts the server, registers a cleanup for it and permits the
1013
server's urls to be used.
1015
if backing_server is None:
1016
transport_server.setUp()
1018
transport_server.setUp(backing_server)
1019
self.addCleanup(transport_server.tearDown)
1020
# Obtain a real transport because if the server supplies a password, it
1021
# will be hidden from the base on the client side.
1022
t = get_transport(transport_server.get_url())
1023
# Some transport servers effectively chroot the backing transport;
1024
# others like SFTPServer don't - users of the transport can walk up the
1025
# transport to read the entire backing transport. This wouldn't matter
1026
# except that the workdir tests are given - and that they expect the
1027
# server's url to point at - is one directory under the safety net. So
1028
# Branch operations into the transport will attempt to walk up one
1029
# directory. Chrooting all servers would avoid this but also mean that
1030
# we wouldn't be testing directly against non-root urls. Alternatively
1031
# getting the test framework to start the server with a backing server
1032
# at the actual safety net directory would work too, but this then
1033
# means that the self.get_url/self.get_transport methods would need
1034
# to transform all their results. On balance its cleaner to handle it
1035
# here, and permit a higher url when we have one of these transports.
1036
if t.base.endswith('/work/'):
1037
# we have safety net/test root/work
1038
t = t.clone('../..')
1039
elif isinstance(transport_server, server.SmartTCPServer_for_testing):
1040
# The smart server adds a path similar to work, which is traversed
1041
# up from by the client. But the server is chrooted - the actual
1042
# backing transport is not escaped from, and VFS requests to the
1043
# root will error (because they try to escape the chroot).
1045
while t2.base != t.base:
1048
self.permit_url(t.base)
1050
def _track_transports(self):
1051
"""Install checks for transport usage."""
1052
# TestCase has no safe place it can write to.
1053
self._bzr_selftest_roots = []
1054
# Currently the easiest way to be sure that nothing is going on is to
1055
# hook into bzr dir opening. This leaves a small window of error for
1056
# transport tests, but they are well known, and we can improve on this
1058
bzrdir.BzrDir.hooks.install_named_hook("pre_open",
1059
self._preopen_isolate_transport, "Check bzr directories are safe.")
932
1061
def _ndiff_strings(self, a, b):
933
1062
"""Return ndiff between two strings containing lines.
1422
1583
def _do_skip(self, result, reason):
1423
1584
addSkip = getattr(result, 'addSkip', None)
1424
1585
if not callable(addSkip):
1425
result.addError(self, sys.exc_info())
1586
result.addSuccess(result)
1427
1588
addSkip(self, reason)
1590
def _do_known_failure(self, result):
1591
err = sys.exc_info()
1592
addExpectedFailure = getattr(result, 'addExpectedFailure', None)
1593
if addExpectedFailure is not None:
1594
addExpectedFailure(self, err)
1596
result.addSuccess(self)
1598
def _do_not_applicable(self, result, e):
1600
reason = 'No reason given'
1603
addNotApplicable = getattr(result, 'addNotApplicable', None)
1604
if addNotApplicable is not None:
1605
result.addNotApplicable(self, reason)
1607
self._do_skip(result, reason)
1609
def _do_unsupported_or_skip(self, result, reason):
1610
addNotSupported = getattr(result, 'addNotSupported', None)
1611
if addNotSupported is not None:
1612
result.addNotSupported(self, reason)
1614
self._do_skip(result, reason)
1429
1616
def run(self, result=None):
1430
1617
if result is None: result = self.defaultTestResult()
1618
result.startTest(self)
1623
result.stopTest(self)
1625
def _run(self, result):
1431
1626
for feature in getattr(self, '_test_needs_features', []):
1432
1627
if not feature.available():
1433
result.startTest(self)
1434
if getattr(result, 'addNotSupported', None):
1435
result.addNotSupported(self, feature)
1437
result.addSuccess(self)
1438
result.stopTest(self)
1628
return self._do_unsupported_or_skip(result, feature)
1630
absent_attr = object()
1632
method_name = getattr(self, '_testMethodName', absent_attr)
1633
if method_name is absent_attr:
1635
method_name = getattr(self, '_TestCase__testMethodName')
1636
testMethod = getattr(self, method_name)
1442
result.startTest(self)
1443
absent_attr = object()
1445
method_name = getattr(self, '_testMethodName', absent_attr)
1446
if method_name is absent_attr:
1448
method_name = getattr(self, '_TestCase__testMethodName')
1449
testMethod = getattr(self, method_name)
1453
if not self._bzr_test_setUp_run:
1455
"test setUp did not invoke "
1456
"bzrlib.tests.TestCase's setUp")
1457
except KeyboardInterrupt:
1460
except TestSkipped, e:
1461
self._do_skip(result, e.args[0])
1465
result.addError(self, sys.exc_info())
1640
if not self._bzr_test_setUp_run:
1642
"test setUp did not invoke "
1643
"bzrlib.tests.TestCase's setUp")
1644
except KeyboardInterrupt:
1647
except KnownFailure:
1648
self._do_known_failure(result)
1651
except TestNotApplicable, e:
1652
self._do_not_applicable(result, e)
1655
except TestSkipped, e:
1656
self._do_skip(result, e.args[0])
1659
except UnavailableFeature, e:
1660
self._do_unsupported_or_skip(result, e.args[0])
1664
result.addError(self, sys.exc_info())
1672
except KnownFailure:
1673
self._do_known_failure(result)
1674
except self.failureException:
1675
result.addFailure(self, sys.exc_info())
1676
except TestNotApplicable, e:
1677
self._do_not_applicable(result, e)
1678
except TestSkipped, e:
1680
reason = "No reason given."
1683
self._do_skip(result, reason)
1684
except UnavailableFeature, e:
1685
self._do_unsupported_or_skip(result, e.args[0])
1686
except KeyboardInterrupt:
1690
result.addError(self, sys.exc_info())
1694
if not self._bzr_test_tearDown_run:
1696
"test tearDown did not invoke "
1697
"bzrlib.tests.TestCase's tearDown")
1698
except KeyboardInterrupt:
1702
result.addError(self, sys.exc_info())
1473
except self.failureException:
1474
result.addFailure(self, sys.exc_info())
1475
except TestSkipped, e:
1477
reason = "No reason given."
1480
self._do_skip(result, reason)
1481
except KeyboardInterrupt:
1485
result.addError(self, sys.exc_info())
1489
if not self._bzr_test_tearDown_run:
1491
"test tearDown did not invoke "
1492
"bzrlib.tests.TestCase's tearDown")
1493
except KeyboardInterrupt:
1497
result.addError(self, sys.exc_info())
1500
if ok: result.addSuccess(self)
1502
result.stopTest(self)
1705
if ok: result.addSuccess(self)
1504
except TestNotApplicable:
1505
# Not moved from the result [yet].
1508
1707
except KeyboardInterrupt:
1509
1708
self._runCleanups()
3420
3732
test_prefix_alias_registry.register('bp', 'bzrlib.plugins')
3735
def _test_suite_testmod_names():
3736
"""Return the standard list of test module names to test."""
3739
'bzrlib.tests.blackbox',
3740
'bzrlib.tests.commands',
3741
'bzrlib.tests.per_branch',
3742
'bzrlib.tests.per_bzrdir',
3743
'bzrlib.tests.per_foreign_vcs',
3744
'bzrlib.tests.per_interrepository',
3745
'bzrlib.tests.per_intertree',
3746
'bzrlib.tests.per_inventory',
3747
'bzrlib.tests.per_interbranch',
3748
'bzrlib.tests.per_lock',
3749
'bzrlib.tests.per_transport',
3750
'bzrlib.tests.per_tree',
3751
'bzrlib.tests.per_pack_repository',
3752
'bzrlib.tests.per_repository',
3753
'bzrlib.tests.per_repository_chk',
3754
'bzrlib.tests.per_repository_reference',
3755
'bzrlib.tests.per_uifactory',
3756
'bzrlib.tests.per_versionedfile',
3757
'bzrlib.tests.per_workingtree',
3758
'bzrlib.tests.test__annotator',
3759
'bzrlib.tests.test__chk_map',
3760
'bzrlib.tests.test__dirstate_helpers',
3761
'bzrlib.tests.test__groupcompress',
3762
'bzrlib.tests.test__known_graph',
3763
'bzrlib.tests.test__rio',
3764
'bzrlib.tests.test__simple_set',
3765
'bzrlib.tests.test__static_tuple',
3766
'bzrlib.tests.test__walkdirs_win32',
3767
'bzrlib.tests.test_ancestry',
3768
'bzrlib.tests.test_annotate',
3769
'bzrlib.tests.test_api',
3770
'bzrlib.tests.test_atomicfile',
3771
'bzrlib.tests.test_bad_files',
3772
'bzrlib.tests.test_bencode',
3773
'bzrlib.tests.test_bisect_multi',
3774
'bzrlib.tests.test_branch',
3775
'bzrlib.tests.test_branchbuilder',
3776
'bzrlib.tests.test_btree_index',
3777
'bzrlib.tests.test_bugtracker',
3778
'bzrlib.tests.test_bundle',
3779
'bzrlib.tests.test_bzrdir',
3780
'bzrlib.tests.test__chunks_to_lines',
3781
'bzrlib.tests.test_cache_utf8',
3782
'bzrlib.tests.test_chk_map',
3783
'bzrlib.tests.test_chk_serializer',
3784
'bzrlib.tests.test_chunk_writer',
3785
'bzrlib.tests.test_clean_tree',
3786
'bzrlib.tests.test_cleanup',
3787
'bzrlib.tests.test_commands',
3788
'bzrlib.tests.test_commit',
3789
'bzrlib.tests.test_commit_merge',
3790
'bzrlib.tests.test_config',
3791
'bzrlib.tests.test_conflicts',
3792
'bzrlib.tests.test_counted_lock',
3793
'bzrlib.tests.test_crash',
3794
'bzrlib.tests.test_decorators',
3795
'bzrlib.tests.test_delta',
3796
'bzrlib.tests.test_debug',
3797
'bzrlib.tests.test_deprecated_graph',
3798
'bzrlib.tests.test_diff',
3799
'bzrlib.tests.test_directory_service',
3800
'bzrlib.tests.test_dirstate',
3801
'bzrlib.tests.test_email_message',
3802
'bzrlib.tests.test_eol_filters',
3803
'bzrlib.tests.test_errors',
3804
'bzrlib.tests.test_export',
3805
'bzrlib.tests.test_extract',
3806
'bzrlib.tests.test_fetch',
3807
'bzrlib.tests.test_fifo_cache',
3808
'bzrlib.tests.test_filters',
3809
'bzrlib.tests.test_ftp_transport',
3810
'bzrlib.tests.test_foreign',
3811
'bzrlib.tests.test_generate_docs',
3812
'bzrlib.tests.test_generate_ids',
3813
'bzrlib.tests.test_globbing',
3814
'bzrlib.tests.test_gpg',
3815
'bzrlib.tests.test_graph',
3816
'bzrlib.tests.test_groupcompress',
3817
'bzrlib.tests.test_hashcache',
3818
'bzrlib.tests.test_help',
3819
'bzrlib.tests.test_hooks',
3820
'bzrlib.tests.test_http',
3821
'bzrlib.tests.test_http_response',
3822
'bzrlib.tests.test_https_ca_bundle',
3823
'bzrlib.tests.test_identitymap',
3824
'bzrlib.tests.test_ignores',
3825
'bzrlib.tests.test_index',
3826
'bzrlib.tests.test_info',
3827
'bzrlib.tests.test_inv',
3828
'bzrlib.tests.test_inventory_delta',
3829
'bzrlib.tests.test_knit',
3830
'bzrlib.tests.test_lazy_import',
3831
'bzrlib.tests.test_lazy_regex',
3832
'bzrlib.tests.test_lock',
3833
'bzrlib.tests.test_lockable_files',
3834
'bzrlib.tests.test_lockdir',
3835
'bzrlib.tests.test_log',
3836
'bzrlib.tests.test_lru_cache',
3837
'bzrlib.tests.test_lsprof',
3838
'bzrlib.tests.test_mail_client',
3839
'bzrlib.tests.test_memorytree',
3840
'bzrlib.tests.test_merge',
3841
'bzrlib.tests.test_merge3',
3842
'bzrlib.tests.test_merge_core',
3843
'bzrlib.tests.test_merge_directive',
3844
'bzrlib.tests.test_missing',
3845
'bzrlib.tests.test_msgeditor',
3846
'bzrlib.tests.test_multiparent',
3847
'bzrlib.tests.test_mutabletree',
3848
'bzrlib.tests.test_nonascii',
3849
'bzrlib.tests.test_options',
3850
'bzrlib.tests.test_osutils',
3851
'bzrlib.tests.test_osutils_encodings',
3852
'bzrlib.tests.test_pack',
3853
'bzrlib.tests.test_patch',
3854
'bzrlib.tests.test_patches',
3855
'bzrlib.tests.test_permissions',
3856
'bzrlib.tests.test_plugins',
3857
'bzrlib.tests.test_progress',
3858
'bzrlib.tests.test_read_bundle',
3859
'bzrlib.tests.test_reconcile',
3860
'bzrlib.tests.test_reconfigure',
3861
'bzrlib.tests.test_registry',
3862
'bzrlib.tests.test_remote',
3863
'bzrlib.tests.test_rename_map',
3864
'bzrlib.tests.test_repository',
3865
'bzrlib.tests.test_revert',
3866
'bzrlib.tests.test_revision',
3867
'bzrlib.tests.test_revisionspec',
3868
'bzrlib.tests.test_revisiontree',
3869
'bzrlib.tests.test_rio',
3870
'bzrlib.tests.test_rules',
3871
'bzrlib.tests.test_sampler',
3872
'bzrlib.tests.test_script',
3873
'bzrlib.tests.test_selftest',
3874
'bzrlib.tests.test_serializer',
3875
'bzrlib.tests.test_setup',
3876
'bzrlib.tests.test_sftp_transport',
3877
'bzrlib.tests.test_shelf',
3878
'bzrlib.tests.test_shelf_ui',
3879
'bzrlib.tests.test_smart',
3880
'bzrlib.tests.test_smart_add',
3881
'bzrlib.tests.test_smart_request',
3882
'bzrlib.tests.test_smart_transport',
3883
'bzrlib.tests.test_smtp_connection',
3884
'bzrlib.tests.test_source',
3885
'bzrlib.tests.test_ssh_transport',
3886
'bzrlib.tests.test_status',
3887
'bzrlib.tests.test_store',
3888
'bzrlib.tests.test_strace',
3889
'bzrlib.tests.test_subsume',
3890
'bzrlib.tests.test_switch',
3891
'bzrlib.tests.test_symbol_versioning',
3892
'bzrlib.tests.test_tag',
3893
'bzrlib.tests.test_testament',
3894
'bzrlib.tests.test_textfile',
3895
'bzrlib.tests.test_textmerge',
3896
'bzrlib.tests.test_timestamp',
3897
'bzrlib.tests.test_trace',
3898
'bzrlib.tests.test_transactions',
3899
'bzrlib.tests.test_transform',
3900
'bzrlib.tests.test_transport',
3901
'bzrlib.tests.test_transport_log',
3902
'bzrlib.tests.test_tree',
3903
'bzrlib.tests.test_treebuilder',
3904
'bzrlib.tests.test_tsort',
3905
'bzrlib.tests.test_tuned_gzip',
3906
'bzrlib.tests.test_ui',
3907
'bzrlib.tests.test_uncommit',
3908
'bzrlib.tests.test_upgrade',
3909
'bzrlib.tests.test_upgrade_stacked',
3910
'bzrlib.tests.test_urlutils',
3911
'bzrlib.tests.test_version',
3912
'bzrlib.tests.test_version_info',
3913
'bzrlib.tests.test_weave',
3914
'bzrlib.tests.test_whitebox',
3915
'bzrlib.tests.test_win32utils',
3916
'bzrlib.tests.test_workingtree',
3917
'bzrlib.tests.test_workingtree_4',
3918
'bzrlib.tests.test_wsgi',
3919
'bzrlib.tests.test_xml',
3923
def _test_suite_modules_to_doctest():
3924
"""Return the list of modules to doctest."""
3927
'bzrlib.branchbuilder',
3930
'bzrlib.iterablefile',
3934
'bzrlib.symbol_versioning',
3937
'bzrlib.version_info_formats.format_custom',
3423
3941
def test_suite(keep_only=None, starting_with=None):
3424
3942
"""Build and return TestSuite for the whole of bzrlib.
3431
3949
This function can be replaced if you need to change the default test
3432
3950
suite on a global basis, but it is not encouraged.
3436
'bzrlib.tests.blackbox',
3437
'bzrlib.tests.commands',
3438
'bzrlib.tests.per_branch',
3439
'bzrlib.tests.per_bzrdir',
3440
'bzrlib.tests.per_interrepository',
3441
'bzrlib.tests.per_intertree',
3442
'bzrlib.tests.per_inventory',
3443
'bzrlib.tests.per_interbranch',
3444
'bzrlib.tests.per_lock',
3445
'bzrlib.tests.per_transport',
3446
'bzrlib.tests.per_tree',
3447
'bzrlib.tests.per_pack_repository',
3448
'bzrlib.tests.per_repository',
3449
'bzrlib.tests.per_repository_chk',
3450
'bzrlib.tests.per_repository_reference',
3451
'bzrlib.tests.per_versionedfile',
3452
'bzrlib.tests.per_workingtree',
3453
'bzrlib.tests.test__annotator',
3454
'bzrlib.tests.test__chk_map',
3455
'bzrlib.tests.test__dirstate_helpers',
3456
'bzrlib.tests.test__groupcompress',
3457
'bzrlib.tests.test__known_graph',
3458
'bzrlib.tests.test__rio',
3459
'bzrlib.tests.test__walkdirs_win32',
3460
'bzrlib.tests.test_ancestry',
3461
'bzrlib.tests.test_annotate',
3462
'bzrlib.tests.test_api',
3463
'bzrlib.tests.test_atomicfile',
3464
'bzrlib.tests.test_bad_files',
3465
'bzrlib.tests.test_bencode',
3466
'bzrlib.tests.test_bisect_multi',
3467
'bzrlib.tests.test_branch',
3468
'bzrlib.tests.test_branchbuilder',
3469
'bzrlib.tests.test_btree_index',
3470
'bzrlib.tests.test_bugtracker',
3471
'bzrlib.tests.test_bundle',
3472
'bzrlib.tests.test_bzrdir',
3473
'bzrlib.tests.test__chunks_to_lines',
3474
'bzrlib.tests.test_cache_utf8',
3475
'bzrlib.tests.test_chk_map',
3476
'bzrlib.tests.test_chk_serializer',
3477
'bzrlib.tests.test_chunk_writer',
3478
'bzrlib.tests.test_clean_tree',
3479
'bzrlib.tests.test_commands',
3480
'bzrlib.tests.test_commit',
3481
'bzrlib.tests.test_commit_merge',
3482
'bzrlib.tests.test_config',
3483
'bzrlib.tests.test_conflicts',
3484
'bzrlib.tests.test_counted_lock',
3485
'bzrlib.tests.test_crash',
3486
'bzrlib.tests.test_decorators',
3487
'bzrlib.tests.test_delta',
3488
'bzrlib.tests.test_debug',
3489
'bzrlib.tests.test_deprecated_graph',
3490
'bzrlib.tests.test_diff',
3491
'bzrlib.tests.test_directory_service',
3492
'bzrlib.tests.test_dirstate',
3493
'bzrlib.tests.test_email_message',
3494
'bzrlib.tests.test_eol_filters',
3495
'bzrlib.tests.test_errors',
3496
'bzrlib.tests.test_export',
3497
'bzrlib.tests.test_extract',
3498
'bzrlib.tests.test_fetch',
3499
'bzrlib.tests.test_fifo_cache',
3500
'bzrlib.tests.test_filters',
3501
'bzrlib.tests.test_ftp_transport',
3502
'bzrlib.tests.test_foreign',
3503
'bzrlib.tests.test_generate_docs',
3504
'bzrlib.tests.test_generate_ids',
3505
'bzrlib.tests.test_globbing',
3506
'bzrlib.tests.test_gpg',
3507
'bzrlib.tests.test_graph',
3508
'bzrlib.tests.test_groupcompress',
3509
'bzrlib.tests.test_hashcache',
3510
'bzrlib.tests.test_help',
3511
'bzrlib.tests.test_hooks',
3512
'bzrlib.tests.test_http',
3513
'bzrlib.tests.test_http_response',
3514
'bzrlib.tests.test_https_ca_bundle',
3515
'bzrlib.tests.test_identitymap',
3516
'bzrlib.tests.test_ignores',
3517
'bzrlib.tests.test_index',
3518
'bzrlib.tests.test_info',
3519
'bzrlib.tests.test_inv',
3520
'bzrlib.tests.test_inventory_delta',
3521
'bzrlib.tests.test_knit',
3522
'bzrlib.tests.test_lazy_import',
3523
'bzrlib.tests.test_lazy_regex',
3524
'bzrlib.tests.test_lock',
3525
'bzrlib.tests.test_lockable_files',
3526
'bzrlib.tests.test_lockdir',
3527
'bzrlib.tests.test_log',
3528
'bzrlib.tests.test_lru_cache',
3529
'bzrlib.tests.test_lsprof',
3530
'bzrlib.tests.test_mail_client',
3531
'bzrlib.tests.test_memorytree',
3532
'bzrlib.tests.test_merge',
3533
'bzrlib.tests.test_merge3',
3534
'bzrlib.tests.test_merge_core',
3535
'bzrlib.tests.test_merge_directive',
3536
'bzrlib.tests.test_missing',
3537
'bzrlib.tests.test_msgeditor',
3538
'bzrlib.tests.test_multiparent',
3539
'bzrlib.tests.test_mutabletree',
3540
'bzrlib.tests.test_nonascii',
3541
'bzrlib.tests.test_options',
3542
'bzrlib.tests.test_osutils',
3543
'bzrlib.tests.test_osutils_encodings',
3544
'bzrlib.tests.test_pack',
3545
'bzrlib.tests.test_patch',
3546
'bzrlib.tests.test_patches',
3547
'bzrlib.tests.test_permissions',
3548
'bzrlib.tests.test_plugins',
3549
'bzrlib.tests.test_progress',
3550
'bzrlib.tests.test_read_bundle',
3551
'bzrlib.tests.test_reconcile',
3552
'bzrlib.tests.test_reconfigure',
3553
'bzrlib.tests.test_registry',
3554
'bzrlib.tests.test_remote',
3555
'bzrlib.tests.test_rename_map',
3556
'bzrlib.tests.test_repository',
3557
'bzrlib.tests.test_revert',
3558
'bzrlib.tests.test_revision',
3559
'bzrlib.tests.test_revisionspec',
3560
'bzrlib.tests.test_revisiontree',
3561
'bzrlib.tests.test_rio',
3562
'bzrlib.tests.test_rules',
3563
'bzrlib.tests.test_sampler',
3564
'bzrlib.tests.test_selftest',
3565
'bzrlib.tests.test_serializer',
3566
'bzrlib.tests.test_setup',
3567
'bzrlib.tests.test_sftp_transport',
3568
'bzrlib.tests.test_shelf',
3569
'bzrlib.tests.test_shelf_ui',
3570
'bzrlib.tests.test_smart',
3571
'bzrlib.tests.test_smart_add',
3572
'bzrlib.tests.test_smart_request',
3573
'bzrlib.tests.test_smart_transport',
3574
'bzrlib.tests.test_smtp_connection',
3575
'bzrlib.tests.test_source',
3576
'bzrlib.tests.test_ssh_transport',
3577
'bzrlib.tests.test_status',
3578
'bzrlib.tests.test_store',
3579
'bzrlib.tests.test_strace',
3580
'bzrlib.tests.test_subsume',
3581
'bzrlib.tests.test_switch',
3582
'bzrlib.tests.test_symbol_versioning',
3583
'bzrlib.tests.test_tag',
3584
'bzrlib.tests.test_testament',
3585
'bzrlib.tests.test_textfile',
3586
'bzrlib.tests.test_textmerge',
3587
'bzrlib.tests.test_timestamp',
3588
'bzrlib.tests.test_trace',
3589
'bzrlib.tests.test_transactions',
3590
'bzrlib.tests.test_transform',
3591
'bzrlib.tests.test_transport',
3592
'bzrlib.tests.test_transport_log',
3593
'bzrlib.tests.test_tree',
3594
'bzrlib.tests.test_treebuilder',
3595
'bzrlib.tests.test_tsort',
3596
'bzrlib.tests.test_tuned_gzip',
3597
'bzrlib.tests.test_ui',
3598
'bzrlib.tests.test_uncommit',
3599
'bzrlib.tests.test_upgrade',
3600
'bzrlib.tests.test_upgrade_stacked',
3601
'bzrlib.tests.test_urlutils',
3602
'bzrlib.tests.test_version',
3603
'bzrlib.tests.test_version_info',
3604
'bzrlib.tests.test_weave',
3605
'bzrlib.tests.test_whitebox',
3606
'bzrlib.tests.test_win32utils',
3607
'bzrlib.tests.test_workingtree',
3608
'bzrlib.tests.test_workingtree_4',
3609
'bzrlib.tests.test_wsgi',
3610
'bzrlib.tests.test_xml',
3613
3953
loader = TestUtil.TestLoader()