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 ] 29 if 'PYTHONOLDPARSER' not in os.environ: 30 args.append('-E') # Ignore environment variables 31 32 # Allow user-specified interpreter options to override our defaults. 33 args.extend(test.support.args_from_interpreter_flags()) 34 35 args.extend(['-m', 'test', # Run the test suite 36 '-r', # Randomize test order 37 '-w', # Re-run failed tests in verbose mode 38 ]) 39 if sys.platform == 'win32': 40 args.append('-n') # Silence alerts under Windows 41 if not any(is_multiprocess_flag(arg) for arg in regrtest_args): 42 args.extend(['-j', '0']) # Use all CPU cores 43 if not any(is_resource_use_flag(arg) for arg in regrtest_args): 44 args.extend(['-u', 'all,-largefile,-audio,-gui']) 45 args.extend(regrtest_args) 46 print(' '.join(args)) 47 if sys.platform == 'win32': 48 from subprocess import call 49 sys.exit(call(args)) 50 else: 51 os.execv(sys.executable, args) 52 53 54if __name__ == '__main__': 55 main(sys.argv[1:]) 56