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