/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

  • Committer: Ian Clatworthy
  • Date: 2007-04-04 12:59:15 UTC
  • mto: (2418.4.1 jam-integration)
  • mto: This revision was merged to the branch mainline in revision 2448.
  • Revision ID: ian.clatworthy@internode.on.net-20070404125915-w0m76xc9tjxhbo42
Add --randomize and update help

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
import logging
35
35
import os
36
36
from pprint import pformat
 
37
import random
37
38
import re
38
39
import shlex
39
40
import stat
518
519
        result.stop_early = self.stop_on_failure
519
520
        result.report_starting()
520
521
        if self.list_only:
521
 
            self.stream.writeln("Listing tests only ...\n")
 
522
            if self.verbosity >= 2:
 
523
                self.stream.writeln("Listing tests only ...\n")
 
524
            run = 0
522
525
            for t in iter_suite_tests(test):
523
526
                self.stream.writeln("%s" % (t.id()))
 
527
                run += 1
 
528
            actionTaken = "Listed"
524
529
        else: 
525
530
            test.run(result)
 
531
            run = result.testsRun
 
532
            actionTaken = "Ran"
526
533
        stopTime = time.time()
527
534
        timeTaken = stopTime - startTime
528
535
        result.printErrors()
529
536
        self.stream.writeln(result.separator2)
530
 
        run = result.testsRun
531
 
        self.stream.writeln("Ran %d test%s in %.3fs" %
532
 
                            (run, run != 1 and "s" or "", timeTaken))
 
537
        self.stream.writeln("%s %d test%s in %.3fs" % (actionTaken,
 
538
                            run, run != 1 and "s" or "", timeTaken))
533
539
        self.stream.writeln()
534
540
        if not result.wasSuccessful():
535
541
            self.stream.write("FAILED (")
2036
2042
            self.transport_readonly_server = HttpServer
2037
2043
 
2038
2044
 
2039
 
def filter_suite_by_re(suite, pattern, exclude_pattern=None):
2040
 
    result = TestUtil.TestSuite()
2041
 
    filter_re = re.compile(pattern)
2042
 
    if exclude_pattern is not None:
2043
 
        exclude_re = re.compile(exclude_pattern)
2044
 
    for test in iter_suite_tests(suite):
2045
 
        test_id = test.id()
2046
 
        if exclude_pattern is None or not exclude_re.search(test_id):
2047
 
            if filter_re.search(test_id):
2048
 
                result.addTest(test)
2049
 
    return result
2050
 
 
2051
 
 
2052
 
def sort_suite_by_re(suite, pattern, exclude_pattern=None):
 
2045
def filter_suite_by_re(suite, pattern, exclude_pattern=None,
 
2046
    random_order=False):
 
2047
    return sort_suite_by_re(suite, pattern, False, exclude_pattern,
 
2048
        random_order)
 
2049
 
 
2050
 
 
2051
def sort_suite_by_re(suite, pattern, append_rest=True, exclude_pattern=None,
 
2052
    random_order=False):
2053
2053
    first = []
2054
2054
    second = []
2055
2055
    filter_re = re.compile(pattern)
2060
2060
        if exclude_pattern is None or not exclude_re.search(test_id):
2061
2061
            if filter_re.search(test_id):
2062
2062
                first.append(test)
2063
 
            else:
 
2063
            elif append_rest:
2064
2064
                second.append(test)
 
2065
    if random_order:
 
2066
        random.shuffle(first)
 
2067
        random.shuffle(second)
2065
2068
    return TestUtil.TestSuite(first + second)
2066
2069
 
2067
2070
 
2068
 
def list_tests(suite):
2069
 
    "Lists the tests in the suite."
2070
 
 
2071
2071
def run_suite(suite, name='test', verbose=False, pattern=".*",
2072
2072
              stop_on_failure=False, keep_output=False,
2073
2073
              transport=None, lsprof_timed=None, bench_history=None,
2074
2074
              matching_tests_first=None,
2075
2075
              numbered_dirs=None,
2076
2076
              list_only=False,
 
2077
              random_seed=None,
2077
2078
              exclude_pattern=None):
2078
2079
    global NUMBERED_DIRS
2079
2080
    if numbered_dirs is not None:
2091
2092
                            bench_history=bench_history,
2092
2093
                            list_only=list_only)
2093
2094
    runner.stop_on_failure=stop_on_failure
2094
 
    if pattern != '.*' or exclude_pattern is not None:
 
2095
    # Initialise the random number generator and display the seed used.
 
2096
    # We convert the seed to a long to make it reuseable across invocations.
 
2097
    random_order = False
 
2098
    if random_seed is not None:
 
2099
        random_order = True
 
2100
        if random_seed == "now":
 
2101
            random_seed = long(time.time())
 
2102
        else:
 
2103
            # Convert the seed to a long if we can
 
2104
            try:
 
2105
                random_seed = long(random_seed)
 
2106
            except:
 
2107
                pass
 
2108
        runner.stream.writeln("Randomizing test order using seed %s\n" %
 
2109
            (random_seed))
 
2110
        random.seed(random_seed)
 
2111
    # Customise the list of tests if requested
 
2112
    if pattern != '.*' or exclude_pattern is not None or random_order:
2095
2113
        if matching_tests_first:
2096
 
            suite = sort_suite_by_re(suite, pattern, exclude_pattern)
 
2114
            suite = sort_suite_by_re(suite, pattern, exclude_pattern,
 
2115
                random_order)
2097
2116
        else:
2098
 
            suite = filter_suite_by_re(suite, pattern, exclude_pattern)
 
2117
            suite = filter_suite_by_re(suite, pattern, exclude_pattern,
 
2118
                random_order)
2099
2119
    result = runner.run(suite)
2100
2120
    return result.wasSuccessful()
2101
2121
 
2109
2129
             matching_tests_first=None,
2110
2130
             numbered_dirs=None,
2111
2131
             list_only=False,
 
2132
             random_seed=None,
2112
2133
             exclude_pattern=None):
2113
2134
    """Run the whole test suite under the enhanced runner"""
2114
2135
    # XXX: Very ugly way to do this...
2135
2156
                     matching_tests_first=matching_tests_first,
2136
2157
                     numbered_dirs=numbered_dirs,
2137
2158
                     list_only=list_only,
 
2159
                     random_seed=random_seed,
2138
2160
                     exclude_pattern=exclude_pattern)
2139
2161
    finally:
2140
2162
        default_transport = old_transport