1010
1111-v: verbose -- run tests in verbose mode with output to stdout
1212-w: verbose2 -- re-run failed tests in verbose mode
13+ -d: debug -- print traceback for failed tests
1314-q: quiet -- don't print anything except if a test fails
1415-g: generate -- write the output file for a test instead of comparing it
1516-x: exclude -- arguments are tests to *exclude*
@@ -179,7 +180,7 @@ def usage(code, msg=''):
179180def main (tests = None , testdir = None , verbose = 0 , quiet = False , generate = False ,
180181 exclude = False , single = False , randomize = False , fromfile = None ,
181182 findleaks = False , use_resources = None , trace = False , coverdir = 'coverage' ,
182- runleaks = False , huntrleaks = False , verbose2 = False ):
183+ runleaks = False , huntrleaks = False , verbose2 = False , debug = False ):
183184 """Execute a test suite.
184185
185186 This also parses command-line options and modifies its behavior
@@ -204,12 +205,13 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, generate=False,
204205
205206 test_support .record_original_stdout (sys .stdout )
206207 try :
207- opts , args = getopt .getopt (sys .argv [1 :], 'hvgqxsrf :lu:t:TD:NLR:wM:' ,
208+ opts , args = getopt .getopt (sys .argv [1 :], 'dhvgqxsrf :lu:t:TD:NLR:wM:' ,
208209 ['help' , 'verbose' , 'quiet' , 'generate' ,
209210 'exclude' , 'single' , 'random' , 'fromfile' ,
210211 'findleaks' , 'use=' , 'threshold=' , 'trace' ,
211212 'coverdir=' , 'nocoverdir' , 'runleaks' ,
212213 'huntrleaks=' , 'verbose2' , 'memlimit=' ,
214+ 'debug' ,
213215 ])
214216 except getopt .error as msg :
215217 usage (2 , msg )
@@ -224,6 +226,8 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, generate=False,
224226 verbose += 1
225227 elif o in ('-w' , '--verbose2' ):
226228 verbose2 = True
229+ elif o in ('-d' , '--debug' ):
230+ debug = True
227231 elif o in ('-q' , '--quiet' ):
228232 quiet = True ;
229233 verbose = 0
@@ -435,7 +439,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, generate=False,
435439 try :
436440 test_support .verbose = 1
437441 ok = runtest (test , generate , 1 , quiet , testdir ,
438- huntrleaks )
442+ huntrleaks , debug )
439443 except KeyboardInterrupt :
440444 # print a newline separate from the ^C
441445 print ()
@@ -496,7 +500,8 @@ def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
496500 tests .sort ()
497501 return stdtests + tests
498502
499- def runtest (test , generate , verbose , quiet , testdir = None , huntrleaks = False ):
503+ def runtest (test , generate , verbose , quiet , testdir = None ,
504+ huntrleaks = False , debug = False ):
500505 """Run a single test.
501506
502507 test -- the name of the test
@@ -507,6 +512,8 @@ def runtest(test, generate, verbose, quiet, testdir=None, huntrleaks=False):
507512 testdir -- test directory
508513 huntrleaks -- run multiple times to test for leaks; requires a debug
509514 build; a triple corresponding to -R's three arguments
515+ debug -- if true, print tracebacks for failed tests regardless of
516+ verbose setting
510517 Return:
511518 -2 test skipped because resource denied
512519 -1 test skipped for some other reason
@@ -516,12 +523,12 @@ def runtest(test, generate, verbose, quiet, testdir=None, huntrleaks=False):
516523
517524 try :
518525 return runtest_inner (test , generate , verbose , quiet , testdir ,
519- huntrleaks )
526+ huntrleaks , debug )
520527 finally :
521528 cleanup_test_droppings (test , verbose )
522529
523530def runtest_inner (test , generate , verbose , quiet ,
524- testdir = None , huntrleaks = False ):
531+ testdir = None , huntrleaks = False , debug = False ):
525532 test_support .unload (test )
526533 if not testdir :
527534 testdir = findtestdir ()
@@ -576,7 +583,7 @@ def runtest_inner(test, generate, verbose, quiet,
576583 type , value = sys .exc_info ()[:2 ]
577584 print ("test" , test , "crashed --" , str (type ) + ":" , value )
578585 sys .stdout .flush ()
579- if verbose :
586+ if verbose or debug :
580587 traceback .print_exc (file = sys .stdout )
581588 sys .stdout .flush ()
582589 return 0
0 commit comments