579
622
bench_history=None,
624
result_decorators=None,
626
"""Create a TextTestRunner.
628
:param result_decorators: An optional list of decorators to apply
629
to the result object being used by the runner. Decorators are
630
applied left to right - the first element in the list is the
583
633
self.stream = unittest._WritelnDecorator(stream)
584
634
self.descriptions = descriptions
585
635
self.verbosity = verbosity
586
636
self._bench_history = bench_history
587
self.list_only = list_only
588
637
self._strict = strict
638
self._result_decorators = result_decorators or []
590
640
def run(self, test):
591
641
"Run the given test case or test suite."
592
startTime = time.time()
593
642
if self.verbosity == 1:
594
643
result_class = TextTestResult
595
644
elif self.verbosity >= 2:
596
645
result_class = VerboseTestResult
597
result = result_class(self.stream,
646
original_result = result_class(self.stream,
598
647
self.descriptions,
600
649
bench_history=self._bench_history,
601
650
strict=self._strict,
603
result.stop_early = self.stop_on_failure
604
result.report_starting()
606
if self.verbosity >= 2:
607
self.stream.writeln("Listing tests only ...\n")
609
for t in iter_suite_tests(test):
610
self.stream.writeln("%s" % (t.id()))
619
if isinstance(test, testtools.ConcurrentTestSuite):
620
# We need to catch bzr specific behaviors
621
test.run(BZRTransformingResult(result))
624
run = result.testsRun
626
stopTime = time.time()
627
timeTaken = stopTime - startTime
629
self.stream.writeln(result.separator2)
630
self.stream.writeln("%s %d test%s in %.3fs" % (actionTaken,
631
run, run != 1 and "s" or "", timeTaken))
632
self.stream.writeln()
633
if not result.wasSuccessful():
634
self.stream.write("FAILED (")
635
failed, errored = map(len, (result.failures, result.errors))
637
self.stream.write("failures=%d" % failed)
639
if failed: self.stream.write(", ")
640
self.stream.write("errors=%d" % errored)
641
if result.known_failure_count:
642
if failed or errored: self.stream.write(", ")
643
self.stream.write("known_failure_count=%d" %
644
result.known_failure_count)
645
self.stream.writeln(")")
647
if result.known_failure_count:
648
self.stream.writeln("OK (known_failures=%d)" %
649
result.known_failure_count)
651
self.stream.writeln("OK")
652
if result.skip_count > 0:
653
skipped = result.skip_count
654
self.stream.writeln('%d test%s skipped' %
655
(skipped, skipped != 1 and "s" or ""))
656
if result.unsupported:
657
for feature, count in sorted(result.unsupported.items()):
658
self.stream.writeln("Missing feature '%s' skipped %d tests." %
652
# Signal to result objects that look at stop early policy to stop,
653
original_result.stop_early = self.stop_on_failure
654
result = original_result
655
for decorator in self._result_decorators:
656
result = decorator(result)
657
result.stop_early = self.stop_on_failure
663
if isinstance(test, testtools.ConcurrentTestSuite):
664
# We need to catch bzr specific behaviors
665
result = BZRTransformingResult(result)
666
result.startTestRun()
671
# higher level code uses our extended protocol to determine
672
# what exit code to give.
673
return original_result
664
676
def iter_suite_tests(suite):
928
956
def _lock_broken(self, result):
929
957
self._lock_actions.append(('broken', result))
959
def permit_dir(self, name):
960
"""Permit a directory to be used by this test. See permit_url."""
961
name_transport = get_transport(name)
962
self.permit_url(name)
963
self.permit_url(name_transport.base)
965
def permit_url(self, url):
966
"""Declare that url is an ok url to use in this test.
968
Do this for memory transports, temporary test directory etc.
970
Do not do this for the current working directory, /tmp, or any other
971
preexisting non isolated url.
973
if not url.endswith('/'):
975
self._bzr_selftest_roots.append(url)
977
def permit_source_tree_branch_repo(self):
978
"""Permit the source tree bzr is running from to be opened.
980
Some code such as bzrlib.version attempts to read from the bzr branch
981
that bzr is executing from (if any). This method permits that directory
982
to be used in the test suite.
984
path = self.get_source_path()
985
self.record_directory_isolation()
988
workingtree.WorkingTree.open(path)
989
except (errors.NotBranchError, errors.NoWorkingTree):
992
self.enable_directory_isolation()
994
def _preopen_isolate_transport(self, transport):
995
"""Check that all transport openings are done in the test work area."""
996
while isinstance(transport, pathfilter.PathFilteringTransport):
997
# Unwrap pathfiltered transports
998
transport = transport.server.backing_transport.clone(
999
transport._filter('.'))
1000
url = transport.base
1001
# ReadonlySmartTCPServer_for_testing decorates the backing transport
1002
# urls it is given by prepending readonly+. This is appropriate as the
1003
# client shouldn't know that the server is readonly (or not readonly).
1004
# We could register all servers twice, with readonly+ prepending, but
1005
# that makes for a long list; this is about the same but easier to
1007
if url.startswith('readonly+'):
1008
url = url[len('readonly+'):]
1009
self._preopen_isolate_url(url)
1011
def _preopen_isolate_url(self, url):
1012
if not self._directory_isolation:
1014
if self._directory_isolation == 'record':
1015
self._bzr_selftest_roots.append(url)
1017
# This prevents all transports, including e.g. sftp ones backed on disk
1018
# from working unless they are explicitly granted permission. We then
1019
# depend on the code that sets up test transports to check that they are
1020
# appropriately isolated and enable their use by calling
1021
# self.permit_transport()
1022
if not osutils.is_inside_any(self._bzr_selftest_roots, url):
1023
raise errors.BzrError("Attempt to escape test isolation: %r %r"
1024
% (url, self._bzr_selftest_roots))
1026
def record_directory_isolation(self):
1027
"""Gather accessed directories to permit later access.
1029
This is used for tests that access the branch bzr is running from.
1031
self._directory_isolation = "record"
1033
def start_server(self, transport_server, backing_server=None):
1034
"""Start transport_server for this test.
1036
This starts the server, registers a cleanup for it and permits the
1037
server's urls to be used.
1039
if backing_server is None:
1040
transport_server.setUp()
1042
transport_server.setUp(backing_server)
1043
self.addCleanup(transport_server.tearDown)
1044
# Obtain a real transport because if the server supplies a password, it
1045
# will be hidden from the base on the client side.
1046
t = get_transport(transport_server.get_url())
1047
# Some transport servers effectively chroot the backing transport;
1048
# others like SFTPServer don't - users of the transport can walk up the
1049
# transport to read the entire backing transport. This wouldn't matter
1050
# except that the workdir tests are given - and that they expect the
1051
# server's url to point at - is one directory under the safety net. So
1052
# Branch operations into the transport will attempt to walk up one
1053
# directory. Chrooting all servers would avoid this but also mean that
1054
# we wouldn't be testing directly against non-root urls. Alternatively
1055
# getting the test framework to start the server with a backing server
1056
# at the actual safety net directory would work too, but this then
1057
# means that the self.get_url/self.get_transport methods would need
1058
# to transform all their results. On balance its cleaner to handle it
1059
# here, and permit a higher url when we have one of these transports.
1060
if t.base.endswith('/work/'):
1061
# we have safety net/test root/work
1062
t = t.clone('../..')
1063
elif isinstance(transport_server, server.SmartTCPServer_for_testing):
1064
# The smart server adds a path similar to work, which is traversed
1065
# up from by the client. But the server is chrooted - the actual
1066
# backing transport is not escaped from, and VFS requests to the
1067
# root will error (because they try to escape the chroot).
1069
while t2.base != t.base:
1072
self.permit_url(t.base)
1074
def _track_transports(self):
1075
"""Install checks for transport usage."""
1076
# TestCase has no safe place it can write to.
1077
self._bzr_selftest_roots = []
1078
# Currently the easiest way to be sure that nothing is going on is to
1079
# hook into bzr dir opening. This leaves a small window of error for
1080
# transport tests, but they are well known, and we can improve on this
1082
bzrdir.BzrDir.hooks.install_named_hook("pre_open",
1083
self._preopen_isolate_transport, "Check bzr directories are safe.")
931
1085
def _ndiff_strings(self, a, b):
932
1086
"""Return ndiff between two strings containing lines.
3416
3671
test_prefix_alias_registry.register('bp', 'bzrlib.plugins')
3674
def _test_suite_testmod_names():
3675
"""Return the standard list of test module names to test."""
3678
'bzrlib.tests.blackbox',
3679
'bzrlib.tests.commands',
3680
'bzrlib.tests.per_branch',
3681
'bzrlib.tests.per_bzrdir',
3682
'bzrlib.tests.per_interrepository',
3683
'bzrlib.tests.per_intertree',
3684
'bzrlib.tests.per_inventory',
3685
'bzrlib.tests.per_interbranch',
3686
'bzrlib.tests.per_lock',
3687
'bzrlib.tests.per_transport',
3688
'bzrlib.tests.per_tree',
3689
'bzrlib.tests.per_pack_repository',
3690
'bzrlib.tests.per_repository',
3691
'bzrlib.tests.per_repository_chk',
3692
'bzrlib.tests.per_repository_reference',
3693
'bzrlib.tests.per_uifactory',
3694
'bzrlib.tests.per_versionedfile',
3695
'bzrlib.tests.per_workingtree',
3696
'bzrlib.tests.test__annotator',
3697
'bzrlib.tests.test__chk_map',
3698
'bzrlib.tests.test__dirstate_helpers',
3699
'bzrlib.tests.test__groupcompress',
3700
'bzrlib.tests.test__known_graph',
3701
'bzrlib.tests.test__rio',
3702
'bzrlib.tests.test__simple_set',
3703
'bzrlib.tests.test__static_tuple',
3704
'bzrlib.tests.test__walkdirs_win32',
3705
'bzrlib.tests.test_ancestry',
3706
'bzrlib.tests.test_annotate',
3707
'bzrlib.tests.test_api',
3708
'bzrlib.tests.test_atomicfile',
3709
'bzrlib.tests.test_bad_files',
3710
'bzrlib.tests.test_bencode',
3711
'bzrlib.tests.test_bisect_multi',
3712
'bzrlib.tests.test_branch',
3713
'bzrlib.tests.test_branchbuilder',
3714
'bzrlib.tests.test_btree_index',
3715
'bzrlib.tests.test_bugtracker',
3716
'bzrlib.tests.test_bundle',
3717
'bzrlib.tests.test_bzrdir',
3718
'bzrlib.tests.test__chunks_to_lines',
3719
'bzrlib.tests.test_cache_utf8',
3720
'bzrlib.tests.test_chk_map',
3721
'bzrlib.tests.test_chk_serializer',
3722
'bzrlib.tests.test_chunk_writer',
3723
'bzrlib.tests.test_clean_tree',
3724
'bzrlib.tests.test_commands',
3725
'bzrlib.tests.test_commit',
3726
'bzrlib.tests.test_commit_merge',
3727
'bzrlib.tests.test_config',
3728
'bzrlib.tests.test_conflicts',
3729
'bzrlib.tests.test_counted_lock',
3730
'bzrlib.tests.test_crash',
3731
'bzrlib.tests.test_decorators',
3732
'bzrlib.tests.test_delta',
3733
'bzrlib.tests.test_debug',
3734
'bzrlib.tests.test_deprecated_graph',
3735
'bzrlib.tests.test_diff',
3736
'bzrlib.tests.test_directory_service',
3737
'bzrlib.tests.test_dirstate',
3738
'bzrlib.tests.test_email_message',
3739
'bzrlib.tests.test_eol_filters',
3740
'bzrlib.tests.test_errors',
3741
'bzrlib.tests.test_export',
3742
'bzrlib.tests.test_extract',
3743
'bzrlib.tests.test_fetch',
3744
'bzrlib.tests.test_fifo_cache',
3745
'bzrlib.tests.test_filters',
3746
'bzrlib.tests.test_ftp_transport',
3747
'bzrlib.tests.test_foreign',
3748
'bzrlib.tests.test_generate_docs',
3749
'bzrlib.tests.test_generate_ids',
3750
'bzrlib.tests.test_globbing',
3751
'bzrlib.tests.test_gpg',
3752
'bzrlib.tests.test_graph',
3753
'bzrlib.tests.test_groupcompress',
3754
'bzrlib.tests.test_hashcache',
3755
'bzrlib.tests.test_help',
3756
'bzrlib.tests.test_hooks',
3757
'bzrlib.tests.test_http',
3758
'bzrlib.tests.test_http_response',
3759
'bzrlib.tests.test_https_ca_bundle',
3760
'bzrlib.tests.test_identitymap',
3761
'bzrlib.tests.test_ignores',
3762
'bzrlib.tests.test_index',
3763
'bzrlib.tests.test_info',
3764
'bzrlib.tests.test_inv',
3765
'bzrlib.tests.test_inventory_delta',
3766
'bzrlib.tests.test_knit',
3767
'bzrlib.tests.test_lazy_import',
3768
'bzrlib.tests.test_lazy_regex',
3769
'bzrlib.tests.test_lock',
3770
'bzrlib.tests.test_lockable_files',
3771
'bzrlib.tests.test_lockdir',
3772
'bzrlib.tests.test_log',
3773
'bzrlib.tests.test_lru_cache',
3774
'bzrlib.tests.test_lsprof',
3775
'bzrlib.tests.test_mail_client',
3776
'bzrlib.tests.test_memorytree',
3777
'bzrlib.tests.test_merge',
3778
'bzrlib.tests.test_merge3',
3779
'bzrlib.tests.test_merge_core',
3780
'bzrlib.tests.test_merge_directive',
3781
'bzrlib.tests.test_missing',
3782
'bzrlib.tests.test_msgeditor',
3783
'bzrlib.tests.test_multiparent',
3784
'bzrlib.tests.test_mutabletree',
3785
'bzrlib.tests.test_nonascii',
3786
'bzrlib.tests.test_options',
3787
'bzrlib.tests.test_osutils',
3788
'bzrlib.tests.test_osutils_encodings',
3789
'bzrlib.tests.test_pack',
3790
'bzrlib.tests.test_patch',
3791
'bzrlib.tests.test_patches',
3792
'bzrlib.tests.test_permissions',
3793
'bzrlib.tests.test_plugins',
3794
'bzrlib.tests.test_progress',
3795
'bzrlib.tests.test_read_bundle',
3796
'bzrlib.tests.test_reconcile',
3797
'bzrlib.tests.test_reconfigure',
3798
'bzrlib.tests.test_registry',
3799
'bzrlib.tests.test_remote',
3800
'bzrlib.tests.test_rename_map',
3801
'bzrlib.tests.test_repository',
3802
'bzrlib.tests.test_revert',
3803
'bzrlib.tests.test_revision',
3804
'bzrlib.tests.test_revisionspec',
3805
'bzrlib.tests.test_revisiontree',
3806
'bzrlib.tests.test_rio',
3807
'bzrlib.tests.test_rules',
3808
'bzrlib.tests.test_sampler',
3809
'bzrlib.tests.test_script',
3810
'bzrlib.tests.test_selftest',
3811
'bzrlib.tests.test_serializer',
3812
'bzrlib.tests.test_setup',
3813
'bzrlib.tests.test_sftp_transport',
3814
'bzrlib.tests.test_shelf',
3815
'bzrlib.tests.test_shelf_ui',
3816
'bzrlib.tests.test_smart',
3817
'bzrlib.tests.test_smart_add',
3818
'bzrlib.tests.test_smart_request',
3819
'bzrlib.tests.test_smart_transport',
3820
'bzrlib.tests.test_smtp_connection',
3821
'bzrlib.tests.test_source',
3822
'bzrlib.tests.test_ssh_transport',
3823
'bzrlib.tests.test_status',
3824
'bzrlib.tests.test_store',
3825
'bzrlib.tests.test_strace',
3826
'bzrlib.tests.test_subsume',
3827
'bzrlib.tests.test_switch',
3828
'bzrlib.tests.test_symbol_versioning',
3829
'bzrlib.tests.test_tag',
3830
'bzrlib.tests.test_testament',
3831
'bzrlib.tests.test_textfile',
3832
'bzrlib.tests.test_textmerge',
3833
'bzrlib.tests.test_timestamp',
3834
'bzrlib.tests.test_trace',
3835
'bzrlib.tests.test_transactions',
3836
'bzrlib.tests.test_transform',
3837
'bzrlib.tests.test_transport',
3838
'bzrlib.tests.test_transport_log',
3839
'bzrlib.tests.test_tree',
3840
'bzrlib.tests.test_treebuilder',
3841
'bzrlib.tests.test_tsort',
3842
'bzrlib.tests.test_tuned_gzip',
3843
'bzrlib.tests.test_ui',
3844
'bzrlib.tests.test_uncommit',
3845
'bzrlib.tests.test_upgrade',
3846
'bzrlib.tests.test_upgrade_stacked',
3847
'bzrlib.tests.test_urlutils',
3848
'bzrlib.tests.test_version',
3849
'bzrlib.tests.test_version_info',
3850
'bzrlib.tests.test_weave',
3851
'bzrlib.tests.test_whitebox',
3852
'bzrlib.tests.test_win32utils',
3853
'bzrlib.tests.test_workingtree',
3854
'bzrlib.tests.test_workingtree_4',
3855
'bzrlib.tests.test_wsgi',
3856
'bzrlib.tests.test_xml',
3860
def _test_suite_modules_to_doctest():
3861
"""Return the list of modules to doctest."""
3864
'bzrlib.branchbuilder',
3867
'bzrlib.iterablefile',
3871
'bzrlib.symbol_versioning',
3874
'bzrlib.version_info_formats.format_custom',
3419
3878
def test_suite(keep_only=None, starting_with=None):
3420
3879
"""Build and return TestSuite for the whole of bzrlib.
3427
3886
This function can be replaced if you need to change the default test
3428
3887
suite on a global basis, but it is not encouraged.
3432
'bzrlib.tests.blackbox',
3433
'bzrlib.tests.commands',
3434
'bzrlib.tests.per_branch',
3435
'bzrlib.tests.per_bzrdir',
3436
'bzrlib.tests.per_interrepository',
3437
'bzrlib.tests.per_intertree',
3438
'bzrlib.tests.per_inventory',
3439
'bzrlib.tests.per_interbranch',
3440
'bzrlib.tests.per_lock',
3441
'bzrlib.tests.per_transport',
3442
'bzrlib.tests.per_tree',
3443
'bzrlib.tests.per_pack_repository',
3444
'bzrlib.tests.per_repository',
3445
'bzrlib.tests.per_repository_chk',
3446
'bzrlib.tests.per_repository_reference',
3447
'bzrlib.tests.per_versionedfile',
3448
'bzrlib.tests.per_workingtree',
3449
'bzrlib.tests.test__annotator',
3450
'bzrlib.tests.test__chk_map',
3451
'bzrlib.tests.test__dirstate_helpers',
3452
'bzrlib.tests.test__groupcompress',
3453
'bzrlib.tests.test__known_graph',
3454
'bzrlib.tests.test__rio',
3455
'bzrlib.tests.test__walkdirs_win32',
3456
'bzrlib.tests.test_ancestry',
3457
'bzrlib.tests.test_annotate',
3458
'bzrlib.tests.test_api',
3459
'bzrlib.tests.test_atomicfile',
3460
'bzrlib.tests.test_bad_files',
3461
'bzrlib.tests.test_bencode',
3462
'bzrlib.tests.test_bisect_multi',
3463
'bzrlib.tests.test_branch',
3464
'bzrlib.tests.test_branchbuilder',
3465
'bzrlib.tests.test_btree_index',
3466
'bzrlib.tests.test_bugtracker',
3467
'bzrlib.tests.test_bundle',
3468
'bzrlib.tests.test_bzrdir',
3469
'bzrlib.tests.test__chunks_to_lines',
3470
'bzrlib.tests.test_cache_utf8',
3471
'bzrlib.tests.test_chk_map',
3472
'bzrlib.tests.test_chk_serializer',
3473
'bzrlib.tests.test_chunk_writer',
3474
'bzrlib.tests.test_clean_tree',
3475
'bzrlib.tests.test_commands',
3476
'bzrlib.tests.test_commit',
3477
'bzrlib.tests.test_commit_merge',
3478
'bzrlib.tests.test_config',
3479
'bzrlib.tests.test_conflicts',
3480
'bzrlib.tests.test_counted_lock',
3481
'bzrlib.tests.test_crash',
3482
'bzrlib.tests.test_decorators',
3483
'bzrlib.tests.test_delta',
3484
'bzrlib.tests.test_debug',
3485
'bzrlib.tests.test_deprecated_graph',
3486
'bzrlib.tests.test_diff',
3487
'bzrlib.tests.test_directory_service',
3488
'bzrlib.tests.test_dirstate',
3489
'bzrlib.tests.test_email_message',
3490
'bzrlib.tests.test_eol_filters',
3491
'bzrlib.tests.test_errors',
3492
'bzrlib.tests.test_export',
3493
'bzrlib.tests.test_extract',
3494
'bzrlib.tests.test_fetch',
3495
'bzrlib.tests.test_fifo_cache',
3496
'bzrlib.tests.test_filters',
3497
'bzrlib.tests.test_ftp_transport',
3498
'bzrlib.tests.test_foreign',
3499
'bzrlib.tests.test_generate_docs',
3500
'bzrlib.tests.test_generate_ids',
3501
'bzrlib.tests.test_globbing',
3502
'bzrlib.tests.test_gpg',
3503
'bzrlib.tests.test_graph',
3504
'bzrlib.tests.test_groupcompress',
3505
'bzrlib.tests.test_hashcache',
3506
'bzrlib.tests.test_help',
3507
'bzrlib.tests.test_hooks',
3508
'bzrlib.tests.test_http',
3509
'bzrlib.tests.test_http_response',
3510
'bzrlib.tests.test_https_ca_bundle',
3511
'bzrlib.tests.test_identitymap',
3512
'bzrlib.tests.test_ignores',
3513
'bzrlib.tests.test_index',
3514
'bzrlib.tests.test_info',
3515
'bzrlib.tests.test_inv',
3516
'bzrlib.tests.test_inventory_delta',
3517
'bzrlib.tests.test_knit',
3518
'bzrlib.tests.test_lazy_import',
3519
'bzrlib.tests.test_lazy_regex',
3520
'bzrlib.tests.test_lock',
3521
'bzrlib.tests.test_lockable_files',
3522
'bzrlib.tests.test_lockdir',
3523
'bzrlib.tests.test_log',
3524
'bzrlib.tests.test_lru_cache',
3525
'bzrlib.tests.test_lsprof',
3526
'bzrlib.tests.test_mail_client',
3527
'bzrlib.tests.test_memorytree',
3528
'bzrlib.tests.test_merge',
3529
'bzrlib.tests.test_merge3',
3530
'bzrlib.tests.test_merge_core',
3531
'bzrlib.tests.test_merge_directive',
3532
'bzrlib.tests.test_missing',
3533
'bzrlib.tests.test_msgeditor',
3534
'bzrlib.tests.test_multiparent',
3535
'bzrlib.tests.test_mutabletree',
3536
'bzrlib.tests.test_nonascii',
3537
'bzrlib.tests.test_options',
3538
'bzrlib.tests.test_osutils',
3539
'bzrlib.tests.test_osutils_encodings',
3540
'bzrlib.tests.test_pack',
3541
'bzrlib.tests.test_patch',
3542
'bzrlib.tests.test_patches',
3543
'bzrlib.tests.test_permissions',
3544
'bzrlib.tests.test_plugins',
3545
'bzrlib.tests.test_progress',
3546
'bzrlib.tests.test_read_bundle',
3547
'bzrlib.tests.test_reconcile',
3548
'bzrlib.tests.test_reconfigure',
3549
'bzrlib.tests.test_registry',
3550
'bzrlib.tests.test_remote',
3551
'bzrlib.tests.test_rename_map',
3552
'bzrlib.tests.test_repository',
3553
'bzrlib.tests.test_revert',
3554
'bzrlib.tests.test_revision',
3555
'bzrlib.tests.test_revisionspec',
3556
'bzrlib.tests.test_revisiontree',
3557
'bzrlib.tests.test_rio',
3558
'bzrlib.tests.test_rules',
3559
'bzrlib.tests.test_sampler',
3560
'bzrlib.tests.test_selftest',
3561
'bzrlib.tests.test_serializer',
3562
'bzrlib.tests.test_setup',
3563
'bzrlib.tests.test_sftp_transport',
3564
'bzrlib.tests.test_shelf',
3565
'bzrlib.tests.test_shelf_ui',
3566
'bzrlib.tests.test_smart',
3567
'bzrlib.tests.test_smart_add',
3568
'bzrlib.tests.test_smart_request',
3569
'bzrlib.tests.test_smart_transport',
3570
'bzrlib.tests.test_smtp_connection',
3571
'bzrlib.tests.test_source',
3572
'bzrlib.tests.test_ssh_transport',
3573
'bzrlib.tests.test_status',
3574
'bzrlib.tests.test_store',
3575
'bzrlib.tests.test_strace',
3576
'bzrlib.tests.test_subsume',
3577
'bzrlib.tests.test_switch',
3578
'bzrlib.tests.test_symbol_versioning',
3579
'bzrlib.tests.test_tag',
3580
'bzrlib.tests.test_testament',
3581
'bzrlib.tests.test_textfile',
3582
'bzrlib.tests.test_textmerge',
3583
'bzrlib.tests.test_timestamp',
3584
'bzrlib.tests.test_trace',
3585
'bzrlib.tests.test_transactions',
3586
'bzrlib.tests.test_transform',
3587
'bzrlib.tests.test_transport',
3588
'bzrlib.tests.test_transport_log',
3589
'bzrlib.tests.test_tree',
3590
'bzrlib.tests.test_treebuilder',
3591
'bzrlib.tests.test_tsort',
3592
'bzrlib.tests.test_tuned_gzip',
3593
'bzrlib.tests.test_ui',
3594
'bzrlib.tests.test_uncommit',
3595
'bzrlib.tests.test_upgrade',
3596
'bzrlib.tests.test_upgrade_stacked',
3597
'bzrlib.tests.test_urlutils',
3598
'bzrlib.tests.test_version',
3599
'bzrlib.tests.test_version_info',
3600
'bzrlib.tests.test_weave',
3601
'bzrlib.tests.test_whitebox',
3602
'bzrlib.tests.test_win32utils',
3603
'bzrlib.tests.test_workingtree',
3604
'bzrlib.tests.test_workingtree_4',
3605
'bzrlib.tests.test_wsgi',
3606
'bzrlib.tests.test_xml',
3609
3890
loader = TestUtil.TestLoader()