blob: 30283023b6d3d36a957ae7af662d6ae5c42b7b10 [file] [log] [blame]
Nadeem Vawda3c01d162011-08-01 23:48:26 +02001"""Run Python's test suite in a fast, rigorous way.
2
Nadeem Vawda328b5012011-08-02 10:16:45 +02003The 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.
Nadeem Vawda3c01d162011-08-01 23:48:26 +02007
8"""
9
10import os
11import sys
12import test.support
Antoine Pitrouebdcd852012-05-18 18:33:07 +020013try:
14 import threading
15except ImportError:
16 threading = None
Nadeem Vawda3c01d162011-08-01 23:48:26 +020017
18
19def is_multiprocess_flag(arg):
20 return arg.startswith('-j') or arg.startswith('--multiprocess')
21
22
23def is_resource_use_flag(arg):
24 return arg.startswith('-u') or arg.startswith('--use')
25
26
27def main(regrtest_args):
28 args = [sys.executable,
Victor Stinner3e56c232016-09-21 17:12:50 +020029 '-u', # Unbuffered stdout and stderr
Nadeem Vawda3c01d162011-08-01 23:48:26 +020030 '-W', 'default', # Warnings set to 'default'
31 '-bb', # Warnings about bytes/bytearray
32 '-E', # Ignore environment variables
33 ]
34 # Allow user-specified interpreter options to override our defaults.
35 args.extend(test.support.args_from_interpreter_flags())
Serhiy Storchaka20f87282014-02-24 13:57:00 +020036
Serhiy Storchaka20f87282014-02-24 13:57:00 +020037 # Workaround for issue #20361
38 args.extend(['-W', 'error::BytesWarning'])
39
Nadeem Vawda3c01d162011-08-01 23:48:26 +020040 args.extend(['-m', 'test', # Run the test suite
41 '-r', # Randomize test order
42 '-w', # Re-run failed tests in verbose mode
43 ])
Antoine Pitrou7f0a6dd2011-08-16 20:02:26 +020044 if sys.platform == 'win32':
45 args.append('-n') # Silence alerts under Windows
Antoine Pitrouebdcd852012-05-18 18:33:07 +020046 if threading and not any(is_multiprocess_flag(arg) for arg in regrtest_args):
Nadeem Vawda3c01d162011-08-01 23:48:26 +020047 args.extend(['-j', '0']) # Use all CPU cores
48 if not any(is_resource_use_flag(arg) for arg in regrtest_args):
Antoine Pitrou87ae0a22011-10-01 16:41:48 +020049 args.extend(['-u', 'all,-largefile,-audio,-gui'])
Nadeem Vawda3c01d162011-08-01 23:48:26 +020050 args.extend(regrtest_args)
51 print(' '.join(args))
Zachary Waree12fa652014-07-07 13:39:59 -050052 if sys.platform == 'win32':
53 from subprocess import call
Zachary Ware69d2d012014-07-07 15:07:46 -050054 sys.exit(call(args))
Zachary Waree12fa652014-07-07 13:39:59 -050055 else:
56 os.execv(sys.executable, args)
Nadeem Vawda3c01d162011-08-01 23:48:26 +020057
58
59if __name__ == '__main__':
60 main(sys.argv[1:])