regrtest.py revision bbb7efd72b3360f0523087cff6868f8fa02fe754
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 29152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 30152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf non-option arguments are present, they are names for tests to run, 31152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumunless -x is given, in which case they are names for tests not to run. 32152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf no test names are given, all tests are run. 33f58ed2596706b97c16174a839c1ed6f6b1f87fa6Guido van Rossum 343b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw-T turns on code coverage tracing with the trace module. 353b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw 36aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-D specifies the directory where coverage files are put. 37aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald 38aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-N Put coverage files alongside modules. 39aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald 409e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-s means to run only a single test and exit. This is useful when 419e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumdoing memory analysis on the Python interpreter (which tend to consume 429e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumtoo many resources to run the full regression test non-stop). The 439e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile /tmp/pynexttest is read to find the next test to run. If this 449e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile is missing, the first test_*.py file in testdir or on the command 459e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumline is used. (actually tempfile.gettempdir() is used instead of 469e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum/tmp). 47e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 489e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-f reads the names of tests from the file given as f's argument, one 499e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumor more test names per line. Whitespace is ignored. Blank lines and 509e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumlines beginning with '#' are ignored. This is especially useful for 519e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumwhittling down failures involving interactions among tests. 52c5000dfc4098f8547461e790a91536a923124261Tim Peters 530179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro-L causes the leaks(1) command to be run just before exit if it exists. 540179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaroleaks(1) is available on Mac OS X and presumably on some other 550179a18034b2316a70655d0f05bfbb20a0881f17Skip MontanaroFreeBSD-derived systems. 560179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro 5761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-R runs each test several times and examines sys.gettotalrefcount() to 5861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonsee if the test appears to be leaking references. The argument should 5961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonbe of the form stab:run:fname where 'stab' is the number of times the 6061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsontest is run to let gettotalrefcount settle down, 'run' is the number 6161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonof times further it is run and 'fname' is the name of the file the 6261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonreports are written to. These parameters all have defaults (5, 4 and 6361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson"reflog.txt" respectively), so the minimal invocation is '-R ::'. 6461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson 65abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters-M runs tests that require an exorbitant amount of memory. These tests 66abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstypically try to ascertain containers keep working when containing more than 6797ff04789de3e37af585648de70260a54a29bd47Armin Rigo2 billion objects, which only works on 64-bit systems. There are also some 6897ff04789de3e37af585648de70260a54a29bd47Armin Rigotests that try to exhaust the address space of the process, which only makes 6997ff04789de3e37af585648de70260a54a29bd47Armin Rigosense on 32-bit systems with at least 2Gb of memory. The passed-in memlimit, 70abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterswhich is a string in the form of '2.5Gb', determines howmuch memory the 71abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstests will limit themselves to (but they may go slightly over.) The number 72abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersshouldn't be more memory than the machine has (including swap memory). You 73abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersshould also keep in mind that swap memory is generally much, much slower 74abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersthan RAM, and setting memlimit to all available RAM or higher will heavily 75abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstax the machine. On the other hand, it is no use running these tests with a 76abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterslimit of less than 2.5Gb, and many require more than 20Gb. Tests that expect 77abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersto use more than memlimit memory will be skipped. The big-memory tests 78abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersgenerally run very, very long. 79abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters 809e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-u is used to specify which special resource intensive tests to run, 819e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumsuch as those requiring large file support or network connectivity. 829e9d4f8ed8d467d0558251f43c5decc754712d53Guido van RossumThe argument is a comma-separated list of words indicating the 839e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumresources to test. Currently only the following are defined: 8408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 853a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake all - Enable all special resources. 863a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 87315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum audio - Tests that use the audio device. (There are known 88315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum cases of broken audio drivers that can crash Python or 89315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum even the Linux kernel.) 90315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum 912158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling curses - Tests that use curses and will modify the terminal's 922158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling state and output modes. 931633a2e3452b40d0e9bb1f15ab16cd6b90f15a19Tim Peters 9487988b675323ebca3b15c52bad0dbc6b5422c2b0Benjamin Peterson lib2to3 - Run the tests for 2to3 (They take a while.) 9587988b675323ebca3b15c52bad0dbc6b5422c2b0Benjamin Peterson 969e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum largefile - It is okay to run some test that may create huge 979e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum files. These tests can take a long time and may 989e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum consume >2GB of disk space temporarily. 9908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 1009e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum network - It is okay to run tests that use external network 1019e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum resource, e.g. testing SSL support for sockets. 1021c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis 1031c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis bsddb - It is okay to run the bsddb testsuite, which takes 1041c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis a long time to complete. 1054dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake 1067c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger decimal - Test the decimal module against a large suite that 1077c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger verifies compliance with standards. 1087c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger 1094336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton compiler - Test the compiler package by compiling all the source 1104336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton in the standard library and test suite. This takes 11168c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger a long time. Enabling this resource also allows 11268c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger test_tokenize to verify round-trip lexing on every 11368c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger file in the test library. 1144336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton 115eba28bea9b8ef7df010e65c630b8c0f7009c6005Tim Peters subprocess Run all tests for the subprocess module. 116f7f1bb7ff5039626c856efafb68a4d338ab96642Peter Astrand 117aaa2f1dea706daf2a5f431d97a3e3120dba652d2Hye-Shik Chang urlfetch - It is okay to download files required on testing. 118aaa2f1dea706daf2a5f431d97a3e3120dba652d2Hye-Shik Chang 119b1a98de25ecd3e11fc3093de31fe844233dcd389Guilherme Polo gui - Run tests that require a running GUI. 120b1a98de25ecd3e11fc3093de31fe844233dcd389Guilherme Polo 1214dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred DrakeTo enable all resources except one, use '-uall,-<resource>'. For 1224dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeexample, to run all the tests except for the bsddb tests, give the 1234dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeoption '-uall,-bsddb'. 124152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum""" 125152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 12636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport cStringIO 127152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport getopt 12836dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport os 129ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaroimport random 13094a9c09e109706af64ae8796882baab2af25be2fNeal Norwitzimport re 13136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport sys 13236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport time 1333b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport traceback 13436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport warnings 135dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum 136dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# I see no other way to suppress these warnings; 137dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# putting them in test_grammar.py has no effect: 13888b1defb6f770c4f74788e8296b88fc31c3936ceGuido van Rossumwarnings.filterwarnings("ignore", "hex/oct constants", FutureWarning, 139dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum ".*test.test_grammar$") 140c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossumif sys.maxint > 0x7fffffff: 141c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum # Also suppress them in <string>, because for 64-bit platforms, 142c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum # that's where test_grammar.py hides them. 143c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning, 144c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum "<string>") 145152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 1469df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters# Ignore ImportWarnings that only occur in the source tree, 1479df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters# (because of modules with the same name as source-directories in Modules/) 148076ba2129bb08f56c3af9397748ae1df41daba06Thomas Woutersfor mod in ("ctypes", "gzip", "zipfile", "tarfile", "encodings.zlib_codec", 149076ba2129bb08f56c3af9397748ae1df41daba06Thomas Wouters "test.test_zipimport", "test.test_zlib", "test.test_zipfile", 150076ba2129bb08f56c3af9397748ae1df41daba06Thomas Wouters "test.test_codecs", "test.string_tests"): 1519df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters warnings.filterwarnings(module=".*%s$" % (mod,), 1529df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters action="ignore", category=ImportWarning) 1539df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters 154bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# MacOSX (a.k.a. Darwin) has a default stack size that is too small 155bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# for deeply recursive regular expressions. We see this as crashes in 156bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# the Python test suite when running test_re.py and test_sre.py. The 157bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# fix is to set the stack limit to 2048. 158bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# This approach may also be useful for other Unixy platforms that 159bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# suffer from small default stack limits. 160bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossumif sys.platform == 'darwin': 161bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum try: 162bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum import resource 163bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum except ImportError: 164bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum pass 165bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum else: 166bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum soft, hard = resource.getrlimit(resource.RLIMIT_STACK) 167bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum newsoft = min(hard, max(soft, 1024*2048)) 168bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard)) 169bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum 17004f357cffef6d764f2f0ff2671dabde75ec250d1Barry Warsawfrom test import test_support 1713a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 172e2886fd3ca357c4cf7c1584375d9b9bb55d476b7Benjamin PetersonRESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb', 173b1a98de25ecd3e11fc3093de31fe844233dcd389Guilherme Polo 'decimal', 'compiler', 'subprocess', 'urlfetch', 'gui') 1743a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 1753a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 17608fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''): 17708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw print __doc__ 17808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if msg: print msg 17908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(code) 18008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 18108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 182ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arcdef main(tests=None, testdir=None, verbose=0, quiet=False, 1833b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw exclude=False, single=False, randomize=False, fromfile=None, 184aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald findleaks=False, use_resources=None, trace=False, coverdir='coverage', 18536dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin runleaks=False, huntrleaks=False, verbose2=False, print_slow=False): 1866fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Execute a test suite. 1876fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1887e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters This also parses command-line options and modifies its behavior 189004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake accordingly. 1906fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1916fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum tests -- a list of strings containing test names (optional) 1926fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- the directory in which to look for tests (optional) 1936fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1946fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum Users other than the Python test suite will certainly want to 1956fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum specify testdir; if it's omitted, the directory containing the 196004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake Python test suite is searched for. 1976fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1986fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum If the tests argument is omitted, the tests listed on the 1996fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum command-line will be used. If that's empty, too, then all *.py 2006fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum files beginning with test_ will be used. 201ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro 202ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc The other default arguments (verbose, quiet, exclude, 20336dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin single, randomize, findleaks, use_resources, trace, coverdir, and 20436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin print_slow) allow programmers calling main() directly to set the 20536dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin values that would normally be set by flags on the command line. 2066fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 207004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake 2088dee809410e2d433bb0be5d8a1699736b90db0b5Tim Peters test_support.record_original_stdout(sys.stdout) 209152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 21036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsSrf:lu:t:TD:NLR:wM:', 211a5573b31532f59a63d9ff24e415592f60f974da4Brett Cannon ['help', 'verbose', 'quiet', 'exclude', 21236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin 'single', 'slow', 'random', 'fromfile', 2133b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw 'findleaks', 'use=', 'threshold=', 'trace', 214aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald 'coverdir=', 'nocoverdir', 'runleaks', 215abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters 'huntrleaks=', 'verbose2', 'memlimit=', 2163b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw ]) 217152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except getopt.error, msg: 21808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, msg) 21908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 22008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw # Defaults 22108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if use_resources is None: 22208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources = [] 223152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for o, a in opts: 22408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if o in ('-h', '--help'): 22508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(0) 22608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-v', '--verbose'): 22708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose += 1 22804824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis elif o in ('-w', '--verbose2'): 22904824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis verbose2 = True 23008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-q', '--quiet'): 2313b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw quiet = True; 23208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose = 0 23308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-x', '--exclude'): 2343b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw exclude = True 23508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-s', '--single'): 2363b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw single = True 23736dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin elif o in ('-S', '--slow'): 23836dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin print_slow = True 23908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-r', '--randomize'): 2403b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw randomize = True 241c5000dfc4098f8547461e790a91536a923124261Tim Peters elif o in ('-f', '--fromfile'): 242c5000dfc4098f8547461e790a91536a923124261Tim Peters fromfile = a 24308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-l', '--findleaks'): 2443b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw findleaks = True 2450179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro elif o in ('-L', '--runleaks'): 2460179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro runleaks = True 2479e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum elif o in ('-t', '--threshold'): 2489e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum import gc 2499e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum gc.set_threshold(int(a)) 2503b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw elif o in ('-T', '--coverage'): 2513b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw trace = True 252aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald elif o in ('-D', '--coverdir'): 253aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald coverdir = os.path.join(os.getcwd(), a) 254aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald elif o in ('-N', '--nocoverdir'): 255aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald coverdir = None 25661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson elif o in ('-R', '--huntrleaks'): 25761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks = a.split(':') 25861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks) != 3: 25961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson print a, huntrleaks 26061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson usage(2, '-R takes three colon-separated arguments') 26161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks[0]) == 0: 26261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[0] = 5 26361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson else: 26461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[0] = int(huntrleaks[0]) 26561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks[1]) == 0: 26661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[1] = 4 26761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson else: 26861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[1] = int(huntrleaks[1]) 26961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks[2]) == 0: 27061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[2] = "reflog.txt" 271abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters elif o in ('-M', '--memlimit'): 272abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters test_support.set_memlimit(a) 27308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-u', '--use'): 274fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum u = [x.lower() for x in a.split(',')] 275fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum for r in u: 2763a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r == 'all': 2774dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake use_resources[:] = RESOURCE_NAMES 2784dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake continue 2794dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake remove = False 2804dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if r[0] == '-': 2814dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake remove = True 2824dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake r = r[1:] 2833a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r not in RESOURCE_NAMES: 2843a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake usage(1, 'Invalid -u/--use option: ' + a) 2854dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if remove: 2864dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if r in use_resources: 2874dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake use_resources.remove(r) 2884dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake elif r not in use_resources: 289e41abab33b0b467acd6bdc7d73ce4b5cef4fd5bfAndrew MacIntyre use_resources.append(r) 290c5000dfc4098f8547461e790a91536a923124261Tim Peters if single and fromfile: 291c5000dfc4098f8547461e790a91536a923124261Tim Peters usage(2, "-s and -f don't go together!") 29208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 293152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum good = [] 294152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum bad = [] 295152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum skipped = [] 2969a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake resource_denieds = [] 297e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 298d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 299a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw try: 300a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw import gc 301a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw except ImportError: 3028a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print 'No GC available, disabling findleaks.' 3033b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw findleaks = False 304a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw else: 3058a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # Uncomment the line below to report garbage that is not 3068a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # freeable by reference counting alone. By default only 3078a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # garbage that is not collectable by the GC is reported. 3088a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer #gc.set_debug(gc.DEBUG_SAVEALL) 309d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage = [] 310a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 311e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 312e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw from tempfile import gettempdir 313e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw filename = os.path.join(gettempdir(), 'pynexttest') 314e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw try: 315e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'r') 316fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond next = fp.read().strip() 317e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = [next] 318e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 319e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw except IOError: 320e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw pass 321c5000dfc4098f8547461e790a91536a923124261Tim Peters 322c5000dfc4098f8547461e790a91536a923124261Tim Peters if fromfile: 323c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = [] 324c5000dfc4098f8547461e790a91536a923124261Tim Peters fp = open(fromfile) 325c5000dfc4098f8547461e790a91536a923124261Tim Peters for line in fp: 326c5000dfc4098f8547461e790a91536a923124261Tim Peters guts = line.split() # assuming no test has whitespace in its name 327c5000dfc4098f8547461e790a91536a923124261Tim Peters if guts and not guts[0].startswith('#'): 328c5000dfc4098f8547461e790a91536a923124261Tim Peters tests.extend(guts) 329c5000dfc4098f8547461e790a91536a923124261Tim Peters fp.close() 330c5000dfc4098f8547461e790a91536a923124261Tim Peters 331c5000dfc4098f8547461e790a91536a923124261Tim Peters # Strip .py extensions. 332c5000dfc4098f8547461e790a91536a923124261Tim Peters if args: 333c5000dfc4098f8547461e790a91536a923124261Tim Peters args = map(removepy, args) 334c5000dfc4098f8547461e790a91536a923124261Tim Peters if tests: 335c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = map(removepy, tests) 336c5000dfc4098f8547461e790a91536a923124261Tim Peters 3376c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests = STDTESTS[:] 3386c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests = NOTTESTS[:] 339152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if exclude: 3406c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum for arg in args: 3416c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum if arg in stdtests: 3426c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests.remove(arg) 3436c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests[:0] = args 34441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum args = [] 345747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum tests = tests or args or findtests(testdir, stdtests, nottests) 346e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 347e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = tests[:1] 348ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro if randomize: 349ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro random.shuffle(tests) 3503b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if trace: 3513b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw import trace 3523b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix], 3533b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw trace=False, count=True) 35436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_times = [] 35541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum test_support.verbose = verbose # Tell tests to be moderately quiet 35608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_support.use_resources = use_resources 3575796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum save_modules = sys.modules.keys() 358152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for test in tests: 35941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not quiet: 36041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test 3613cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 3623b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if trace: 3633b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw # If we're tracing code coverage, then we don't exit with status 3643b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw # if on a false return value from main. 365ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc tracer.runctx('runtest(test, verbose, quiet,' 36636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin ' test_times, testdir)', 3673b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw globals=globals(), locals=vars()) 36841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum else: 36914ca327f998511da5e89f819204c54fa582dd696Neal Norwitz try: 370ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc ok = runtest(test, verbose, quiet, test_times, 37136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin testdir, huntrleaks) 37214ca327f998511da5e89f819204c54fa582dd696Neal Norwitz except KeyboardInterrupt: 37314ca327f998511da5e89f819204c54fa582dd696Neal Norwitz # print a newline separate from the ^C 37414ca327f998511da5e89f819204c54fa582dd696Neal Norwitz print 37514ca327f998511da5e89f819204c54fa582dd696Neal Norwitz break 37614ca327f998511da5e89f819204c54fa582dd696Neal Norwitz except: 37714ca327f998511da5e89f819204c54fa582dd696Neal Norwitz raise 3783b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if ok > 0: 3793b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw good.append(test) 3803b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw elif ok == 0: 3813b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw bad.append(test) 3823b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw else: 3833b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw skipped.append(test) 3843b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if ok == -2: 3853b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw resource_denieds.append(test) 386d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 387d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer gc.collect() 388d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if gc.garbage: 3898a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "Warning: test created", len(gc.garbage), 3908a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "uncollectable object(s)." 3918a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # move the uncollectable objects somewhere so we don't see 3928a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # them again 393d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage.extend(gc.garbage) 394d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer del gc.garbage[:] 3955796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum # Unload the newly imported modules (best effort finalization) 3965796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum for module in sys.modules.keys(): 39751931144427faa001a6db3cfc37380526be256b6Guido van Rossum if module not in save_modules and module.startswith("test."): 3985796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum test_support.unload(module) 3997a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton 4007a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton # The lists won't be sorted if running with -r 4017a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton good.sort() 4027a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton bad.sort() 4037a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton skipped.sort() 404e0c446bb4ad67294f42d4cb53b4ff28413bd8ddeTim Peters 405152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if good and not quiet: 40641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not bad and not skipped and len(good) > 1: 40741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "All", 40841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print count(len(good), "test"), "OK." 40936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin if print_slow: 41036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_times.sort(reverse=True) 41136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin print "10 slowest tests:" 41236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin for time, test in test_times[:10]: 41336dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin print "%s: %.1fs" % (test, time) 414152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if bad: 415a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(bad), "test"), "failed:" 416a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(bad) 417152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if skipped and not quiet: 418a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(skipped), "test"), "skipped:" 419a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(skipped) 420e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 421b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters e = _ExpectedSkips() 422a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters plat = sys.platform 423b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if e.isvalid(): 424a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger surprise = set(skipped) - e.getexpected() - set(resource_denieds) 425b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if surprise: 426b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print count(len(surprise), "skip"), \ 427a45da92484ceececf1cf32b4dfb16004945b001eTim Peters "unexpected on", plat + ":" 428a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(surprise) 429b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 430b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Those skips are all expected on", plat + "." 431b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 432b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Ask someone to teach regrtest.py about which tests are" 433b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "expected to get skipped on", plat + "." 434b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 43504824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis if verbose2 and bad: 43604824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis print "Re-running failed tests in verbose mode" 43704824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis for test in bad: 438922dd7d49da75b07e27f917db0166f67bdbef3d3Tim Peters print "Re-running test %r in verbose mode" % test 439922dd7d49da75b07e27f917db0166f67bdbef3d3Tim Peters sys.stdout.flush() 44004824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis try: 4415fe5cf6df20607033096c05d68cef7222a35697cNeal Norwitz test_support.verbose = True 442ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc ok = runtest(test, True, quiet, test_times, testdir, 44304824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis huntrleaks) 44404824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis except KeyboardInterrupt: 44504824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis # print a newline separate from the ^C 44604824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis print 44704824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis break 44804824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis except: 44904824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis raise 45004824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis 451e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 452e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw alltests = findtests(testdir, stdtests, nottests) 453e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw for i in range(len(alltests)): 454e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if tests[0] == alltests[i]: 455e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if i == len(alltests) - 1: 456e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 457e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 458e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'w') 459e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.write(alltests[i+1] + '\n') 460e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 461e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw break 462e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 463e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 464e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 4653b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if trace: 4663b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw r = tracer.results() 4673b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw r.write_results(show_missing=True, summary=True, coverdir=coverdir) 4683b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw 4690179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro if runleaks: 4700179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro os.system("leaks %d" % os.getpid()) 4710179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro 4725943b4ac1067e5011b66697396d5df93b5ef9af0Tim Peters sys.exit(len(bad) > 0) 47308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 474152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 4756fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [ 476152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_grammar', 477152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_opcodes', 478f567ca3e1ae851ea6e7418da3df47e034841a08dCollin Winter 'test_dict', 479152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_builtin', 480152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_exceptions', 481152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_types', 4825545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter 'test_unittest', 4835545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter 'test_doctest', 4845545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter 'test_doctest2', 485152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 486152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 4876fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [ 488152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_support', 48962e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future1', 49062e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future2', 491152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 492152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 4936fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossumdef findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): 494152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum """Return a list of all applicable test modules.""" 4956fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 496152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum names = os.listdir(testdir) 497152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests = [] 498152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for name in names: 499e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum if name[:5] == "test_" and name[-3:] == os.extsep+"py": 50041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum modname = name[:-3] 50141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if modname not in stdtests and modname not in nottests: 50241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum tests.append(modname) 503152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests.sort() 504152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return stdtests + tests 505152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 506ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arcdef runtest(test, verbose, quiet, test_times, 50736dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin testdir=None, huntrleaks=False): 5086fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Run a single test. 509e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 5106fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum test -- the name of the test 5116fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum verbose -- if true, print more messages 512f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick quiet -- if true, don't print 'skipped' messages (probably redundant) 51336dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_times -- a list of (time, test_name) pairs 5146fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- test directory 515e55848695347c67effeb08aedcf2ce3d256524cdTim Peters huntrleaks -- run multiple times to test for leaks; requires a debug 516e55848695347c67effeb08aedcf2ce3d256524cdTim Peters build; a triple corresponding to -R's three arguments 517e55848695347c67effeb08aedcf2ce3d256524cdTim Peters Return: 518e55848695347c67effeb08aedcf2ce3d256524cdTim Peters -2 test skipped because resource denied 519e55848695347c67effeb08aedcf2ce3d256524cdTim Peters -1 test skipped for some other reason 520e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 0 test failed 521e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 1 test passed 5226fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 52306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 524e55848695347c67effeb08aedcf2ce3d256524cdTim Peters try: 525ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc return runtest_inner(test, verbose, quiet, test_times, 52636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin testdir, huntrleaks) 527e55848695347c67effeb08aedcf2ce3d256524cdTim Peters finally: 528e55848695347c67effeb08aedcf2ce3d256524cdTim Peters cleanup_test_droppings(test, verbose) 529e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 530ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arcdef runtest_inner(test, verbose, quiet, test_times, 53136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin testdir=None, huntrleaks=False): 532152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum test_support.unload(test) 5333b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if not testdir: 5343b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw testdir = findtestdir() 5359390cc15da5cd6920bd41bb4cd146d5d0601345fTim Peters if verbose: 536ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc capture_stdout = None 5370fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 538ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc capture_stdout = cStringIO.StringIO() 53906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 540152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 541342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters save_stdout = sys.stdout 54241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum try: 543ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc if capture_stdout: 544ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc sys.stdout = capture_stdout 545408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if test.startswith('test.'): 546408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw abstest = test 547408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw else: 548408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # Always import it from the test package 549408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw abstest = 'test.' + test 55036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin start_time = time.time() 551408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw the_package = __import__(abstest, globals(), locals(), []) 552408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw the_module = getattr(the_package, test) 553980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl # Old tests run to completion simply as a side-effect of 554980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl # being imported. For tests based on unittest or doctest, 555980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl # explicitly invoke their test_main() function (if it exists). 556d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test = getattr(the_module, "test_main", None) 557d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters if indirect_test is not None: 558d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test() 55961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if huntrleaks: 56006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters dash_R(the_module, test, indirect_test, huntrleaks) 56136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_time = time.time() - start_time 56236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_times.append((test_time, test)) 56341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum finally: 564342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters sys.stdout = save_stdout 5659a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake except test_support.ResourceDenied, msg: 5669a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake if not quiet: 5679a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake print test, "skipped --", msg 5689a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake sys.stdout.flush() 5699a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake return -2 5703af826ebca80f8a6c782fb590c77ac210ae9e22dThomas Wouters except (ImportError, test_support.TestSkipped), msg: 571f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick if not quiet: 572de4742b87f7775fc3d9fa76cd640e7cdd5ef69a2Fred Drake print test, "skipped --", msg 5733cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 57441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return -1 575fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake except KeyboardInterrupt: 576fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake raise 577152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except test_support.TestFailed, msg: 57841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "test", test, "failed --", msg 5793cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 58041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 5819e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum except: 58241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum type, value = sys.exc_info()[:2] 58327c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake print "test", test, "crashed --", str(type) + ":", value 5843cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 58541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if verbose: 58641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum traceback.print_exc(file=sys.stdout) 5873cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 58841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 589152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 590ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc # Except in verbose mode, tests should not print anything 591ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc if verbose or huntrleaks: 5920fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 593ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc output = capture_stdout.getvalue() 594ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc if not output: 5950fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 5960fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "test", test, "produced unexpected output:" 597ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc print "*" * 70 598ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc print output 599ea13dc629caed2dd44b1ba5b611e1ba2ac1fd96fAmaury Forgeot d'Arc print "*" * 70 6003cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 6010fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 0 6020fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum 603e55848695347c67effeb08aedcf2ce3d256524cdTim Petersdef cleanup_test_droppings(testname, verbose): 604e55848695347c67effeb08aedcf2ce3d256524cdTim Peters import shutil 605e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 606e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # Try to clean up junk commonly left behind. While tests shouldn't leave 607e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # any files or directories behind, when a test fails that can be tedious 608e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # for it to arrange. The consequences can be especially nasty on Windows, 609e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # since if a test leaves a file open, it cannot be deleted by name (while 610e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # there's nothing we can do about that here either, we can display the 611e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # name of the offending test, which is a real help). 612e55848695347c67effeb08aedcf2ce3d256524cdTim Peters for name in (test_support.TESTFN, 613e55848695347c67effeb08aedcf2ce3d256524cdTim Peters "db_home", 614e55848695347c67effeb08aedcf2ce3d256524cdTim Peters ): 615e55848695347c67effeb08aedcf2ce3d256524cdTim Peters if not os.path.exists(name): 616e55848695347c67effeb08aedcf2ce3d256524cdTim Peters continue 617e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 618e55848695347c67effeb08aedcf2ce3d256524cdTim Peters if os.path.isdir(name): 619e55848695347c67effeb08aedcf2ce3d256524cdTim Peters kind, nuker = "directory", shutil.rmtree 620e55848695347c67effeb08aedcf2ce3d256524cdTim Peters elif os.path.isfile(name): 621e55848695347c67effeb08aedcf2ce3d256524cdTim Peters kind, nuker = "file", os.unlink 622e55848695347c67effeb08aedcf2ce3d256524cdTim Peters else: 623e55848695347c67effeb08aedcf2ce3d256524cdTim Peters raise SystemError("os.path says %r exists but is neither " 624e55848695347c67effeb08aedcf2ce3d256524cdTim Peters "directory nor file" % name) 625e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 626e55848695347c67effeb08aedcf2ce3d256524cdTim Peters if verbose: 627e55848695347c67effeb08aedcf2ce3d256524cdTim Peters print "%r left behind %s %r" % (testname, kind, name) 628e55848695347c67effeb08aedcf2ce3d256524cdTim Peters try: 629e55848695347c67effeb08aedcf2ce3d256524cdTim Peters nuker(name) 630e55848695347c67effeb08aedcf2ce3d256524cdTim Peters except Exception, msg: 631e55848695347c67effeb08aedcf2ce3d256524cdTim Peters print >> sys.stderr, ("%r left behind %s %r and it couldn't be " 632e55848695347c67effeb08aedcf2ce3d256524cdTim Peters "removed: %s" % (testname, kind, name, msg)) 633e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 63406c5c008193164f04ebcc14ca5176080cf303c54Tim Petersdef dash_R(the_module, test, indirect_test, huntrleaks): 63506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # This code is hackish and inelegant, but it seems to do the job. 636dffbf5f5421cbeb20237280c0bd70f989269f844Georg Brandl import copy_reg, _abcoll, io 63706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 63806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if not hasattr(sys, 'gettotalrefcount'): 63906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters raise Exception("Tracking reference leaks requires a debug build " 64006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters "of Python") 64106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 64206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Save current values for dash_R_cleanup() to restore. 64306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters fs = warnings.filters[:] 644dffbf5f5421cbeb20237280c0bd70f989269f844Georg Brandl ps = copy_reg.dispatch_table.copy() 64506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters pic = sys.path_importer_cache.copy() 64664c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum abcs = {} 6474d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc modules = _abcoll, io 6484d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc for abc in [getattr(mod, a) for mod in modules for a in mod.__all__]: 6494d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc # XXX isinstance(abc, ABCMeta) leads to infinite recursion 6504d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc if not hasattr(abc, '_abc_registry'): 6516b29dd05c8fff4fc69ab4d68baef86fb7e91548cChristian Heimes continue 65264c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum for obj in abc.__subclasses__() + [abc]: 65364c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum abcs[obj] = obj._abc_registry.copy() 65464c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum 65506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if indirect_test: 65606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters def run_the_test(): 65706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters indirect_test() 65806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters else: 65906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters def run_the_test(): 66006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters reload(the_module) 66106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 66206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters deltas = [] 66306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters nwarmup, ntracked, fname = huntrleaks 66406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters repcount = nwarmup + ntracked 66506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters print >> sys.stderr, "beginning", repcount, "repetitions" 66606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters print >> sys.stderr, ("1234567890"*(repcount//10 + 1))[:repcount] 66764c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum dash_R_cleanup(fs, ps, pic, abcs) 66806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters for i in range(repcount): 66906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters rc = sys.gettotalrefcount() 67006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters run_the_test() 67106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters sys.stderr.write('.') 67264c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum dash_R_cleanup(fs, ps, pic, abcs) 67306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if i >= nwarmup: 67406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters deltas.append(sys.gettotalrefcount() - rc - 2) 67506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters print >> sys.stderr 67606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if any(deltas): 677d9841039dbd0e37746d46f6e46ce1d82b85a21b3Neal Norwitz msg = '%s leaked %s references, sum=%s' % (test, deltas, sum(deltas)) 678d9841039dbd0e37746d46f6e46ce1d82b85a21b3Neal Norwitz print >> sys.stderr, msg 67906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters refrep = open(fname, "a") 680d9841039dbd0e37746d46f6e46ce1d82b85a21b3Neal Norwitz print >> refrep, msg 68106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters refrep.close() 68206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 68364c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossumdef dash_R_cleanup(fs, ps, pic, abcs): 684dffbf5f5421cbeb20237280c0bd70f989269f844Georg Brandl import gc, copy_reg 6850aa6e1b8fb8c3ae656518a7e319a5f697158e7bfBrett Cannon import _strptime, linecache 6860aa6e1b8fb8c3ae656518a7e319a5f697158e7bfBrett Cannon dircache = test_support.import_module('dircache', deprecated=True) 68706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters import urlparse, urllib, urllib2, mimetypes, doctest 6884d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc import struct, filecmp 68906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters from distutils.dir_util import _path_created 69006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 691607bff1ebe81e869697e228322da4c308e8753a5Amaury Forgeot d'Arc # Clear the warnings registry, so they can be displayed again 692607bff1ebe81e869697e228322da4c308e8753a5Amaury Forgeot d'Arc for mod in sys.modules.values(): 693607bff1ebe81e869697e228322da4c308e8753a5Amaury Forgeot d'Arc if hasattr(mod, '__warningregistry__'): 694607bff1ebe81e869697e228322da4c308e8753a5Amaury Forgeot d'Arc del mod.__warningregistry__ 695607bff1ebe81e869697e228322da4c308e8753a5Amaury Forgeot d'Arc 69606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Restore some original values. 69706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters warnings.filters[:] = fs 698dffbf5f5421cbeb20237280c0bd70f989269f844Georg Brandl copy_reg.dispatch_table.clear() 699dffbf5f5421cbeb20237280c0bd70f989269f844Georg Brandl copy_reg.dispatch_table.update(ps) 70006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters sys.path_importer_cache.clear() 70106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters sys.path_importer_cache.update(pic) 70206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 703908caac52e8e62baa1ee54e4e650e1cd3ac37907Christian Heimes # clear type cache 704422051a3675271e179995ad4a0f056ff94395d55Christian Heimes sys._clear_type_cache() 705908caac52e8e62baa1ee54e4e650e1cd3ac37907Christian Heimes 70664c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum # Clear ABC registries, restoring previously saved ABC registries. 7074d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc for abc, registry in abcs.items(): 7084d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc abc._abc_registry = registry.copy() 7094d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc abc._abc_cache.clear() 7104d0c1170ef1eb0d0acbbcc6da0fa5a7c6cba4a10Amaury Forgeot d'Arc abc._abc_negative_cache.clear() 71164c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum 71206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Clear assorted module caches. 71306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters _path_created.clear() 71406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters re.purge() 71506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters _strptime._regex_cache.clear() 71606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters urlparse.clear_cache() 71706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters urllib.urlcleanup() 71806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters urllib2.install_opener(None) 71906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters dircache.reset() 72006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters linecache.clearcache() 72106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters mimetypes._default_mime_types() 722c27d655c00ec08f44abea646ae06456cbcca84b6Tim Peters filecmp._cache.clear() 72376d19f68e4c824bbcba890d924f20a6133ee0326Christian Heimes struct._clearcache() 72406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters doctest.master = None 72506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 72606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Collect cyclic trash. 72706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters gc.collect() 72806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 729152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir(): 730152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if __name__ == '__main__': 73141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = sys.argv[0] 732152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 73341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = __file__ 734152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum testdir = os.path.dirname(file) or os.curdir 735152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return testdir 736152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 737c5000dfc4098f8547461e790a91536a923124261Tim Petersdef removepy(name): 738c5000dfc4098f8547461e790a91536a923124261Tim Peters if name.endswith(os.extsep + "py"): 739c5000dfc4098f8547461e790a91536a923124261Tim Peters name = name[:-3] 740c5000dfc4098f8547461e790a91536a923124261Tim Peters return name 741c5000dfc4098f8547461e790a91536a923124261Tim Peters 742152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word): 743152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if n == 1: 74441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %s" % (n, word) 745152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 74641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %ss" % (n, word) 747152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 748a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4): 7497c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters """Print the elements of iterable x to stdout. 750a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 751a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg width (default 70) is the maximum line length. 752a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg indent (default 4) is the number of blanks with which to 753a45da92484ceececf1cf32b4dfb16004945b001eTim Peters begin each line. 754a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """ 755a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 756ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters from textwrap import fill 757ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters blanks = ' ' * indent 758ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters print fill(' '.join(map(str, x)), width, 759ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters initial_indent=blanks, subsequent_indent=blanks) 760a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 761de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# Map sys.platform to a string containing the basenames of tests 762de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# expected to be skipped on that platform. 7632a182dbf3f2520ad753792068391775d102b13dfTim Peters# 7642a182dbf3f2520ad753792068391775d102b13dfTim Peters# Special cases: 7652a182dbf3f2520ad753792068391775d102b13dfTim Peters# test_pep277 7662a182dbf3f2520ad753792068391775d102b13dfTim Peters# The _ExpectedSkips constructor adds this to the set of expected 7672a182dbf3f2520ad753792068391775d102b13dfTim Peters# skips if not os.path.supports_unicode_filenames. 768b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters# test_socket_ssl 769b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters# Controlled by test_socket_ssl.skip_expected. Requires the network 770b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters# resource, and a socket module with ssl support. 77155b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz# test_timeout 77255b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz# Controlled by test_timeout.skip_expected. Requires the network 77355b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz# resource and a socket module. 774b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl# 775b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl# Tests that are expected to be skipped everywhere except on one platform 776b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl# are also handled separately. 777de14a30d1d70073d36f207fe432e4adad5178399Tim Peters 778f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = { 779f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'win32': 780f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 781c7c516aa5140d255f18ffd2e8569434f0904f5dbTim Peters test__locale 782823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 78378e35f931128d017d5955841eac8c397ff32595cTim Peters test_bsddb3 784f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_commands 785f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_crypt 786d703057752d52cef6082a920879a0b62cdeffacaTim Peters test_curses 787f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dbm 788f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 789f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fcntl 790f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fork1 7910e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 792f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gdbm 793f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_grp 794fd8e6e599051de07cdb8e9abc9dbadf37c5fca0cTim Peters test_ioctl 795f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 7960e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 797f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_mhlib 798f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_openpty 799efc4b121694888e00072f5a079de5496afecb05aTim Peters test_ossaudiodev 80027d9ee32abac7a580b1ffc980522535bdd20f09bGeorg Brandl test_pipes 801f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_poll 802003eb3088283927e3155f2e2317d3d516edd9645Tim Peters test_posix 803f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pty 804f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pwd 8051e33ffa5c719ec611e182681c4a5f2ceb62a08f5Tim Peters test_resource 806f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_signal 807cea2cc4a21e7e2ba84f6dc11682821e502bd1f5fTim Peters test_threadsignals 808f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_timing 809b84de02f75c906fbcf519b4c89b9dbdd18837276Tim Peters test_wait3 810b84de02f75c906fbcf519b4c89b9dbdd18837276Tim Peters test_wait4 811f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 812f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'linux2': 813f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 814823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 815f66dacdb017c7481c3ba4f0743d5446146de33c8Guido van Rossum test_curses 816f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 817f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 8180e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 8194507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum test_ossaudiodev 820f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 82149a806edbb298f2a5be3598bd80c21392cb6968dJack Jansen 'mac': 822aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """ 823679751455798fab6425fda749a19e783e58b210eJack Jansen test_atexit 824aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_bsddb 825823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 826679751455798fab6425fda749a19e783e58b210eJack Jansen test_bsddb3 827679751455798fab6425fda749a19e783e58b210eJack Jansen test_bz2 828aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_commands 829aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_crypt 830b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen test_curses 831aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dbm 832aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dl 833aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fcntl 834aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fork1 8350e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 836aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_grp 837c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen test_ioctl 838aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_largefile 839aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_locale 8400e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 841aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_mmap 842aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_openpty 843679751455798fab6425fda749a19e783e58b210eJack Jansen test_ossaudiodev 844aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_poll 845679751455798fab6425fda749a19e783e58b210eJack Jansen test_popen 846aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_popen2 8475bb97e66dcbb110877ac17209c7d2641db6f6006Jack Jansen test_posix 848aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pty 849aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pwd 850679751455798fab6425fda749a19e783e58b210eJack Jansen test_resource 851aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_signal 852aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_sundry 853c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen test_tarfile 854aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_timing 855aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """, 85621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'unixware7': 8570ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """ 8580ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_bsddb 859823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 8600ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_dl 8610e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 8620ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_largefile 8630e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 8640ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_minidom 8650ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_openpty 8660ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_pyexpat 8670ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sax 8680ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sundry 8690ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """, 87021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'openunix8': 87121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """ 87221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_bsddb 873823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 87421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_dl 8750e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 87621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_largefile 8770e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 87821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_minidom 87921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_openpty 88021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_pyexpat 88121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sax 88221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sundry 88321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """, 88421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'sco_sv3': 88521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """ 88621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_asynchat 88721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_bsddb 888823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 88921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_dl 89021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_fork1 8910e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 89221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_gettext 89321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_largefile 89421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_locale 8950e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 89621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_minidom 89721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_openpty 89821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_pyexpat 89921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_queue 90021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sax 90121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sundry 90221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_thread 90321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threaded_import 90421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threadedtempfile 90521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threading 90621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """, 907e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum 'riscos': 908e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """ 909e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_asynchat 910a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis test_atexit 911e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_bsddb 912823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 913a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis test_bsddb3 914e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_commands 915e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_crypt 916e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dbm 917e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dl 918e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fcntl 919e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fork1 9200e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 921e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_gdbm 922e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_grp 923e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_largefile 924e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_locale 9250e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 926e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_mmap 927e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_openpty 928e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_poll 929e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_popen2 930e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pty 931e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pwd 932e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_strop 933e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_sundry 934e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_thread 935e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threaded_import 936e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threadedtempfile 937e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threading 938e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_timing 939e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """, 9408a97f4a380a7a356730e48406f8269c3efe5e6ebJack Jansen 'darwin': 941398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """ 9422bfb94c871caeae622174485264f407d9df354b9Brett Cannon test__locale 943acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_bsddb 9449d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum test_bsddb3 945398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_curses 9460e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 947398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_gdbm 948398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_largefile 949acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_locale 9500e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 951398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_minidom 952acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_ossaudiodev 953398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_poll 954398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """, 95511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum 'sunos5': 95611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum """ 95711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_bsddb 958823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 95911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_curses 96011c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_dbm 9610e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 9620e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 96311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gdbm 96411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gzip 96511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_openpty 96611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_zipfile 96711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_zlib 968ed375e18d10d37bfea1769aa1fe69795df6cbc10Jeremy Hylton """, 969b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro 'hp-ux11': 970b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """ 971b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_bsddb 972823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 973b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_curses 974b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_dl 9750e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 976b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gdbm 977b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gzip 978b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_largefile 979b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_locale 9800e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 981b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_minidom 982b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_openpty 983b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_pyexpat 984b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_sax 985b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zipfile 986b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zlib 987b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """, 988f90ae20354ceb501f0ba0b6459df17f1a8005a47Martin v. Löwis 'atheos': 989c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters """ 990823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 991c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_curses 992c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_dl 993c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_gdbm 9940e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 995c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_largefile 996c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_locale 9970e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 998c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mhlib 999c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mmap 1000c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_poll 1001c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_popen2 1002c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_resource 1003c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters """, 100425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler 'cygwin': 100525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler """ 1006823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 1007b0f89e05ad9aaf229033bbc81be43c1f826e3930Tim Peters test_bsddb3 100825115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_curses 100925115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_dbm 10100e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 1011c23f39ca9dc540ace879fcf9746254d94293b86fJason Tishler test_ioctl 10120e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 101325115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_largefile 101425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_locale 10155c4ded2c3b59aa134b82ab17cdfe7ab633194ca6Jason Tishler test_ossaudiodev 101625115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_socketserver 101725115940604e6051aa2fb16be88c6b8f64577251Jason Tishler """, 1018fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre 'os2emx': 1019fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre """ 1020fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_audioop 1021823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 1022fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_bsddb3 1023fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_commands 1024fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_curses 1025fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_dl 10260e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 10270e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 1028fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_largefile 1029fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_mhlib 1030fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_mmap 1031fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_openpty 1032fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_ossaudiodev 1033fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_pty 1034fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_resource 1035fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_signal 1036fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre """, 1037944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum 'freebsd4': 1038944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum """ 1039944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_bsddb 1040944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_bsddb3 10410e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 1042f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang test_gdbm 1043944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_locale 1044944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_ossaudiodev 1045944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_pep277 1046f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang test_pty 1047944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_socket_ssl 1048944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_socketserver 1049f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang test_tcl 1050bbb7efd72b3360f0523087cff6868f8fa02fe754Guilherme Polo test_tk 10517a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_guionly 10527a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_textonly 1053944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_timeout 1054944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_urllibnet 105537040cdace1982772e5f35e4acfa13861d72065dJesse Noller test_multiprocessing 105656f88113b7272be8403f9b722c943e679e23d362Martin v. Löwis """, 10578ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum 'aix5': 10588ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum """ 10598ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bsddb 10608ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bsddb185 10618ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bsddb3 10628ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bz2 10638ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_dl 10640e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 10658ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_gdbm 10668ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_gzip 10670e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_kqueue 10688ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_ossaudiodev 10698ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_tcl 1070bbb7efd72b3360f0523087cff6868f8fa02fe754Guilherme Polo test_tk 10717a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_guionly 10727a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_textonly 10738ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_zipimport 10748ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_zlib 10758ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum """, 10766da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis 'openbsd3': 10776da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis """ 10786da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_bsddb 10796da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_bsddb3 10806da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_ctypes 10816da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_dl 10820e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 10836da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_gdbm 10846da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_locale 10856da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_normalization 10866da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_ossaudiodev 10876da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_pep277 10886da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_tcl 1089bbb7efd72b3360f0523087cff6868f8fa02fe754Guilherme Polo test_tk 10907a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_guionly 10917a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_textonly 109237040cdace1982772e5f35e4acfa13861d72065dJesse Noller test_multiprocessing 10936da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis """, 10940870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl 'netbsd3': 10950870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl """ 10960870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_bsddb 10970870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_bsddb185 10980870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_bsddb3 10990870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_ctypes 11000870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_curses 11010870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_dl 11020e9ab5f2f0f907b57c70557e21633ce8c341d1d1Christian Heimes test_epoll 11030870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_gdbm 11040870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_locale 11050870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_ossaudiodev 11060870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_pep277 11070870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_tcl 1108bbb7efd72b3360f0523087cff6868f8fa02fe754Guilherme Polo test_tk 11097a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_guionly 11107a77ee88af00b853aae328dbb3c87d91a1313052Guilherme Polo test_ttk_textonly 111137040cdace1982772e5f35e4acfa13861d72065dJesse Noller test_multiprocessing 11120870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl """, 1113f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum} 111432d0c1b458bbdda8d8895f5b5bedfb4644f839e7Martin v. Löwis_expectations['freebsd5'] = _expectations['freebsd4'] 1115f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang_expectations['freebsd6'] = _expectations['freebsd4'] 11164e422817eb1bc5a6a42365001ad45683ae07e559Hye-Shik Chang_expectations['freebsd7'] = _expectations['freebsd4'] 1117ea684743daa0c198ab327d07832eca48a9578c68Hye-Shik Chang_expectations['freebsd8'] = _expectations['freebsd4'] 1118f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 1119b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips: 1120b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self): 11212a182dbf3f2520ad753792068391775d102b13dfTim Peters import os.path 112255b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz from test import test_timeout 11231b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 11247c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters self.valid = False 1125de14a30d1d70073d36f207fe432e4adad5178399Tim Peters if sys.platform in _expectations: 1126f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum s = _expectations[sys.platform] 1127a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.expected = set(s.split()) 11281b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 1129b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl # expected to be skipped on every platform, even Linux 1130b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl self.expected.add('test_linuxaudiodev') 1131b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl 11322a182dbf3f2520ad753792068391775d102b13dfTim Peters if not os.path.supports_unicode_filenames: 11332a182dbf3f2520ad753792068391775d102b13dfTim Peters self.expected.add('test_pep277') 11341b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 113598d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen try: 113698d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen from test import test_socket_ssl 113798d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen except ImportError: 113898d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen pass 113998d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen else: 114098d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen if test_socket_ssl.skip_expected: 114198d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen self.expected.add('test_socket_ssl') 1142b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters 114355b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz if test_timeout.skip_expected: 114455b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz self.expected.add('test_timeout') 114555b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz 1146fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis if sys.maxint == 9223372036854775807L: 1147fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis self.expected.add('test_imageop') 1148fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis 11496afc5e02fa775517fa0b6455906a8c203baf9cd2Jack Jansen if not sys.platform in ("mac", "darwin"): 11508f40f0635b9d233cf731c442c2ee21101c0f768cAmaury Forgeot d'Arc MAC_ONLY = ["test_macos", "test_macostools", "test_aepack", 1151b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_plistlib", "test_scriptpackages", 1152b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_applesingle"] 11537035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz for skip in MAC_ONLY: 11547035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz self.expected.add(skip) 11556f5a2b52ae769ba1833aef8a52b6ab89921ee8c6Benjamin Peterson elif len(u'\0'.encode('unicode-internal')) == 4: 11566f5a2b52ae769ba1833aef8a52b6ab89921ee8c6Benjamin Peterson self.expected.add("test_macostools") 11576f5a2b52ae769ba1833aef8a52b6ab89921ee8c6Benjamin Peterson 1158ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters 1159ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters if sys.platform != "win32": 1160b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl # test_sqlite is only reliable on Windows where the library 1161b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl # is distributed with Python 11627035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz WIN_ONLY = ["test_unicode_file", "test_winreg", 1163b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_winsound", "test_startfile", 1164b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_sqlite"] 11657035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz for skip in WIN_ONLY: 11667035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz self.expected.add(skip) 1167f2715e076435b74638acb81512c2ee014f75aea2Tim Peters 1168dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon if sys.platform != 'irix': 1169b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl IRIX_ONLY = ["test_imageop", "test_al", "test_cd", "test_cl", 1170b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_gl", "test_imgfile"] 1171dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon for skip in IRIX_ONLY: 1172dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon self.expected.add(skip) 1173dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon 1174b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl if sys.platform != 'sunos5': 1175b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl self.expected.add('test_sunaudiodev') 1176b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl self.expected.add('test_nis') 1177b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl 1178d290b04ee3645f8dd2e30c329c5ead2db16ece62Steven Bethard if not sys.py3kwarning: 1179d290b04ee3645f8dd2e30c329c5ead2db16ece62Steven Bethard self.expected.add('test_py3kwarn') 1180e8e22cf3c0d9e977bc9f13cfc535c026f92bc7aaSteven Bethard 11817c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters self.valid = True 1182b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1183b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def isvalid(self): 1184b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return true iff _ExpectedSkips knows about the current platform." 1185b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.valid 1186b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1187b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def getexpected(self): 1188b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """Return set of test names we expect to skip on current platform. 1189b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1190b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.isvalid() must be true. 1191b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """ 1192b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1193b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters assert self.isvalid() 1194b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.expected 1195b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1196152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumif __name__ == '__main__': 1197408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # Remove regrtest.py's own directory from the module search path. This 1198408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # prevents relative imports from working, and relative imports will screw 1199408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # up the testing framework. E.g. if both test.test_support and 1200408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # test_support are imported, they will not contain the same globals, and 1201408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # much of the testing framework relies on the globals in the 1202408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # test.test_support module. 1203408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0]))) 1204408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw i = pathlen = len(sys.path) 1205408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw while i >= 0: 1206408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw i -= 1 1207408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if os.path.abspath(os.path.normpath(sys.path[i])) == mydir: 1208408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw del sys.path[i] 1209408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if len(sys.path) == pathlen: 1210408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw print 'Could not find %r in sys.path to remove it' % mydir 121108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw main() 1212