Index: b/Lib/test/regrtest.py =================================================================== --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -255,7 +255,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, - exclude=False, single=False, randomize=False, fromfile=None, + exclude=False, single=0, randomize=False, fromfile=None, findleaks=False, use_resources=None, trace=False, coverdir='coverage', runleaks=False, huntrleaks=False, verbose2=False, print_slow=False, random_seed=None, use_mp=None, verbose3=False, forever=False, @@ -306,7 +306,7 @@ 'runleaks', 'huntrleaks=', 'memlimit=', 'randseed=', 'multiprocess=', 'coverage', 'slaveargs=', 'forever', 'debug', 'start=', 'nowindows', 'header', 'testdir=', 'timeout=', 'wait', - 'failfast', 'match=']) + 'failfast', 'match=', 'next=']) except getopt.error as msg: usage(msg) @@ -340,7 +340,9 @@ elif o in ('-S', '--start'): start = a elif o in ('-s', '--single'): - single = True + single = 1 + elif o == '--next': + single = int(a) elif o in ('-o', '--slow'): print_slow = True elif o in ('-r', '--randomize'): @@ -534,7 +536,7 @@ args = [] # For a partial run, we do not need to clutter the output. - if verbose or header or not (quiet or single or tests or args): + if verbose or header or not (quiet or single != 1 or tests or args): # Print basic platform information print("==", platform.python_implementation(), *sys.version.split()) print("== ", platform.platform(aliased=True), @@ -551,9 +553,13 @@ selected = tests or args or alltests if single: - selected = selected[:1] + first_selected = selected[0] + index_selected = alltests.index(first_selected) + if index_selected + single > len(alltests): + single = len(alltests) - index_selected + selected = alltests[index_selected:index_selected+single] try: - next_single_test = alltests[alltests.index(selected[0])+1] + next_single_test = alltests[index_selected+single] except IndexError: next_single_test = None # Remove all the selected tests that precede start if it's set.