1"""Run Python's test suite in a fast, rigorous way. 2 3The defaults are meant to be reasonably thorough, while skipping certain 4tests that can be time-consuming or resource-intensive (e.g. largefile), 5or distracting (e.g. audio and gui). These defaults can be overridden by 6simply passing a -u option to this script. 7 8""" 9 10import os 11import sys 12import test.support 13 14 15def is_multiprocess_flag(arg): 16 return arg.startswith('-j') or arg.startswith('--multiprocess') 17 18 19def is_resource_use_flag(arg): 20 return arg.startswith('-u') or arg.startswith('--use') 21 22 23def main(regrtest_args): 24 args = [sys.executable, 25 '-u', # Unbuffered stdout and stderr 26 '-W', 'default', # Warnings set to 'default' 27 '-bb', # Warnings about bytes/bytearray 28 '-E', # Ignore environment variables 29 ] 30 # Allow user-specified interpreter options to override our defaults. 31 args.extend(test.support.args_from_interpreter_flags()) 32 33 args.extend(['-m', 'test', # Run the test suite 34 '-r', # Randomize test order 35 '-w', # Re-run failed tests in verbose mode 36 ]) 37 if sys.platform == 'win32': 38 args.append('-n') # Silence alerts under Windows 39 if not any(is_multiprocess_flag(arg) for arg in regrtest_args): 40 args.extend(['-j', '0']) # Use all CPU cores 41 if not any(is_resource_use_flag(arg) for arg in regrtest_args): 42 args.extend(['-u', 'all,-largefile,-audio,-gui']) 43 args.extend(regrtest_args) 44 print(' '.join(args)) 45 if sys.platform == 'win32': 46 from subprocess import call 47 sys.exit(call(args)) 48 else: 49 os.execv(sys.executable, args) 50 51 52if __name__ == '__main__': 53 main(sys.argv[1:]) 54