547
610
bench_history=None,
612
result_decorators=None,
614
"""Create a TextTestRunner.
616
:param result_decorators: An optional list of decorators to apply
617
to the result object being used by the runner. Decorators are
618
applied left to right - the first element in the list is the
551
621
self.stream = unittest._WritelnDecorator(stream)
552
622
self.descriptions = descriptions
553
623
self.verbosity = verbosity
554
624
self._bench_history = bench_history
555
self.list_only = list_only
556
625
self._strict = strict
626
self._result_decorators = result_decorators or []
558
628
def run(self, test):
559
629
"Run the given test case or test suite."
560
startTime = time.time()
561
630
if self.verbosity == 1:
562
631
result_class = TextTestResult
563
632
elif self.verbosity >= 2:
564
633
result_class = VerboseTestResult
565
result = result_class(self.stream,
634
original_result = result_class(self.stream,
566
635
self.descriptions,
568
637
bench_history=self._bench_history,
569
num_tests=test.countTestCases(),
570
638
strict=self._strict,
572
result.stop_early = self.stop_on_failure
573
result.report_starting()
575
if self.verbosity >= 2:
576
self.stream.writeln("Listing tests only ...\n")
578
for t in iter_suite_tests(test):
579
self.stream.writeln("%s" % (t.id()))
588
if isinstance(test, testtools.ConcurrentTestSuite):
589
# We need to catch bzr specific behaviors
590
test.run(BZRTransformingResult(result))
593
run = result.testsRun
595
stopTime = time.time()
596
timeTaken = stopTime - startTime
598
self.stream.writeln(result.separator2)
599
self.stream.writeln("%s %d test%s in %.3fs" % (actionTaken,
600
run, run != 1 and "s" or "", timeTaken))
601
self.stream.writeln()
602
if not result.wasSuccessful():
603
self.stream.write("FAILED (")
604
failed, errored = map(len, (result.failures, result.errors))
606
self.stream.write("failures=%d" % failed)
608
if failed: self.stream.write(", ")
609
self.stream.write("errors=%d" % errored)
610
if result.known_failure_count:
611
if failed or errored: self.stream.write(", ")
612
self.stream.write("known_failure_count=%d" %
613
result.known_failure_count)
614
self.stream.writeln(")")
616
if result.known_failure_count:
617
self.stream.writeln("OK (known_failures=%d)" %
618
result.known_failure_count)
620
self.stream.writeln("OK")
621
if result.skip_count > 0:
622
skipped = result.skip_count
623
self.stream.writeln('%d test%s skipped' %
624
(skipped, skipped != 1 and "s" or ""))
625
if result.unsupported:
626
for feature, count in sorted(result.unsupported.items()):
627
self.stream.writeln("Missing feature '%s' skipped %d tests." %
640
# Signal to result objects that look at stop early policy to stop,
641
original_result.stop_early = self.stop_on_failure
642
result = original_result
643
for decorator in self._result_decorators:
644
result = decorator(result)
645
result.stop_early = self.stop_on_failure
651
if isinstance(test, testtools.ConcurrentTestSuite):
652
# We need to catch bzr specific behaviors
653
result = BZRTransformingResult(result)
654
result.startTestRun()
659
# higher level code uses our extended protocol to determine
660
# what exit code to give.
661
return original_result
633
664
def iter_suite_tests(suite):
3338
3486
test_prefix_alias_registry.register('bp', 'bzrlib.plugins')
3489
def _test_suite_testmod_names():
3490
"""Return the standard list of test module names to test."""
3493
'bzrlib.tests.blackbox',
3494
'bzrlib.tests.commands',
3495
'bzrlib.tests.per_branch',
3496
'bzrlib.tests.per_bzrdir',
3497
'bzrlib.tests.per_interrepository',
3498
'bzrlib.tests.per_intertree',
3499
'bzrlib.tests.per_inventory',
3500
'bzrlib.tests.per_interbranch',
3501
'bzrlib.tests.per_lock',
3502
'bzrlib.tests.per_transport',
3503
'bzrlib.tests.per_tree',
3504
'bzrlib.tests.per_pack_repository',
3505
'bzrlib.tests.per_repository',
3506
'bzrlib.tests.per_repository_chk',
3507
'bzrlib.tests.per_repository_reference',
3508
'bzrlib.tests.per_versionedfile',
3509
'bzrlib.tests.per_workingtree',
3510
'bzrlib.tests.test__annotator',
3511
'bzrlib.tests.test__chk_map',
3512
'bzrlib.tests.test__dirstate_helpers',
3513
'bzrlib.tests.test__groupcompress',
3514
'bzrlib.tests.test__known_graph',
3515
'bzrlib.tests.test__rio',
3516
'bzrlib.tests.test__walkdirs_win32',
3517
'bzrlib.tests.test_ancestry',
3518
'bzrlib.tests.test_annotate',
3519
'bzrlib.tests.test_api',
3520
'bzrlib.tests.test_atomicfile',
3521
'bzrlib.tests.test_bad_files',
3522
'bzrlib.tests.test_bencode',
3523
'bzrlib.tests.test_bisect_multi',
3524
'bzrlib.tests.test_branch',
3525
'bzrlib.tests.test_branchbuilder',
3526
'bzrlib.tests.test_btree_index',
3527
'bzrlib.tests.test_bugtracker',
3528
'bzrlib.tests.test_bundle',
3529
'bzrlib.tests.test_bzrdir',
3530
'bzrlib.tests.test__chunks_to_lines',
3531
'bzrlib.tests.test_cache_utf8',
3532
'bzrlib.tests.test_chk_map',
3533
'bzrlib.tests.test_chk_serializer',
3534
'bzrlib.tests.test_chunk_writer',
3535
'bzrlib.tests.test_clean_tree',
3536
'bzrlib.tests.test_commands',
3537
'bzrlib.tests.test_commit',
3538
'bzrlib.tests.test_commit_merge',
3539
'bzrlib.tests.test_config',
3540
'bzrlib.tests.test_conflicts',
3541
'bzrlib.tests.test_counted_lock',
3542
'bzrlib.tests.test_crash',
3543
'bzrlib.tests.test_decorators',
3544
'bzrlib.tests.test_delta',
3545
'bzrlib.tests.test_debug',
3546
'bzrlib.tests.test_deprecated_graph',
3547
'bzrlib.tests.test_diff',
3548
'bzrlib.tests.test_directory_service',
3549
'bzrlib.tests.test_dirstate',
3550
'bzrlib.tests.test_email_message',
3551
'bzrlib.tests.test_eol_filters',
3552
'bzrlib.tests.test_errors',
3553
'bzrlib.tests.test_export',
3554
'bzrlib.tests.test_extract',
3555
'bzrlib.tests.test_fetch',
3556
'bzrlib.tests.test_fifo_cache',
3557
'bzrlib.tests.test_filters',
3558
'bzrlib.tests.test_ftp_transport',
3559
'bzrlib.tests.test_foreign',
3560
'bzrlib.tests.test_generate_docs',
3561
'bzrlib.tests.test_generate_ids',
3562
'bzrlib.tests.test_globbing',
3563
'bzrlib.tests.test_gpg',
3564
'bzrlib.tests.test_graph',
3565
'bzrlib.tests.test_groupcompress',
3566
'bzrlib.tests.test_hashcache',
3567
'bzrlib.tests.test_help',
3568
'bzrlib.tests.test_hooks',
3569
'bzrlib.tests.test_http',
3570
'bzrlib.tests.test_http_response',
3571
'bzrlib.tests.test_https_ca_bundle',
3572
'bzrlib.tests.test_identitymap',
3573
'bzrlib.tests.test_ignores',
3574
'bzrlib.tests.test_index',
3575
'bzrlib.tests.test_info',
3576
'bzrlib.tests.test_inv',
3577
'bzrlib.tests.test_inventory_delta',
3578
'bzrlib.tests.test_knit',
3579
'bzrlib.tests.test_lazy_import',
3580
'bzrlib.tests.test_lazy_regex',
3581
'bzrlib.tests.test_lock',
3582
'bzrlib.tests.test_lockable_files',
3583
'bzrlib.tests.test_lockdir',
3584
'bzrlib.tests.test_log',
3585
'bzrlib.tests.test_lru_cache',
3586
'bzrlib.tests.test_lsprof',
3587
'bzrlib.tests.test_mail_client',
3588
'bzrlib.tests.test_memorytree',
3589
'bzrlib.tests.test_merge',
3590
'bzrlib.tests.test_merge3',
3591
'bzrlib.tests.test_merge_core',
3592
'bzrlib.tests.test_merge_directive',
3593
'bzrlib.tests.test_missing',
3594
'bzrlib.tests.test_msgeditor',
3595
'bzrlib.tests.test_multiparent',
3596
'bzrlib.tests.test_mutabletree',
3597
'bzrlib.tests.test_nonascii',
3598
'bzrlib.tests.test_options',
3599
'bzrlib.tests.test_osutils',
3600
'bzrlib.tests.test_osutils_encodings',
3601
'bzrlib.tests.test_pack',
3602
'bzrlib.tests.test_patch',
3603
'bzrlib.tests.test_patches',
3604
'bzrlib.tests.test_permissions',
3605
'bzrlib.tests.test_plugins',
3606
'bzrlib.tests.test_progress',
3607
'bzrlib.tests.test_read_bundle',
3608
'bzrlib.tests.test_reconcile',
3609
'bzrlib.tests.test_reconfigure',
3610
'bzrlib.tests.test_registry',
3611
'bzrlib.tests.test_remote',
3612
'bzrlib.tests.test_rename_map',
3613
'bzrlib.tests.test_repository',
3614
'bzrlib.tests.test_revert',
3615
'bzrlib.tests.test_revision',
3616
'bzrlib.tests.test_revisionspec',
3617
'bzrlib.tests.test_revisiontree',
3618
'bzrlib.tests.test_rio',
3619
'bzrlib.tests.test_rules',
3620
'bzrlib.tests.test_sampler',
3621
'bzrlib.tests.test_selftest',
3622
'bzrlib.tests.test_serializer',
3623
'bzrlib.tests.test_setup',
3624
'bzrlib.tests.test_sftp_transport',
3625
'bzrlib.tests.test_shelf',
3626
'bzrlib.tests.test_shelf_ui',
3627
'bzrlib.tests.test_smart',
3628
'bzrlib.tests.test_smart_add',
3629
'bzrlib.tests.test_smart_request',
3630
'bzrlib.tests.test_smart_transport',
3631
'bzrlib.tests.test_smtp_connection',
3632
'bzrlib.tests.test_source',
3633
'bzrlib.tests.test_ssh_transport',
3634
'bzrlib.tests.test_status',
3635
'bzrlib.tests.test_store',
3636
'bzrlib.tests.test_strace',
3637
'bzrlib.tests.test_subsume',
3638
'bzrlib.tests.test_switch',
3639
'bzrlib.tests.test_symbol_versioning',
3640
'bzrlib.tests.test_tag',
3641
'bzrlib.tests.test_testament',
3642
'bzrlib.tests.test_textfile',
3643
'bzrlib.tests.test_textmerge',
3644
'bzrlib.tests.test_timestamp',
3645
'bzrlib.tests.test_trace',
3646
'bzrlib.tests.test_transactions',
3647
'bzrlib.tests.test_transform',
3648
'bzrlib.tests.test_transport',
3649
'bzrlib.tests.test_transport_log',
3650
'bzrlib.tests.test_tree',
3651
'bzrlib.tests.test_treebuilder',
3652
'bzrlib.tests.test_tsort',
3653
'bzrlib.tests.test_tuned_gzip',
3654
'bzrlib.tests.test_ui',
3655
'bzrlib.tests.test_uncommit',
3656
'bzrlib.tests.test_upgrade',
3657
'bzrlib.tests.test_upgrade_stacked',
3658
'bzrlib.tests.test_urlutils',
3659
'bzrlib.tests.test_version',
3660
'bzrlib.tests.test_version_info',
3661
'bzrlib.tests.test_weave',
3662
'bzrlib.tests.test_whitebox',
3663
'bzrlib.tests.test_win32utils',
3664
'bzrlib.tests.test_workingtree',
3665
'bzrlib.tests.test_workingtree_4',
3666
'bzrlib.tests.test_wsgi',
3667
'bzrlib.tests.test_xml',
3671
def _test_suite_modules_to_doctest():
3672
"""Return the list of modules to doctest."""
3675
'bzrlib.branchbuilder',
3678
'bzrlib.iterablefile',
3682
'bzrlib.symbol_versioning',
3685
'bzrlib.version_info_formats.format_custom',
3341
3689
def test_suite(keep_only=None, starting_with=None):
3342
3690
"""Build and return TestSuite for the whole of bzrlib.
3349
3697
This function can be replaced if you need to change the default test
3350
3698
suite on a global basis, but it is not encouraged.
3354
'bzrlib.tests.blackbox',
3355
'bzrlib.tests.commands',
3356
'bzrlib.tests.per_branch',
3357
'bzrlib.tests.per_bzrdir',
3358
'bzrlib.tests.per_interrepository',
3359
'bzrlib.tests.per_intertree',
3360
'bzrlib.tests.per_inventory',
3361
'bzrlib.tests.per_interbranch',
3362
'bzrlib.tests.per_lock',
3363
'bzrlib.tests.per_transport',
3364
'bzrlib.tests.per_tree',
3365
'bzrlib.tests.per_repository',
3366
'bzrlib.tests.per_repository_chk',
3367
'bzrlib.tests.per_repository_reference',
3368
'bzrlib.tests.per_workingtree',
3369
'bzrlib.tests.test__annotator',
3370
'bzrlib.tests.test__chk_map',
3371
'bzrlib.tests.test__dirstate_helpers',
3372
'bzrlib.tests.test__groupcompress',
3373
'bzrlib.tests.test__known_graph',
3374
'bzrlib.tests.test__rio',
3375
'bzrlib.tests.test__walkdirs_win32',
3376
'bzrlib.tests.test_ancestry',
3377
'bzrlib.tests.test_annotate',
3378
'bzrlib.tests.test_api',
3379
'bzrlib.tests.test_atomicfile',
3380
'bzrlib.tests.test_bad_files',
3381
'bzrlib.tests.test_bencode',
3382
'bzrlib.tests.test_bisect_multi',
3383
'bzrlib.tests.test_branch',
3384
'bzrlib.tests.test_branchbuilder',
3385
'bzrlib.tests.test_btree_index',
3386
'bzrlib.tests.test_bugtracker',
3387
'bzrlib.tests.test_bundle',
3388
'bzrlib.tests.test_bzrdir',
3389
'bzrlib.tests.test__chunks_to_lines',
3390
'bzrlib.tests.test_cache_utf8',
3391
'bzrlib.tests.test_chk_map',
3392
'bzrlib.tests.test_chk_serializer',
3393
'bzrlib.tests.test_chunk_writer',
3394
'bzrlib.tests.test_clean_tree',
3395
'bzrlib.tests.test_commands',
3396
'bzrlib.tests.test_commit',
3397
'bzrlib.tests.test_commit_merge',
3398
'bzrlib.tests.test_config',
3399
'bzrlib.tests.test_conflicts',
3400
'bzrlib.tests.test_counted_lock',
3401
'bzrlib.tests.test_decorators',
3402
'bzrlib.tests.test_delta',
3403
'bzrlib.tests.test_debug',
3404
'bzrlib.tests.test_deprecated_graph',
3405
'bzrlib.tests.test_diff',
3406
'bzrlib.tests.test_directory_service',
3407
'bzrlib.tests.test_dirstate',
3408
'bzrlib.tests.test_email_message',
3409
'bzrlib.tests.test_eol_filters',
3410
'bzrlib.tests.test_errors',
3411
'bzrlib.tests.test_export',
3412
'bzrlib.tests.test_extract',
3413
'bzrlib.tests.test_fetch',
3414
'bzrlib.tests.test_fifo_cache',
3415
'bzrlib.tests.test_filters',
3416
'bzrlib.tests.test_ftp_transport',
3417
'bzrlib.tests.test_foreign',
3418
'bzrlib.tests.test_generate_docs',
3419
'bzrlib.tests.test_generate_ids',
3420
'bzrlib.tests.test_globbing',
3421
'bzrlib.tests.test_gpg',
3422
'bzrlib.tests.test_graph',
3423
'bzrlib.tests.test_groupcompress',
3424
'bzrlib.tests.test_hashcache',
3425
'bzrlib.tests.test_help',
3426
'bzrlib.tests.test_hooks',
3427
'bzrlib.tests.test_http',
3428
'bzrlib.tests.test_http_response',
3429
'bzrlib.tests.test_https_ca_bundle',
3430
'bzrlib.tests.test_identitymap',
3431
'bzrlib.tests.test_ignores',
3432
'bzrlib.tests.test_index',
3433
'bzrlib.tests.test_info',
3434
'bzrlib.tests.test_inv',
3435
'bzrlib.tests.test_inventory_delta',
3436
'bzrlib.tests.test_knit',
3437
'bzrlib.tests.test_lazy_import',
3438
'bzrlib.tests.test_lazy_regex',
3439
'bzrlib.tests.test_lockable_files',
3440
'bzrlib.tests.test_lockdir',
3441
'bzrlib.tests.test_log',
3442
'bzrlib.tests.test_lru_cache',
3443
'bzrlib.tests.test_lsprof',
3444
'bzrlib.tests.test_mail_client',
3445
'bzrlib.tests.test_memorytree',
3446
'bzrlib.tests.test_merge',
3447
'bzrlib.tests.test_merge3',
3448
'bzrlib.tests.test_merge_core',
3449
'bzrlib.tests.test_merge_directive',
3450
'bzrlib.tests.test_missing',
3451
'bzrlib.tests.test_msgeditor',
3452
'bzrlib.tests.test_multiparent',
3453
'bzrlib.tests.test_mutabletree',
3454
'bzrlib.tests.test_nonascii',
3455
'bzrlib.tests.test_options',
3456
'bzrlib.tests.test_osutils',
3457
'bzrlib.tests.test_osutils_encodings',
3458
'bzrlib.tests.test_pack',
3459
'bzrlib.tests.test_pack_repository',
3460
'bzrlib.tests.test_patch',
3461
'bzrlib.tests.test_patches',
3462
'bzrlib.tests.test_permissions',
3463
'bzrlib.tests.test_plugins',
3464
'bzrlib.tests.test_progress',
3465
'bzrlib.tests.test_read_bundle',
3466
'bzrlib.tests.test_reconcile',
3467
'bzrlib.tests.test_reconfigure',
3468
'bzrlib.tests.test_registry',
3469
'bzrlib.tests.test_remote',
3470
'bzrlib.tests.test_rename_map',
3471
'bzrlib.tests.test_repository',
3472
'bzrlib.tests.test_revert',
3473
'bzrlib.tests.test_revision',
3474
'bzrlib.tests.test_revisionspec',
3475
'bzrlib.tests.test_revisiontree',
3476
'bzrlib.tests.test_rio',
3477
'bzrlib.tests.test_rules',
3478
'bzrlib.tests.test_sampler',
3479
'bzrlib.tests.test_selftest',
3480
'bzrlib.tests.test_serializer',
3481
'bzrlib.tests.test_setup',
3482
'bzrlib.tests.test_sftp_transport',
3483
'bzrlib.tests.test_shelf',
3484
'bzrlib.tests.test_shelf_ui',
3485
'bzrlib.tests.test_smart',
3486
'bzrlib.tests.test_smart_add',
3487
'bzrlib.tests.test_smart_request',
3488
'bzrlib.tests.test_smart_transport',
3489
'bzrlib.tests.test_smtp_connection',
3490
'bzrlib.tests.test_source',
3491
'bzrlib.tests.test_ssh_transport',
3492
'bzrlib.tests.test_status',
3493
'bzrlib.tests.test_store',
3494
'bzrlib.tests.test_strace',
3495
'bzrlib.tests.test_subsume',
3496
'bzrlib.tests.test_switch',
3497
'bzrlib.tests.test_symbol_versioning',
3498
'bzrlib.tests.test_tag',
3499
'bzrlib.tests.test_testament',
3500
'bzrlib.tests.test_textfile',
3501
'bzrlib.tests.test_textmerge',
3502
'bzrlib.tests.test_timestamp',
3503
'bzrlib.tests.test_trace',
3504
'bzrlib.tests.test_transactions',
3505
'bzrlib.tests.test_transform',
3506
'bzrlib.tests.test_transport',
3507
'bzrlib.tests.test_transport_log',
3508
'bzrlib.tests.test_tree',
3509
'bzrlib.tests.test_treebuilder',
3510
'bzrlib.tests.test_tsort',
3511
'bzrlib.tests.test_tuned_gzip',
3512
'bzrlib.tests.test_ui',
3513
'bzrlib.tests.test_uncommit',
3514
'bzrlib.tests.test_upgrade',
3515
'bzrlib.tests.test_upgrade_stacked',
3516
'bzrlib.tests.test_urlutils',
3517
'bzrlib.tests.test_version',
3518
'bzrlib.tests.test_version_info',
3519
'bzrlib.tests.test_versionedfile',
3520
'bzrlib.tests.test_weave',
3521
'bzrlib.tests.test_whitebox',
3522
'bzrlib.tests.test_win32utils',
3523
'bzrlib.tests.test_workingtree',
3524
'bzrlib.tests.test_workingtree_4',
3525
'bzrlib.tests.test_wsgi',
3526
'bzrlib.tests.test_xml',
3529
3701
loader = TestUtil.TestLoader()
3531
3703
if keep_only is not None:
3532
3704
id_filter = TestIdList(keep_only)
3533
3705
if starting_with:
3534
starting_with = [test_prefix_alias_registry.resolve_alias(start)
3535
for start in starting_with]
3536
3706
# We take precedence over keep_only because *at loading time* using
3537
3707
# both options means we will load less tests for the same final result.
3538
3708
def interesting_module(name):