regrtest.py revision 4698d9928ef1547e86a3f692e0c8d77e3f5e869c
1152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum#! /usr/bin/env python 2152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 35f2e0e5ccb988cdf65137034b33ee57198cc23b9Martin v. Löwis"""Regression test. 4152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 5152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumThis will find all modules whose name is "test_*" in the test 6152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdirectory, and run them. Various command line options provide 7152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumadditional facilities. 8152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 9152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumCommand line options: 10152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 1161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-v: verbose -- run tests in verbose mode with output to stdout 1204824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis-w: verbose2 -- re-run failed tests in verbose mode 1361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-q: quiet -- don't print anything except if a test fails 1461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-x: exclude -- arguments are tests to *exclude* 1561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-s: single -- run only a single test (see below) 1636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin-S: slow -- print the slowest 10 tests 1761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-r: random -- randomize test execution order 1861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-f: fromfile -- read names of tests to run from a file (see below) 1961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-l: findleaks -- if GC is available detect tests that leak memory 2061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-u: use -- specify which special resource intensive tests to run 2161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-h: help -- print this text and exit 2261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-t: threshold -- call gc.set_threshold(N) 2361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-T: coverage -- turn on code coverage using the trace module 24aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-D: coverdir -- Directory where coverage files are put 25aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-N: nocoverdir -- Put coverage files alongside modules 2661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-L: runleaks -- run the leaks(1) command just before exit 2761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-R: huntrleaks -- search for reference leaks (needs debug build, v. slow) 28abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters-M: memlimit -- run very large memory-consuming tests 294698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou-j: multiprocess -- run several processes at once 30152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 31152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf non-option arguments are present, they are names for tests to run, 32152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumunless -x is given, in which case they are names for tests not to run. 33152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf no test names are given, all tests are run. 34f58ed2596706b97c16174a839c1ed6f6b1f87fa6Guido van Rossum 35a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winter-r randomizes test execution order. You can use --randseed=int to provide a 36a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winterint seed value for the randomizer; this is useful for reproducing troublesome 37a199f0198600996c6a9de3a3d914f0bc2101d244Collin Wintertest orders. 38a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winter 393b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw-T turns on code coverage tracing with the trace module. 403b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw 41aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-D specifies the directory where coverage files are put. 42aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald 43aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-N Put coverage files alongside modules. 44aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald 459e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-s means to run only a single test and exit. This is useful when 469e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumdoing memory analysis on the Python interpreter (which tend to consume 479e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumtoo many resources to run the full regression test non-stop). The 489e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile /tmp/pynexttest is read to find the next test to run. If this 499e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile is missing, the first test_*.py file in testdir or on the command 509e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumline is used. (actually tempfile.gettempdir() is used instead of 519e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum/tmp). 52e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 539e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-f reads the names of tests from the file given as f's argument, one 549e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumor more test names per line. Whitespace is ignored. Blank lines and 559e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumlines beginning with '#' are ignored. This is especially useful for 569e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumwhittling down failures involving interactions among tests. 57c5000dfc4098f8547461e790a91536a923124261Tim Peters 580179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro-L causes the leaks(1) command to be run just before exit if it exists. 590179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaroleaks(1) is available on Mac OS X and presumably on some other 600179a18034b2316a70655d0f05bfbb20a0881f17Skip MontanaroFreeBSD-derived systems. 610179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro 6261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-R runs each test several times and examines sys.gettotalrefcount() to 6361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonsee if the test appears to be leaking references. The argument should 6461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonbe of the form stab:run:fname where 'stab' is the number of times the 6561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsontest is run to let gettotalrefcount settle down, 'run' is the number 6661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonof times further it is run and 'fname' is the name of the file the 6761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonreports are written to. These parameters all have defaults (5, 4 and 6861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson"reflog.txt" respectively), so the minimal invocation is '-R ::'. 6961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson 70abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters-M runs tests that require an exorbitant amount of memory. These tests 71abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstypically try to ascertain containers keep working when containing more than 7297ff04789de3e37af585648de70260a54a29bd47Armin Rigo2 billion objects, which only works on 64-bit systems. There are also some 7397ff04789de3e37af585648de70260a54a29bd47Armin Rigotests that try to exhaust the address space of the process, which only makes 7497ff04789de3e37af585648de70260a54a29bd47Armin Rigosense on 32-bit systems with at least 2Gb of memory. The passed-in memlimit, 75abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterswhich is a string in the form of '2.5Gb', determines howmuch memory the 76abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstests will limit themselves to (but they may go slightly over.) The number 77abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersshouldn't be more memory than the machine has (including swap memory). You 78abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersshould also keep in mind that swap memory is generally much, much slower 79abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersthan RAM, and setting memlimit to all available RAM or higher will heavily 80abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstax the machine. On the other hand, it is no use running these tests with a 81abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterslimit of less than 2.5Gb, and many require more than 20Gb. Tests that expect 82abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersto use more than memlimit memory will be skipped. The big-memory tests 83abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersgenerally run very, very long. 84abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters 859e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-u is used to specify which special resource intensive tests to run, 869e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumsuch as those requiring large file support or network connectivity. 879e9d4f8ed8d467d0558251f43c5decc754712d53Guido van RossumThe argument is a comma-separated list of words indicating the 889e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumresources to test. Currently only the following are defined: 8908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 903a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake all - Enable all special resources. 913a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 92315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum audio - Tests that use the audio device. (There are known 93315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum cases of broken audio drivers that can crash Python or 94315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum even the Linux kernel.) 95315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum 962158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling curses - Tests that use curses and will modify the terminal's 972158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling state and output modes. 981633a2e3452b40d0e9bb1f15ab16cd6b90f15a19Tim Peters 9987988b675323ebca3b15c52bad0dbc6b5422c2b0Benjamin Peterson lib2to3 - Run the tests for 2to3 (They take a while.) 10087988b675323ebca3b15c52bad0dbc6b5422c2b0Benjamin Peterson 1019e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum largefile - It is okay to run some test that may create huge 1029e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum files. These tests can take a long time and may 1039e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum consume >2GB of disk space temporarily. 10408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 1059e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum network - It is okay to run tests that use external network 1069e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum resource, e.g. testing SSL support for sockets. 1071c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis 1081c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis bsddb - It is okay to run the bsddb testsuite, which takes 1091c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis a long time to complete. 1104dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake 1117c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger decimal - Test the decimal module against a large suite that 1127c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger verifies compliance with standards. 1137c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger 1144336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton compiler - Test the compiler package by compiling all the source 1154336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton in the standard library and test suite. This takes 11668c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger a long time. Enabling this resource also allows 11768c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger test_tokenize to verify round-trip lexing on every 11868c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger file in the test library. 1194336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton 120eba28bea9b8ef7df010e65c630b8c0f7009c6005Tim Peters subprocess Run all tests for the subprocess module. 121f7f1bb7ff5039626c856efafb68a4d338ab96642Peter Astrand 122aaa2f1dea706daf2a5f431d97a3e3120dba652d2Hye-Shik Chang urlfetch - It is okay to download files required on testing. 123aaa2f1dea706daf2a5f431d97a3e3120dba652d2Hye-Shik Chang 124b1a98de25ecd3e11fc3093de31fe844233dcd389Guilherme Polo gui - Run tests that require a running GUI. 125b1a98de25ecd3e11fc3093de31fe844233dcd389Guilherme Polo 126f8089c7789d61979fd195e67186a77039534cc87Collin Winter xpickle - Test pickle and cPickle against Python 2.4, 2.5 and 2.6 to 127f8089c7789d61979fd195e67186a77039534cc87Collin Winter test backwards compatibility. These tests take a long time 128f8089c7789d61979fd195e67186a77039534cc87Collin Winter to run. 129f8089c7789d61979fd195e67186a77039534cc87Collin Winter 1304dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred DrakeTo enable all resources except one, use '-uall,-<resource>'. For 1314dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeexample, to run all the tests except for the bsddb tests, give the 1324dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeoption '-uall,-bsddb'. 133152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum""" 134152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 13536dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport cStringIO 136152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport getopt 1374698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrouimport json 13836dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport os 139ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaroimport random 14094a9c09e109706af64ae8796882baab2af25be2fNeal Norwitzimport re 14136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport sys 14236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport time 1433b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport traceback 14436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport warnings 145888a39b54c4f47ee25d53b157e2c50402627cd0bBenjamin Petersonimport unittest 146dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum 147dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# I see no other way to suppress these warnings; 148dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# putting them in test_grammar.py has no effect: 14988b1defb6f770c4f74788e8296b88fc31c3936ceGuido van Rossumwarnings.filterwarnings("ignore", "hex/oct constants", FutureWarning, 150dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum ".*test.test_grammar$") 151c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossumif sys.maxint > 0x7fffffff: 152c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum # Also suppress them in <string>, because for 64-bit platforms, 153c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum # that's where test_grammar.py hides them. 154c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning, 155c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum "<string>") 156152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 1579df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters# Ignore ImportWarnings that only occur in the source tree, 1589df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters# (because of modules with the same name as source-directories in Modules/) 159076ba2129bb08f56c3af9397748ae1df41daba06Thomas Woutersfor mod in ("ctypes", "gzip", "zipfile", "tarfile", "encodings.zlib_codec", 160076ba2129bb08f56c3af9397748ae1df41daba06Thomas Wouters "test.test_zipimport", "test.test_zlib", "test.test_zipfile", 161076ba2129bb08f56c3af9397748ae1df41daba06Thomas Wouters "test.test_codecs", "test.string_tests"): 1629df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters warnings.filterwarnings(module=".*%s$" % (mod,), 1639df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters action="ignore", category=ImportWarning) 1649df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters 165bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# MacOSX (a.k.a. Darwin) has a default stack size that is too small 166bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# for deeply recursive regular expressions. We see this as crashes in 167bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# the Python test suite when running test_re.py and test_sre.py. The 168bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# fix is to set the stack limit to 2048. 169bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# This approach may also be useful for other Unixy platforms that 170bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# suffer from small default stack limits. 171bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossumif sys.platform == 'darwin': 172bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum try: 173bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum import resource 174bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum except ImportError: 175bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum pass 176bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum else: 177bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum soft, hard = resource.getrlimit(resource.RLIMIT_STACK) 178bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum newsoft = min(hard, max(soft, 1024*2048)) 179bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard)) 180bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum 18104f357cffef6d764f2f0ff2671dabde75ec250d1Barry Warsawfrom test import test_support 1823a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 183e2886fd3ca357c4cf7c1584375d9b9bb55d476b7Benjamin PetersonRESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb', 184f8089c7789d61979fd195e67186a77039534cc87Collin Winter 'decimal', 'compiler', 'subprocess', 'urlfetch', 'gui', 185f8089c7789d61979fd195e67186a77039534cc87Collin Winter 'xpickle') 1863a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 1873a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 18808fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''): 18908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw print __doc__ 19008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if msg: print msg 19108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(code) 19208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 19308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 194ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arcdef main(tests=None, testdir=None, verbose=0, quiet=False, 1953b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw exclude=False, single=False, randomize=False, fromfile=None, 196aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald findleaks=False, use_resources=None, trace=False, coverdir='coverage', 197a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winter runleaks=False, huntrleaks=False, verbose2=False, print_slow=False, 1984698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou random_seed=None, use_mp=None): 1996fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Execute a test suite. 2006fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 2017e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters This also parses command-line options and modifies its behavior 202004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake accordingly. 2036fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 2046fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum tests -- a list of strings containing test names (optional) 2056fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- the directory in which to look for tests (optional) 2066fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 2076fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum Users other than the Python test suite will certainly want to 2086fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum specify testdir; if it's omitted, the directory containing the 209004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake Python test suite is searched for. 2106fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 2116fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum If the tests argument is omitted, the tests listed on the 2126fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum command-line will be used. If that's empty, too, then all *.py 2136fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum files beginning with test_ will be used. 214ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro 215ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc The other default arguments (verbose, quiet, exclude, 216a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winter single, randomize, findleaks, use_resources, trace, coverdir, print_slow and 217a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winter random_seed) allow programmers calling main() directly to set the 21836dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin values that would normally be set by flags on the command line. 2196fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 220004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake 2218dee809410e2d433bb0be5d8a1699736b90db0b5Tim Peters test_support.record_original_stdout(sys.stdout) 222152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 2234698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsSrf:lu:t:TD:NLR:wM:j:', 224a5573b31532f59a63d9ff24e415592f60f974da4Brett Cannon ['help', 'verbose', 'quiet', 'exclude', 22536dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin 'single', 'slow', 'random', 'fromfile', 2263b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw 'findleaks', 'use=', 'threshold=', 'trace', 227aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald 'coverdir=', 'nocoverdir', 'runleaks', 228abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters 'huntrleaks=', 'verbose2', 'memlimit=', 2294698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou 'randseed=', 'multiprocess=', 'slaveargs=', 2303b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw ]) 231152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except getopt.error, msg: 23208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, msg) 23308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 23408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw # Defaults 235a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winter if random_seed is None: 236a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winter random_seed = random.randrange(10000000) 23708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if use_resources is None: 23808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources = [] 239152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for o, a in opts: 24008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if o in ('-h', '--help'): 24108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(0) 24208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-v', '--verbose'): 24308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose += 1 24404824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis elif o in ('-w', '--verbose2'): 24504824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis verbose2 = True 24608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-q', '--quiet'): 2473b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw quiet = True; 24808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose = 0 24908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-x', '--exclude'): 2503b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw exclude = True 25108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-s', '--single'): 2523b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw single = True 25336dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin elif o in ('-S', '--slow'): 25436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin print_slow = True 25508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-r', '--randomize'): 2563b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw randomize = True 257a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winter elif o == '--randseed': 258a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winter random_seed = int(a) 259c5000dfc4098f8547461e790a91536a923124261Tim Peters elif o in ('-f', '--fromfile'): 260c5000dfc4098f8547461e790a91536a923124261Tim Peters fromfile = a 26108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-l', '--findleaks'): 2623b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw findleaks = True 2630179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro elif o in ('-L', '--runleaks'): 2640179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro runleaks = True 2659e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum elif o in ('-t', '--threshold'): 2669e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum import gc 2679e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum gc.set_threshold(int(a)) 2683b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw elif o in ('-T', '--coverage'): 2693b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw trace = True 270aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald elif o in ('-D', '--coverdir'): 271aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald coverdir = os.path.join(os.getcwd(), a) 272aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald elif o in ('-N', '--nocoverdir'): 273aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald coverdir = None 27461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson elif o in ('-R', '--huntrleaks'): 27561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks = a.split(':') 27661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks) != 3: 27761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson print a, huntrleaks 27861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson usage(2, '-R takes three colon-separated arguments') 27961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks[0]) == 0: 28061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[0] = 5 28161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson else: 28261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[0] = int(huntrleaks[0]) 28361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks[1]) == 0: 28461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[1] = 4 28561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson else: 28661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[1] = int(huntrleaks[1]) 28761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks[2]) == 0: 28861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[2] = "reflog.txt" 289abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters elif o in ('-M', '--memlimit'): 290abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters test_support.set_memlimit(a) 29108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-u', '--use'): 292fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum u = [x.lower() for x in a.split(',')] 293fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum for r in u: 2943a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r == 'all': 2954dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake use_resources[:] = RESOURCE_NAMES 2964dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake continue 2974dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake remove = False 2984dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if r[0] == '-': 2994dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake remove = True 3004dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake r = r[1:] 3013a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r not in RESOURCE_NAMES: 3023a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake usage(1, 'Invalid -u/--use option: ' + a) 3034dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if remove: 3044dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if r in use_resources: 3054dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake use_resources.remove(r) 3064dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake elif r not in use_resources: 307e41abab33b0b467acd6bdc7d73ce4b5cef4fd5bfAndrew MacIntyre use_resources.append(r) 3084698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou elif o in ('-j', '--multiprocess'): 3094698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou use_mp = int(a) 3104698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou elif o == '--slaveargs': 3114698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou args, kwargs = json.loads(a) 3124698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou try: 3134698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou result = runtest(*args, **kwargs) 3144698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou except BaseException, e: 3154698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou result = -3, e.__class__.__name__ 3164698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou print # Force a newline (just in case) 3174698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou print json.dumps(result) 3184698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou sys.exit(0) 319c5000dfc4098f8547461e790a91536a923124261Tim Peters if single and fromfile: 320c5000dfc4098f8547461e790a91536a923124261Tim Peters usage(2, "-s and -f don't go together!") 3214698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if use_mp and trace: 3224698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou usage(2, "-T and -j don't go together!") 3234698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if use_mp and findleaks: 3244698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou usage(2, "-l and -j don't go together!") 32508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 326152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum good = [] 327152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum bad = [] 328152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum skipped = [] 3299a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake resource_denieds = [] 330e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 331d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 332a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw try: 333a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw import gc 334a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw except ImportError: 3358a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print 'No GC available, disabling findleaks.' 3363b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw findleaks = False 337a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw else: 3388a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # Uncomment the line below to report garbage that is not 3398a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # freeable by reference counting alone. By default only 3408a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # garbage that is not collectable by the GC is reported. 3418a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer #gc.set_debug(gc.DEBUG_SAVEALL) 342d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage = [] 343a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 344e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 345e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw from tempfile import gettempdir 346e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw filename = os.path.join(gettempdir(), 'pynexttest') 347e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw try: 348e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'r') 349fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond next = fp.read().strip() 350e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = [next] 351e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 352e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw except IOError: 353e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw pass 354c5000dfc4098f8547461e790a91536a923124261Tim Peters 355c5000dfc4098f8547461e790a91536a923124261Tim Peters if fromfile: 356c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = [] 357c5000dfc4098f8547461e790a91536a923124261Tim Peters fp = open(fromfile) 358c5000dfc4098f8547461e790a91536a923124261Tim Peters for line in fp: 359c5000dfc4098f8547461e790a91536a923124261Tim Peters guts = line.split() # assuming no test has whitespace in its name 360c5000dfc4098f8547461e790a91536a923124261Tim Peters if guts and not guts[0].startswith('#'): 361c5000dfc4098f8547461e790a91536a923124261Tim Peters tests.extend(guts) 362c5000dfc4098f8547461e790a91536a923124261Tim Peters fp.close() 363c5000dfc4098f8547461e790a91536a923124261Tim Peters 364c5000dfc4098f8547461e790a91536a923124261Tim Peters # Strip .py extensions. 365c5000dfc4098f8547461e790a91536a923124261Tim Peters if args: 366c5000dfc4098f8547461e790a91536a923124261Tim Peters args = map(removepy, args) 367c5000dfc4098f8547461e790a91536a923124261Tim Peters if tests: 368c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = map(removepy, tests) 369c5000dfc4098f8547461e790a91536a923124261Tim Peters 3706c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests = STDTESTS[:] 3716c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests = NOTTESTS[:] 372152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if exclude: 3736c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum for arg in args: 3746c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum if arg in stdtests: 3756c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests.remove(arg) 3766c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests[:0] = args 37741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum args = [] 378747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum tests = tests or args or findtests(testdir, stdtests, nottests) 379e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 380e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = tests[:1] 381ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro if randomize: 382a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winter random.seed(random_seed) 383a199f0198600996c6a9de3a3d914f0bc2101d244Collin Winter print "Using random seed", random_seed 384ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro random.shuffle(tests) 3853b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if trace: 3863b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw import trace 3873b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix], 3883b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw trace=False, count=True) 38936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_times = [] 39008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_support.use_resources = use_resources 3915796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum save_modules = sys.modules.keys() 3924698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou 3934698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou def accumulate_result(test, result): 3944698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou ok, test_time = result 3954698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou test_times.append((test_time, test)) 3964698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if ok > 0: 3974698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou good.append(test) 3984698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou elif ok == 0: 3994698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou bad.append(test) 40041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum else: 4014698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou skipped.append(test) 4024698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if ok == -2: 4034698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou resource_denieds.append(test) 4044698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou 4054698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if use_mp: 4064698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou from threading import Thread 4074698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou from Queue import Queue, Empty 4084698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou from subprocess import Popen, PIPE, STDOUT 4094698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou from collections import deque 4104698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou debug_output_pat = re.compile(r"\[\d+ refs\]$") 4114698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou pending = deque() 4124698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou output = Queue() 4134698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou for test in tests: 4144698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou args_tuple = ( 4154698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou (test, verbose, quiet, testdir), 4164698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou dict(huntrleaks=huntrleaks, use_resources=use_resources) 4174698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou ) 4184698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou pending.append((test, args_tuple)) 4194698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou def work(): 4204698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou # A worker thread. 42114ca327f998511da5e89f819204c54fa582dd696Neal Norwitz try: 4224698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou while True: 4234698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou try: 4244698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou test, args_tuple = pending.popleft() 4254698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou except IndexError: 4264698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou output.put((None, None, None)) 4274698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou return 4284698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if not quiet: 4294698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou print test 4304698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou sys.stdout.flush() 4314698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou popen = Popen([sys.executable, '-m', 'test.regrtest', 4324698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou '--slaveargs', json.dumps(args_tuple)], 4334698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou stdout=PIPE, stderr=STDOUT, 4344698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou universal_newlines=True, close_fds=True) 4354698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou out = popen.communicate()[0].strip() 4364698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou out = debug_output_pat.sub("", out) 4374698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou out, _, result = out.strip().rpartition("\n") 4384698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou result = json.loads(result) 4394698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou output.put((test, out.strip(), result)) 4404698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou except BaseException: 4414698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou output.put((None, None, None)) 44214ca327f998511da5e89f819204c54fa582dd696Neal Norwitz raise 4434698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou workers = [Thread(target=work) for i in range(use_mp)] 4444698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou for worker in workers: 4454698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou worker.start() 4464698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou finished = 0 4474698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou while finished < use_mp: 4484698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou test, out, result = output.get() 4494698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if test is None: 4504698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou finished += 1 4514698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou continue 4524698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if out: 4534698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou print out 4544698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if result[0] == -3: 4554698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou assert result[1] == 'KeyboardInterrupt' 4564698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou pending.clear() 4574698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou raise KeyboardInterrupt # What else? 4584698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou accumulate_result(test, result) 4594698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou for worker in workers: 4604698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou worker.join() 4614698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou else: 4624698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou for test in tests: 4634698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if not quiet: 4644698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou print test 4654698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou sys.stdout.flush() 4664698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if trace: 4674698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou # If we're tracing code coverage, then we don't exit with status 4684698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou # if on a false return value from main. 4694698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou tracer.runctx('runtest(test, verbose, quiet, testdir)', 4704698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou globals=globals(), locals=vars()) 4713b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw else: 4724698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou try: 4734698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou result = runtest(test, verbose, quiet, 4744698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou testdir, huntrleaks) 4754698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou accumulate_result(test, result) 4764698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou except KeyboardInterrupt: 4774698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou # print a newline separate from the ^C 4784698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou print 4794698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou break 4804698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou except: 4814698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou raise 4824698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if findleaks: 4834698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou gc.collect() 4844698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if gc.garbage: 4854698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou print "Warning: test created", len(gc.garbage), 4864698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou print "uncollectable object(s)." 4874698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou # move the uncollectable objects somewhere so we don't see 4884698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou # them again 4894698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou found_garbage.extend(gc.garbage) 4904698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou del gc.garbage[:] 4914698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou # Unload the newly imported modules (best effort finalization) 4924698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou for module in sys.modules.keys(): 4934698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if module not in save_modules and module.startswith("test."): 4944698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou test_support.unload(module) 4957a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton 4967a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton # The lists won't be sorted if running with -r 4977a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton good.sort() 4987a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton bad.sort() 4997a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton skipped.sort() 500e0c446bb4ad67294f42d4cb53b4ff28413bd8ddeTim Peters 501152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if good and not quiet: 50241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not bad and not skipped and len(good) > 1: 50341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "All", 50441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print count(len(good), "test"), "OK." 50536dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin if print_slow: 50636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_times.sort(reverse=True) 50736dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin print "10 slowest tests:" 50836dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin for time, test in test_times[:10]: 50936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin print "%s: %.1fs" % (test, time) 510152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if bad: 511a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(bad), "test"), "failed:" 512a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(bad) 513152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if skipped and not quiet: 514a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(skipped), "test"), "skipped:" 515a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(skipped) 516e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 517b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters e = _ExpectedSkips() 518a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters plat = sys.platform 519b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if e.isvalid(): 520a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger surprise = set(skipped) - e.getexpected() - set(resource_denieds) 521b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if surprise: 522b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print count(len(surprise), "skip"), \ 523a45da92484ceececf1cf32b4dfb16004945b001eTim Peters "unexpected on", plat + ":" 524a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(surprise) 525b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 526b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Those skips are all expected on", plat + "." 527b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 528b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Ask someone to teach regrtest.py about which tests are" 529b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "expected to get skipped on", plat + "." 530b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 53104824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis if verbose2 and bad: 53204824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis print "Re-running failed tests in verbose mode" 53304824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis for test in bad: 534922dd7d49da75b07e27f917db0166f67bdbef3d3Tim Peters print "Re-running test %r in verbose mode" % test 535922dd7d49da75b07e27f917db0166f67bdbef3d3Tim Peters sys.stdout.flush() 53604824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis try: 5375fe5cf6df20607033096c05d68cef7222a35697cNeal Norwitz test_support.verbose = True 5384698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou ok = runtest(test, True, quiet, testdir, 53904824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis huntrleaks) 54004824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis except KeyboardInterrupt: 54104824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis # print a newline separate from the ^C 54204824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis print 54304824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis break 54404824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis except: 54504824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis raise 54604824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis 547e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 548e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw alltests = findtests(testdir, stdtests, nottests) 549e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw for i in range(len(alltests)): 550e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if tests[0] == alltests[i]: 551e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if i == len(alltests) - 1: 552e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 553e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 554e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'w') 555e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.write(alltests[i+1] + '\n') 556e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 557e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw break 558e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 559e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 560e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 5613b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if trace: 5623b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw r = tracer.results() 5633b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw r.write_results(show_missing=True, summary=True, coverdir=coverdir) 5643b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw 5650179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro if runleaks: 5660179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro os.system("leaks %d" % os.getpid()) 5670179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro 5685943b4ac1067e5011b66697396d5df93b5ef9af0Tim Peters sys.exit(len(bad) > 0) 56908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 570152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 5716fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [ 572152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_grammar', 573152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_opcodes', 574f567ca3e1ae851ea6e7418da3df47e034841a08dCollin Winter 'test_dict', 575152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_builtin', 576152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_exceptions', 577152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_types', 5785545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter 'test_unittest', 5795545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter 'test_doctest', 5805545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter 'test_doctest2', 581152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 582152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 5836fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [ 584152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_support', 58562e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future1', 58662e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future2', 587152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 588152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 5896fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossumdef findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): 590152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum """Return a list of all applicable test modules.""" 5916fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 592152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum names = os.listdir(testdir) 593152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests = [] 594152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for name in names: 595e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum if name[:5] == "test_" and name[-3:] == os.extsep+"py": 59641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum modname = name[:-3] 59741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if modname not in stdtests and modname not in nottests: 59841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum tests.append(modname) 599152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests.sort() 600152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return stdtests + tests 601152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 6024698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitroudef runtest(test, verbose, quiet, 6034698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou testdir=None, huntrleaks=False, use_resources=None): 6046fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Run a single test. 605e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 6066fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum test -- the name of the test 6076fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum verbose -- if true, print more messages 608f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick quiet -- if true, don't print 'skipped' messages (probably redundant) 60936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_times -- a list of (time, test_name) pairs 6106fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- test directory 611e55848695347c67effeb08aedcf2ce3d256524cdTim Peters huntrleaks -- run multiple times to test for leaks; requires a debug 612e55848695347c67effeb08aedcf2ce3d256524cdTim Peters build; a triple corresponding to -R's three arguments 613e55848695347c67effeb08aedcf2ce3d256524cdTim Peters Return: 614e55848695347c67effeb08aedcf2ce3d256524cdTim Peters -2 test skipped because resource denied 615e55848695347c67effeb08aedcf2ce3d256524cdTim Peters -1 test skipped for some other reason 616e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 0 test failed 617e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 1 test passed 6186fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 61906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 6204698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou test_support.verbose = verbose # Tell tests to be moderately quiet 6214698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if use_resources is not None: 6224698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou test_support.use_resources = use_resources 623e55848695347c67effeb08aedcf2ce3d256524cdTim Peters try: 6244698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou return runtest_inner(test, verbose, quiet, 62536dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin testdir, huntrleaks) 626e55848695347c67effeb08aedcf2ce3d256524cdTim Peters finally: 627e55848695347c67effeb08aedcf2ce3d256524cdTim Peters cleanup_test_droppings(test, verbose) 628e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 6294698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitroudef runtest_inner(test, verbose, quiet, 63036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin testdir=None, huntrleaks=False): 631152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum test_support.unload(test) 6323b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if not testdir: 6333b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw testdir = findtestdir() 6349390cc15da5cd6920bd41bb4cd146d5d0601345fTim Peters if verbose: 635ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc capture_stdout = None 6360fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 637ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc capture_stdout = cStringIO.StringIO() 63806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 6394698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou test_time = 0.0 6400f489743ef18ab2da39695d945c79b7a24df8554Collin Winter refleak = False # True if the test leaked references. 641152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 642342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters save_stdout = sys.stdout 64341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum try: 644ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc if capture_stdout: 645ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc sys.stdout = capture_stdout 646408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if test.startswith('test.'): 647408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw abstest = test 648408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw else: 649408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # Always import it from the test package 650408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw abstest = 'test.' + test 65136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin start_time = time.time() 652408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw the_package = __import__(abstest, globals(), locals(), []) 653408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw the_module = getattr(the_package, test) 654980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl # Old tests run to completion simply as a side-effect of 655980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl # being imported. For tests based on unittest or doctest, 656980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl # explicitly invoke their test_main() function (if it exists). 657d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test = getattr(the_module, "test_main", None) 658d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters if indirect_test is not None: 659d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test() 66061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if huntrleaks: 6610f489743ef18ab2da39695d945c79b7a24df8554Collin Winter refleak = dash_R(the_module, test, indirect_test, huntrleaks) 66236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_time = time.time() - start_time 66341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum finally: 664342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters sys.stdout = save_stdout 6659a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake except test_support.ResourceDenied, msg: 6669a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake if not quiet: 6679a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake print test, "skipped --", msg 6689a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake sys.stdout.flush() 6694698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou return -2, test_time 670612f1d5f48d609b4a1b0afd4d64499ff4e5f629dR. David Murray except unittest.SkipTest, msg: 671f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick if not quiet: 672de4742b87f7775fc3d9fa76cd640e7cdd5ef69a2Fred Drake print test, "skipped --", msg 6733cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 6744698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou return -1, test_time 675fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake except KeyboardInterrupt: 676fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake raise 677152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except test_support.TestFailed, msg: 67841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "test", test, "failed --", msg 6793cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 6804698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou return 0, test_time 6819e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum except: 68241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum type, value = sys.exc_info()[:2] 68327c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake print "test", test, "crashed --", str(type) + ":", value 6843cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 68541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if verbose: 68641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum traceback.print_exc(file=sys.stdout) 6873cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 6884698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou return 0, test_time 689152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 6900f489743ef18ab2da39695d945c79b7a24df8554Collin Winter if refleak: 6914698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou return 0, test_time 692ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc # Except in verbose mode, tests should not print anything 693ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc if verbose or huntrleaks: 6944698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou return 1, test_time 695ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc output = capture_stdout.getvalue() 696ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc if not output: 6974698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou return 1, test_time 6980fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "test", test, "produced unexpected output:" 699ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc print "*" * 70 700ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc print output 701ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc print "*" * 70 7023cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 7034698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou return 0, test_time 7040fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum 705e55848695347c67effeb08aedcf2ce3d256524cdTim Petersdef cleanup_test_droppings(testname, verbose): 706e55848695347c67effeb08aedcf2ce3d256524cdTim Peters import shutil 707a9b4d4777a4018e7fcaa92b6e587992819501b5eBenjamin Peterson import stat 708e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 709e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # Try to clean up junk commonly left behind. While tests shouldn't leave 710e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # any files or directories behind, when a test fails that can be tedious 711e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # for it to arrange. The consequences can be especially nasty on Windows, 712e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # since if a test leaves a file open, it cannot be deleted by name (while 713e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # there's nothing we can do about that here either, we can display the 714e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # name of the offending test, which is a real help). 715e55848695347c67effeb08aedcf2ce3d256524cdTim Peters for name in (test_support.TESTFN, 716e55848695347c67effeb08aedcf2ce3d256524cdTim Peters "db_home", 717e55848695347c67effeb08aedcf2ce3d256524cdTim Peters ): 718e55848695347c67effeb08aedcf2ce3d256524cdTim Peters if not os.path.exists(name): 719e55848695347c67effeb08aedcf2ce3d256524cdTim Peters continue 720e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 721e55848695347c67effeb08aedcf2ce3d256524cdTim Peters if os.path.isdir(name): 722e55848695347c67effeb08aedcf2ce3d256524cdTim Peters kind, nuker = "directory", shutil.rmtree 723e55848695347c67effeb08aedcf2ce3d256524cdTim Peters elif os.path.isfile(name): 724e55848695347c67effeb08aedcf2ce3d256524cdTim Peters kind, nuker = "file", os.unlink 725e55848695347c67effeb08aedcf2ce3d256524cdTim Peters else: 726e55848695347c67effeb08aedcf2ce3d256524cdTim Peters raise SystemError("os.path says %r exists but is neither " 727e55848695347c67effeb08aedcf2ce3d256524cdTim Peters "directory nor file" % name) 728e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 729e55848695347c67effeb08aedcf2ce3d256524cdTim Peters if verbose: 730e55848695347c67effeb08aedcf2ce3d256524cdTim Peters print "%r left behind %s %r" % (testname, kind, name) 731e55848695347c67effeb08aedcf2ce3d256524cdTim Peters try: 732a9b4d4777a4018e7fcaa92b6e587992819501b5eBenjamin Peterson # if we have chmod, fix possible permissions problems 733a9b4d4777a4018e7fcaa92b6e587992819501b5eBenjamin Peterson # that might prevent cleanup 734a9b4d4777a4018e7fcaa92b6e587992819501b5eBenjamin Peterson if (hasattr(os, 'chmod')): 735a9b4d4777a4018e7fcaa92b6e587992819501b5eBenjamin Peterson os.chmod(name, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) 736e55848695347c67effeb08aedcf2ce3d256524cdTim Peters nuker(name) 737e55848695347c67effeb08aedcf2ce3d256524cdTim Peters except Exception, msg: 738e55848695347c67effeb08aedcf2ce3d256524cdTim Peters print >> sys.stderr, ("%r left behind %s %r and it couldn't be " 739e55848695347c67effeb08aedcf2ce3d256524cdTim Peters "removed: %s" % (testname, kind, name, msg)) 740e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 74106c5c008193164f04ebcc14ca5176080cf303c54Tim Petersdef dash_R(the_module, test, indirect_test, huntrleaks): 7420f489743ef18ab2da39695d945c79b7a24df8554Collin Winter """Run a test multiple times, looking for reference leaks. 7430f489743ef18ab2da39695d945c79b7a24df8554Collin Winter 7440f489743ef18ab2da39695d945c79b7a24df8554Collin Winter Returns: 7450f489743ef18ab2da39695d945c79b7a24df8554Collin Winter False if the test didn't leak references; True if we detected refleaks. 7460f489743ef18ab2da39695d945c79b7a24df8554Collin Winter """ 74706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # This code is hackish and inelegant, but it seems to do the job. 748dffbf5f5421cbeb20237280c0bd70f989269f844Georg Brandl import copy_reg, _abcoll, io 74906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 75006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if not hasattr(sys, 'gettotalrefcount'): 75106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters raise Exception("Tracking reference leaks requires a debug build " 75206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters "of Python") 75306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 75406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Save current values for dash_R_cleanup() to restore. 75506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters fs = warnings.filters[:] 756dffbf5f5421cbeb20237280c0bd70f989269f844Georg Brandl ps = copy_reg.dispatch_table.copy() 75706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters pic = sys.path_importer_cache.copy() 75864c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum abcs = {} 7594d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc modules = _abcoll, io 7604d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc for abc in [getattr(mod, a) for mod in modules for a in mod.__all__]: 7614d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc # XXX isinstance(abc, ABCMeta) leads to infinite recursion 7624d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc if not hasattr(abc, '_abc_registry'): 7636b29dd05c8fff4fc69ab4d68baef86fb7e91548cChristian Heimes continue 76464c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum for obj in abc.__subclasses__() + [abc]: 76564c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum abcs[obj] = obj._abc_registry.copy() 76664c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum 76706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if indirect_test: 76806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters def run_the_test(): 76906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters indirect_test() 77006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters else: 77106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters def run_the_test(): 77206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters reload(the_module) 77306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 77406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters deltas = [] 77506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters nwarmup, ntracked, fname = huntrleaks 77606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters repcount = nwarmup + ntracked 77706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters print >> sys.stderr, "beginning", repcount, "repetitions" 77806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters print >> sys.stderr, ("1234567890"*(repcount//10 + 1))[:repcount] 77964c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum dash_R_cleanup(fs, ps, pic, abcs) 78006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters for i in range(repcount): 78106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters rc = sys.gettotalrefcount() 78206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters run_the_test() 78306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters sys.stderr.write('.') 78464c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum dash_R_cleanup(fs, ps, pic, abcs) 78506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if i >= nwarmup: 78606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters deltas.append(sys.gettotalrefcount() - rc - 2) 78706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters print >> sys.stderr 78806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if any(deltas): 789d9841039dbd0e37746d46f6e46ce1d82b85a21b3Neal Norwitz msg = '%s leaked %s references, sum=%s' % (test, deltas, sum(deltas)) 790d9841039dbd0e37746d46f6e46ce1d82b85a21b3Neal Norwitz print >> sys.stderr, msg 7914698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou with open(fname, "a") as refrep: 7924698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou print >> refrep, msg 7934698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou refrep.flush() 7940f489743ef18ab2da39695d945c79b7a24df8554Collin Winter return True 7950f489743ef18ab2da39695d945c79b7a24df8554Collin Winter return False 79606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 79764c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossumdef dash_R_cleanup(fs, ps, pic, abcs): 798dffbf5f5421cbeb20237280c0bd70f989269f844Georg Brandl import gc, copy_reg 7990aa6e1b8fb8c3ae656518a7e319a5f697158e7bfBrett Cannon import _strptime, linecache 8000aa6e1b8fb8c3ae656518a7e319a5f697158e7bfBrett Cannon dircache = test_support.import_module('dircache', deprecated=True) 80106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters import urlparse, urllib, urllib2, mimetypes, doctest 8024d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc import struct, filecmp 80306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters from distutils.dir_util import _path_created 80406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 805607bff1ebe81e869697e228322da4c308e8753a5Amaury Forgeot d'Arc # Clear the warnings registry, so they can be displayed again 806607bff1ebe81e869697e228322da4c308e8753a5Amaury Forgeot d'Arc for mod in sys.modules.values(): 807607bff1ebe81e869697e228322da4c308e8753a5Amaury Forgeot d'Arc if hasattr(mod, '__warningregistry__'): 808607bff1ebe81e869697e228322da4c308e8753a5Amaury Forgeot d'Arc del mod.__warningregistry__ 809607bff1ebe81e869697e228322da4c308e8753a5Amaury Forgeot d'Arc 81006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Restore some original values. 81106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters warnings.filters[:] = fs 812dffbf5f5421cbeb20237280c0bd70f989269f844Georg Brandl copy_reg.dispatch_table.clear() 813dffbf5f5421cbeb20237280c0bd70f989269f844Georg Brandl copy_reg.dispatch_table.update(ps) 81406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters sys.path_importer_cache.clear() 81506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters sys.path_importer_cache.update(pic) 81606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 817908caac52e8e62baa1ee54e4e650e1cd3ac37907Christian Heimes # clear type cache 818422051a3675271e179995ad4a0f056ff94395d55Christian Heimes sys._clear_type_cache() 819908caac52e8e62baa1ee54e4e650e1cd3ac37907Christian Heimes 82064c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum # Clear ABC registries, restoring previously saved ABC registries. 8214d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc for abc, registry in abcs.items(): 8224d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc abc._abc_registry = registry.copy() 8234d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc abc._abc_cache.clear() 8244d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc abc._abc_negative_cache.clear() 82564c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum 82606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Clear assorted module caches. 82706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters _path_created.clear() 82806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters re.purge() 82906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters _strptime._regex_cache.clear() 83006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters urlparse.clear_cache() 83106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters urllib.urlcleanup() 83206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters urllib2.install_opener(None) 83306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters dircache.reset() 83406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters linecache.clearcache() 83506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters mimetypes._default_mime_types() 836c27d655c00ec08f44abea646ae06456cbcca84b6Tim Peters filecmp._cache.clear() 83776d19f68e4c824bbcba890d924f20a6133ee0326Christian Heimes struct._clearcache() 83806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters doctest.master = None 83906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 84006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Collect cyclic trash. 84106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters gc.collect() 84206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 843152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir(): 844152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if __name__ == '__main__': 84541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = sys.argv[0] 846152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 84741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = __file__ 848152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum testdir = os.path.dirname(file) or os.curdir 849152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return testdir 850152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 851c5000dfc4098f8547461e790a91536a923124261Tim Petersdef removepy(name): 852c5000dfc4098f8547461e790a91536a923124261Tim Peters if name.endswith(os.extsep + "py"): 853c5000dfc4098f8547461e790a91536a923124261Tim Peters name = name[:-3] 854c5000dfc4098f8547461e790a91536a923124261Tim Peters return name 855c5000dfc4098f8547461e790a91536a923124261Tim Peters 856152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word): 857152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if n == 1: 85841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %s" % (n, word) 859152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 86041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %ss" % (n, word) 861152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 862a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4): 8637c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters """Print the elements of iterable x to stdout. 864a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 865a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg width (default 70) is the maximum line length. 866a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg indent (default 4) is the number of blanks with which to 867a45da92484ceececf1cf32b4dfb16004945b001eTim Peters begin each line. 868a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """ 869a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 870ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters from textwrap import fill 871ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters blanks = ' ' * indent 872ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters print fill(' '.join(map(str, x)), width, 873ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters initial_indent=blanks, subsequent_indent=blanks) 874a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 875de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# Map sys.platform to a string containing the basenames of tests 876de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# expected to be skipped on that platform. 8772a182dbf3f2520ad753792068391775d102b13dfTim Peters# 8782a182dbf3f2520ad753792068391775d102b13dfTim Peters# Special cases: 8792a182dbf3f2520ad753792068391775d102b13dfTim Peters# test_pep277 8802a182dbf3f2520ad753792068391775d102b13dfTim Peters# The _ExpectedSkips constructor adds this to the set of expected 8812a182dbf3f2520ad753792068391775d102b13dfTim Peters# skips if not os.path.supports_unicode_filenames. 88255b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz# test_timeout 88355b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz# Controlled by test_timeout.skip_expected. Requires the network 88455b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz# resource and a socket module. 885b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl# 886b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl# Tests that are expected to be skipped everywhere except on one platform 887b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl# are also handled separately. 888de14a30d1d70073d36f207fe432e4adad5178399Tim Peters 889f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = { 890f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'win32': 891f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 892c7c516aa5140d255f18ffd2e8569434f0904f5dbTim Peters test__locale 893823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 89478e35f931128d017d5955841eac8c397ff32595cTim Peters test_bsddb3 895f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_commands 896f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_crypt 897d703057752d52cef6082a920879a0b62cdeffacaTim Peters test_curses 898f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dbm 899f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 900f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fcntl 901f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fork1 9020e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 903f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gdbm 904f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_grp 905fd8e6e599051de07cdb8e9abc9dbadf37c5fca0cTim Peters test_ioctl 906f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 9070e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 908f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_mhlib 909f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_openpty 910efc4b121694888e00072f5a079de5496afecb05aTim Peters test_ossaudiodev 91127d9ee32abac7a580b1ffc980522535bdd20f09bGeorg Brandl test_pipes 912f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_poll 913003eb3088283927e3155f2e2317d3d516edd9645Tim Peters test_posix 914f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pty 915f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pwd 9161e33ffa5c719ec611e182681c4a5f2ceb62a08f5Tim Peters test_resource 917f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_signal 918cea2cc4a21e7e2ba84f6dc11682821e502bd1f5fTim Peters test_threadsignals 919f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_timing 920b84de02f75c906fbcf519b4c89b9dbdd18837276Tim Peters test_wait3 921b84de02f75c906fbcf519b4c89b9dbdd18837276Tim Peters test_wait4 922f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 923f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'linux2': 924f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 925823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 926f66dacdb017c7481c3ba4f0743d5446146de33c8Guido van Rossum test_curses 927f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 928f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 9290e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 9304507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum test_ossaudiodev 931f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 93249a806edbb298f2a5be3598bd80c21392cb6968dJack Jansen 'mac': 933aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """ 934679751455798fab6425fda749a19e783e58b210eJack Jansen test_atexit 935aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_bsddb 936823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 937679751455798fab6425fda749a19e783e58b210eJack Jansen test_bsddb3 938679751455798fab6425fda749a19e783e58b210eJack Jansen test_bz2 939aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_commands 940aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_crypt 941b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen test_curses 942aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dbm 943aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dl 944aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fcntl 945aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fork1 9460e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 947aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_grp 948c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen test_ioctl 949aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_largefile 950aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_locale 9510e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 952aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_mmap 953aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_openpty 954679751455798fab6425fda749a19e783e58b210eJack Jansen test_ossaudiodev 955aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_poll 956679751455798fab6425fda749a19e783e58b210eJack Jansen test_popen 957aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_popen2 9585bb97e66dcbb110877ac17209c7d2641db6f6006Jack Jansen test_posix 959aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pty 960aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pwd 961679751455798fab6425fda749a19e783e58b210eJack Jansen test_resource 962aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_signal 963aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_sundry 964c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen test_tarfile 965aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_timing 966aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """, 96721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'unixware7': 9680ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """ 9690ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_bsddb 970823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 9710ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_dl 9720e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 9730ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_largefile 9740e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 9750ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_minidom 9760ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_openpty 9770ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_pyexpat 9780ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sax 9790ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sundry 9800ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """, 98121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'openunix8': 98221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """ 98321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_bsddb 984823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 98521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_dl 9860e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 98721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_largefile 9880e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 98921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_minidom 99021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_openpty 99121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_pyexpat 99221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sax 99321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sundry 99421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """, 99521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'sco_sv3': 99621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """ 99721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_asynchat 99821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_bsddb 999823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 100021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_dl 100121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_fork1 10020e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 100321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_gettext 100421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_largefile 100521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_locale 10060e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 100721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_minidom 100821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_openpty 100921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_pyexpat 101021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_queue 101121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sax 101221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sundry 101321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_thread 101421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threaded_import 101521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threadedtempfile 101621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threading 101721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """, 1018e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum 'riscos': 1019e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """ 1020e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_asynchat 1021a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis test_atexit 1022e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_bsddb 1023823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 1024a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis test_bsddb3 1025e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_commands 1026e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_crypt 1027e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dbm 1028e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dl 1029e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fcntl 1030e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fork1 10310e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 1032e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_gdbm 1033e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_grp 1034e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_largefile 1035e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_locale 10360e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 1037e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_mmap 1038e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_openpty 1039e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_poll 1040e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_popen2 1041e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pty 1042e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pwd 1043e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_strop 1044e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_sundry 1045e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_thread 1046e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threaded_import 1047e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threadedtempfile 1048e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threading 1049e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_timing 1050e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """, 10518a97f4a380a7a356730e48406f8269c3efe5e6ebJack Jansen 'darwin': 1052398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """ 10532bfb94c871caeae622174485264f407d9df354b9Brett Cannon test__locale 1054acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_bsddb 10559d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum test_bsddb3 1056398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_curses 10570e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 1058398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_gdbm 1059398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_largefile 1060acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_locale 10610e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 1062398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_minidom 1063acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_ossaudiodev 1064398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_poll 1065398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """, 106611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum 'sunos5': 106711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum """ 106811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_bsddb 1069823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 107011c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_curses 107111c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_dbm 10720e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 10730e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 107411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gdbm 107511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gzip 107611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_openpty 107711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_zipfile 107811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_zlib 1079ed375e18d10d37bfea1769aa1fe69795df6cbc10Jeremy Hylton """, 1080b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro 'hp-ux11': 1081b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """ 1082b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_bsddb 1083823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 1084b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_curses 1085b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_dl 10860e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 1087b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gdbm 1088b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gzip 1089b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_largefile 1090b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_locale 10910e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 1092b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_minidom 1093b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_openpty 1094b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_pyexpat 1095b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_sax 1096b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zipfile 1097b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zlib 1098b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """, 1099f90ae20354ceb501f0ba0b6459df17f1a8005a47Martin v. Löwis 'atheos': 1100c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters """ 1101823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 1102c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_curses 1103c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_dl 1104c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_gdbm 11050e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 1106c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_largefile 1107c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_locale 11080e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 1109c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mhlib 1110c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mmap 1111c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_poll 1112c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_popen2 1113c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_resource 1114c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters """, 111525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler 'cygwin': 111625115940604e6051aa2fb16be88c6b8f64577251Jason Tishler """ 1117823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 1118b0f89e05ad9aaf229033bbc81be43c1f826e3930Tim Peters test_bsddb3 111925115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_curses 112025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_dbm 11210e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 1122c23f39ca9dc540ace879fcf9746254d94293b86fJason Tishler test_ioctl 11230e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 112425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_largefile 112525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_locale 11265c4ded2c3b59aa134b82ab17cdfe7ab633194ca6Jason Tishler test_ossaudiodev 112725115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_socketserver 112825115940604e6051aa2fb16be88c6b8f64577251Jason Tishler """, 1129fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre 'os2emx': 1130fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre """ 1131fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_audioop 1132823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 1133fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_bsddb3 1134fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_commands 1135fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_curses 1136fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_dl 11370e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 11380e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 1139fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_largefile 1140fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_mhlib 1141fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_mmap 1142fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_openpty 1143fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_ossaudiodev 1144fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_pty 1145fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_resource 1146fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_signal 1147fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre """, 1148944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum 'freebsd4': 1149944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum """ 1150944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_bsddb 1151944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_bsddb3 11520e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 1153f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang test_gdbm 1154944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_locale 1155944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_ossaudiodev 1156944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_pep277 1157f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang test_pty 1158944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_socketserver 1159f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang test_tcl 1160bbb7efd72b3360f0523087cff6868f8fa02fe754Guilherme Polo test_tk 11617a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_guionly 11627a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_textonly 1163944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_timeout 1164944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_urllibnet 116537040cdace1982772e5f35e4acfa13861d72065dJesse Noller test_multiprocessing 116656f88113b7272be8403f9b722c943e679e23d362Martin v. Löwis """, 11678ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum 'aix5': 11688ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum """ 11698ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bsddb 11708ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bsddb185 11718ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bsddb3 11728ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bz2 11738ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_dl 11740e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 11758ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_gdbm 11768ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_gzip 11770e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 11788ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_ossaudiodev 11798ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_tcl 1180bbb7efd72b3360f0523087cff6868f8fa02fe754Guilherme Polo test_tk 11817a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_guionly 11827a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_textonly 11838ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_zipimport 11848ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_zlib 11858ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum """, 11866da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis 'openbsd3': 11876da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis """ 11886da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_bsddb 11896da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_bsddb3 11906da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_ctypes 11916da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_dl 11920e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 11936da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_gdbm 11946da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_locale 11956da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_normalization 11966da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_ossaudiodev 11976da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_pep277 11986da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_tcl 1199bbb7efd72b3360f0523087cff6868f8fa02fe754Guilherme Polo test_tk 12007a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_guionly 12017a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_textonly 120237040cdace1982772e5f35e4acfa13861d72065dJesse Noller test_multiprocessing 12036da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis """, 12040870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl 'netbsd3': 12050870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl """ 12060870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_bsddb 12070870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_bsddb185 12080870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_bsddb3 12090870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_ctypes 12100870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_curses 12110870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_dl 12120e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 12130870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_gdbm 12140870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_locale 12150870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_ossaudiodev 12160870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_pep277 12170870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_tcl 1218bbb7efd72b3360f0523087cff6868f8fa02fe754Guilherme Polo test_tk 12197a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_guionly 12207a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_textonly 122137040cdace1982772e5f35e4acfa13861d72065dJesse Noller test_multiprocessing 12220870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl """, 1223f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum} 122432d0c1b458bbdda8d8895f5b5bedfb4644f839e7Martin v. Löwis_expectations['freebsd5'] = _expectations['freebsd4'] 1225f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang_expectations['freebsd6'] = _expectations['freebsd4'] 12264e422817eb1bc5a6a42365001ad45683ae07e559Hye-Shik Chang_expectations['freebsd7'] = _expectations['freebsd4'] 1227ea684743daa0c198ab327d07832eca48a9578c68Hye-Shik Chang_expectations['freebsd8'] = _expectations['freebsd4'] 1228f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 1229b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips: 1230b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self): 12312a182dbf3f2520ad753792068391775d102b13dfTim Peters import os.path 123255b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz from test import test_timeout 12331b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 12347c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters self.valid = False 1235de14a30d1d70073d36f207fe432e4adad5178399Tim Peters if sys.platform in _expectations: 1236f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum s = _expectations[sys.platform] 1237a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.expected = set(s.split()) 12381b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 1239b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl # expected to be skipped on every platform, even Linux 1240b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl self.expected.add('test_linuxaudiodev') 1241b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl 12422a182dbf3f2520ad753792068391775d102b13dfTim Peters if not os.path.supports_unicode_filenames: 12432a182dbf3f2520ad753792068391775d102b13dfTim Peters self.expected.add('test_pep277') 12441b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 124555b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz if test_timeout.skip_expected: 124655b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz self.expected.add('test_timeout') 124755b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz 1248fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis if sys.maxint == 9223372036854775807L: 1249fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis self.expected.add('test_imageop') 1250fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis 12516afc5e02fa775517fa0b6455906a8c203baf9cd2Jack Jansen if not sys.platform in ("mac", "darwin"): 12528f40f0635b9d233cf731c442c2ee21101c0f768cAmaury Forgeot d'Arc MAC_ONLY = ["test_macos", "test_macostools", "test_aepack", 1253b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_plistlib", "test_scriptpackages", 1254b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_applesingle"] 12557035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz for skip in MAC_ONLY: 12567035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz self.expected.add(skip) 12576f5a2b52ae769ba1833aef8a52b6ab89921ee8c6Benjamin Peterson elif len(u'\0'.encode('unicode-internal')) == 4: 12586f5a2b52ae769ba1833aef8a52b6ab89921ee8c6Benjamin Peterson self.expected.add("test_macostools") 12596f5a2b52ae769ba1833aef8a52b6ab89921ee8c6Benjamin Peterson 1260ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters 1261ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters if sys.platform != "win32": 1262b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl # test_sqlite is only reliable on Windows where the library 1263b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl # is distributed with Python 12647035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz WIN_ONLY = ["test_unicode_file", "test_winreg", 1265b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_winsound", "test_startfile", 1266b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_sqlite"] 12677035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz for skip in WIN_ONLY: 12687035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz self.expected.add(skip) 1269f2715e076435b74638acb81512c2ee014f75aea2Tim Peters 1270dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon if sys.platform != 'irix': 1271b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl IRIX_ONLY = ["test_imageop", "test_al", "test_cd", "test_cl", 1272b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_gl", "test_imgfile"] 1273dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon for skip in IRIX_ONLY: 1274dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon self.expected.add(skip) 1275dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon 1276b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl if sys.platform != 'sunos5': 1277b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl self.expected.add('test_sunaudiodev') 1278b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl self.expected.add('test_nis') 1279b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl 1280d290b04ee3645f8dd2e30c329c5ead2db16ece62Steven Bethard if not sys.py3kwarning: 1281d290b04ee3645f8dd2e30c329c5ead2db16ece62Steven Bethard self.expected.add('test_py3kwarn') 1282e8e22cf3c0d9e977bc9f13cfc535c026f92bc7aaSteven Bethard 12837c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters self.valid = True 1284b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1285b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def isvalid(self): 1286b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return true iff _ExpectedSkips knows about the current platform." 1287b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.valid 1288b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1289b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def getexpected(self): 1290b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """Return set of test names we expect to skip on current platform. 1291b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1292b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.isvalid() must be true. 1293b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """ 1294b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1295b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters assert self.isvalid() 1296b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.expected 1297b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1298152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumif __name__ == '__main__': 1299408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # Remove regrtest.py's own directory from the module search path. This 1300408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # prevents relative imports from working, and relative imports will screw 1301408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # up the testing framework. E.g. if both test.test_support and 1302408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # test_support are imported, they will not contain the same globals, and 1303408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # much of the testing framework relies on the globals in the 1304408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # test.test_support module. 1305408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0]))) 1306408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw i = pathlen = len(sys.path) 1307408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw while i >= 0: 1308408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw i -= 1 1309408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if os.path.abspath(os.path.normpath(sys.path[i])) == mydir: 1310408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw del sys.path[i] 13114698d9928ef1547e86a3f692e0c8d77e3f5e869cAntoine Pitrou if '--slaveargs' not in sys.argv and len(sys.path) == pathlen: 1312408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw print 'Could not find %r in sys.path to remove it' % mydir 131308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw main() 1314