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