regrtest.py revision 5fe5cf6df20607033096c05d68cef7222a35697c
1152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum#! /usr/bin/env python
2152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
3152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum"""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
34a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum-v is incompatible with -g and does not compare test output files.
35e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
363b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw-T turns on code coverage tracing with the trace module.
373b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw
38aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-D specifies the directory where coverage files are put.
39aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald
40aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-N Put coverage files alongside modules.
41aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald
429e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-s means to run only a single test and exit.  This is useful when
439e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumdoing memory analysis on the Python interpreter (which tend to consume
449e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumtoo many resources to run the full regression test non-stop).  The
459e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile /tmp/pynexttest is read to find the next test to run.  If this
469e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile is missing, the first test_*.py file in testdir or on the command
479e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumline is used.  (actually tempfile.gettempdir() is used instead of
489e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum/tmp).
49e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
509e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-f reads the names of tests from the file given as f's argument, one
519e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumor more test names per line.  Whitespace is ignored.  Blank lines and
529e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumlines beginning with '#' are ignored.  This is especially useful for
539e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumwhittling down failures involving interactions among tests.
54c5000dfc4098f8547461e790a91536a923124261Tim Peters
550179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro-L causes the leaks(1) command to be run just before exit if it exists.
560179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaroleaks(1) is available on Mac OS X and presumably on some other
570179a18034b2316a70655d0f05bfbb20a0881f17Skip MontanaroFreeBSD-derived systems.
580179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro
5961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-R runs each test several times and examines sys.gettotalrefcount() to
6061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonsee if the test appears to be leaking references.  The argument should
6161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonbe of the form stab:run:fname where 'stab' is the number of times the
6261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsontest is run to let gettotalrefcount settle down, 'run' is the number
6361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonof times further it is run and 'fname' is the name of the file the
6461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonreports are written to.  These parameters all have defaults (5, 4 and
6561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson"reflog.txt" respectively), so the minimal invocation is '-R ::'.
6661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson
67abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters-M runs tests that require an exorbitant amount of memory. These tests
68abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstypically try to ascertain containers keep working when containing more than
6997ff04789de3e37af585648de70260a54a29bd47Armin Rigo2 billion objects, which only works on 64-bit systems. There are also some
7097ff04789de3e37af585648de70260a54a29bd47Armin Rigotests that try to exhaust the address space of the process, which only makes
7197ff04789de3e37af585648de70260a54a29bd47Armin Rigosense on 32-bit systems with at least 2Gb of memory. The passed-in memlimit,
72abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterswhich is a string in the form of '2.5Gb', determines howmuch memory the
73abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstests will limit themselves to (but they may go slightly over.) The number
74abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersshouldn't be more memory than the machine has (including swap memory). You
75abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersshould also keep in mind that swap memory is generally much, much slower
76abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersthan RAM, and setting memlimit to all available RAM or higher will heavily
77abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstax the machine. On the other hand, it is no use running these tests with a
78abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterslimit of less than 2.5Gb, and many require more than 20Gb. Tests that expect
79abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersto use more than memlimit memory will be skipped. The big-memory tests
80abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersgenerally run very, very long.
81abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters
829e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-u is used to specify which special resource intensive tests to run,
839e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumsuch as those requiring large file support or network connectivity.
849e9d4f8ed8d467d0558251f43c5decc754712d53Guido van RossumThe argument is a comma-separated list of words indicating the
859e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumresources to test.  Currently only the following are defined:
8608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
873a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake    all -       Enable all special resources.
883a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
89315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum    audio -     Tests that use the audio device.  (There are known
90315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum                cases of broken audio drivers that can crash Python or
91315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum                even the Linux kernel.)
92315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum
932158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling    curses -    Tests that use curses and will modify the terminal's
942158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling                state and output modes.
951633a2e3452b40d0e9bb1f15ab16cd6b90f15a19Tim Peters
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
1194dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred DrakeTo enable all resources except one, use '-uall,-<resource>'.  For
1204dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeexample, to run all the tests except for the bsddb tests, give the
1214dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeoption '-uall,-bsddb'.
122152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum"""
123152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
12436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport cStringIO
125152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport getopt
12636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport os
127ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaroimport random
12894a9c09e109706af64ae8796882baab2af25be2fNeal Norwitzimport re
12936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport sys
13036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport time
1313b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport traceback
13236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport warnings
133608c1d8e87b20116011fe8fce634e980e115d514Christian Heimesfrom inspect import isabstract
134dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum
135dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# I see no other way to suppress these warnings;
136dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# putting them in test_grammar.py has no effect:
13788b1defb6f770c4f74788e8296b88fc31c3936ceGuido van Rossumwarnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
138dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum                        ".*test.test_grammar$")
139c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossumif sys.maxint > 0x7fffffff:
140c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    # Also suppress them in <string>, because for 64-bit platforms,
141c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    # that's where test_grammar.py hides them.
142c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
143c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum                            "<string>")
144152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
1459df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters# Ignore ImportWarnings that only occur in the source tree,
1469df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters# (because of modules with the same name as source-directories in Modules/)
147076ba2129bb08f56c3af9397748ae1df41daba06Thomas Woutersfor mod in ("ctypes", "gzip", "zipfile", "tarfile", "encodings.zlib_codec",
148076ba2129bb08f56c3af9397748ae1df41daba06Thomas Wouters            "test.test_zipimport", "test.test_zlib", "test.test_zipfile",
149076ba2129bb08f56c3af9397748ae1df41daba06Thomas Wouters            "test.test_codecs", "test.string_tests"):
1509df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters    warnings.filterwarnings(module=".*%s$" % (mod,),
1519df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters                            action="ignore", category=ImportWarning)
1529df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters
153bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# MacOSX (a.k.a. Darwin) has a default stack size that is too small
154bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# for deeply recursive regular expressions.  We see this as crashes in
155bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# the Python test suite when running test_re.py and test_sre.py.  The
156bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# fix is to set the stack limit to 2048.
157bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# This approach may also be useful for other Unixy platforms that
158bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# suffer from small default stack limits.
159bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossumif sys.platform == 'darwin':
160bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    try:
161bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        import resource
162bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    except ImportError:
163bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        pass
164bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    else:
165bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        soft, hard = resource.getrlimit(resource.RLIMIT_STACK)
166bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        newsoft = min(hard, max(soft, 1024*2048))
167bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard))
168bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum
16904f357cffef6d764f2f0ff2671dabde75ec250d1Barry Warsawfrom test import test_support
1703a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
1717c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond HettingerRESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb',
172aaa2f1dea706daf2a5f431d97a3e3120dba652d2Hye-Shik Chang                  'decimal', 'compiler', 'subprocess', 'urlfetch')
1733a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
1743a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
17508fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''):
17608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    print __doc__
17708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    if msg: print msg
17808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    sys.exit(code)
17908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
18008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
1813b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawdef main(tests=None, testdir=None, verbose=0, quiet=False, generate=False,
1823b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw         exclude=False, single=False, randomize=False, fromfile=None,
183aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald         findleaks=False, use_resources=None, trace=False, coverdir='coverage',
18436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin         runleaks=False, huntrleaks=False, verbose2=False, print_slow=False):
1856fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """Execute a test suite.
1866fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1877e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters    This also parses command-line options and modifies its behavior
188004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake    accordingly.
1896fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1906fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    tests -- a list of strings containing test names (optional)
1916fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    testdir -- the directory in which to look for tests (optional)
1926fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1936fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    Users other than the Python test suite will certainly want to
1946fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    specify testdir; if it's omitted, the directory containing the
195004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake    Python test suite is searched for.
1966fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1976fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    If the tests argument is omitted, the tests listed on the
1986fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    command-line will be used.  If that's empty, too, then all *.py
1996fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    files beginning with test_ will be used.
200ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro
20136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin    The other default arguments (verbose, quiet, generate, exclude,
20236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin    single, randomize, findleaks, use_resources, trace, coverdir, and
20336dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin    print_slow) allow programmers calling main() directly to set the
20436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin    values that would normally be set by flags on the command line.
2056fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """
206004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake
2078dee809410e2d433bb0be5d8a1699736b90db0b5Tim Peters    test_support.record_original_stdout(sys.stdout)
208152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    try:
20936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin        opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsSrf:lu:t:TD:NLR:wM:',
210a5573b31532f59a63d9ff24e415592f60f974da4Brett Cannon                                   ['help', 'verbose', 'quiet', 'exclude',
21136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin                                    'single', 'slow', 'random', 'fromfile',
2123b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                                    'findleaks', 'use=', 'threshold=', 'trace',
213aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald                                    'coverdir=', 'nocoverdir', 'runleaks',
214abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters                                    'huntrleaks=', 'verbose2', 'memlimit=',
2153b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                                    ])
216152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    except getopt.error, msg:
21708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        usage(2, msg)
21808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
21908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    # Defaults
22008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    if use_resources is None:
22108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        use_resources = []
222152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    for o, a in opts:
22308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        if o in ('-h', '--help'):
22408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            usage(0)
22508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-v', '--verbose'):
22608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            verbose += 1
22704824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis        elif o in ('-w', '--verbose2'):
22804824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis            verbose2 = True
22908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-q', '--quiet'):
2303b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            quiet = True;
23108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            verbose = 0
23208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-x', '--exclude'):
2333b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            exclude = True
23408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-s', '--single'):
2353b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            single = True
23636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin        elif o in ('-S', '--slow'):
23736dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin            print_slow = True
23808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-r', '--randomize'):
2393b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            randomize = True
240c5000dfc4098f8547461e790a91536a923124261Tim Peters        elif o in ('-f', '--fromfile'):
241c5000dfc4098f8547461e790a91536a923124261Tim Peters            fromfile = a
24208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-l', '--findleaks'):
2433b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            findleaks = True
2440179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro        elif o in ('-L', '--runleaks'):
2450179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro            runleaks = True
2469e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum        elif o in ('-t', '--threshold'):
2479e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum            import gc
2489e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum            gc.set_threshold(int(a))
2493b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        elif o in ('-T', '--coverage'):
2503b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            trace = True
251aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald        elif o in ('-D', '--coverdir'):
252aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald            coverdir = os.path.join(os.getcwd(), a)
253aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald        elif o in ('-N', '--nocoverdir'):
254aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald            coverdir = None
25561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson        elif o in ('-R', '--huntrleaks'):
25661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            huntrleaks = a.split(':')
25761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            if len(huntrleaks) != 3:
25861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                print a, huntrleaks
25961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                usage(2, '-R takes three colon-separated arguments')
26061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            if len(huntrleaks[0]) == 0:
26161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                huntrleaks[0] = 5
26261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            else:
26361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                huntrleaks[0] = int(huntrleaks[0])
26461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            if len(huntrleaks[1]) == 0:
26561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                huntrleaks[1] = 4
26661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            else:
26761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                huntrleaks[1] = int(huntrleaks[1])
26861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            if len(huntrleaks[2]) == 0:
26961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                huntrleaks[2] = "reflog.txt"
270abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters        elif o in ('-M', '--memlimit'):
271abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters            test_support.set_memlimit(a)
27208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-u', '--use'):
273fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum            u = [x.lower() for x in a.split(',')]
274fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum            for r in u:
2753a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                if r == 'all':
2764dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    use_resources[:] = RESOURCE_NAMES
2774dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    continue
2784dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                remove = False
2794dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                if r[0] == '-':
2804dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    remove = True
2814dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    r = r[1:]
2823a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                if r not in RESOURCE_NAMES:
2833a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                    usage(1, 'Invalid -u/--use option: ' + a)
2844dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                if remove:
2854dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    if r in use_resources:
2864dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                        use_resources.remove(r)
2874dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                elif r not in use_resources:
288e41abab33b0b467acd6bdc7d73ce4b5cef4fd5bfAndrew MacIntyre                    use_resources.append(r)
289c5000dfc4098f8547461e790a91536a923124261Tim Peters    if single and fromfile:
290c5000dfc4098f8547461e790a91536a923124261Tim Peters        usage(2, "-s and -f don't go together!")
29108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
292152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    good = []
293152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    bad = []
294152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    skipped = []
2959a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake    resource_denieds = []
296e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
297d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer    if findleaks:
298a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        try:
299a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw            import gc
300a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        except ImportError:
3018a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            print 'No GC available, disabling findleaks.'
3023b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            findleaks = False
303a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        else:
3048a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # Uncomment the line below to report garbage that is not
3058a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # freeable by reference counting alone.  By default only
3068a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # garbage that is not collectable by the GC is reported.
3078a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            #gc.set_debug(gc.DEBUG_SAVEALL)
308d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            found_garbage = []
309a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw
310e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
311e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        from tempfile import gettempdir
312e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        filename = os.path.join(gettempdir(), 'pynexttest')
313e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        try:
314e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            fp = open(filename, 'r')
315fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond            next = fp.read().strip()
316e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            tests = [next]
317e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            fp.close()
318e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        except IOError:
319e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            pass
320c5000dfc4098f8547461e790a91536a923124261Tim Peters
321c5000dfc4098f8547461e790a91536a923124261Tim Peters    if fromfile:
322c5000dfc4098f8547461e790a91536a923124261Tim Peters        tests = []
323c5000dfc4098f8547461e790a91536a923124261Tim Peters        fp = open(fromfile)
324c5000dfc4098f8547461e790a91536a923124261Tim Peters        for line in fp:
325c5000dfc4098f8547461e790a91536a923124261Tim Peters            guts = line.split() # assuming no test has whitespace in its name
326c5000dfc4098f8547461e790a91536a923124261Tim Peters            if guts and not guts[0].startswith('#'):
327c5000dfc4098f8547461e790a91536a923124261Tim Peters                tests.extend(guts)
328c5000dfc4098f8547461e790a91536a923124261Tim Peters        fp.close()
329c5000dfc4098f8547461e790a91536a923124261Tim Peters
330c5000dfc4098f8547461e790a91536a923124261Tim Peters    # Strip .py extensions.
331c5000dfc4098f8547461e790a91536a923124261Tim Peters    if args:
332c5000dfc4098f8547461e790a91536a923124261Tim Peters        args = map(removepy, args)
333c5000dfc4098f8547461e790a91536a923124261Tim Peters    if tests:
334c5000dfc4098f8547461e790a91536a923124261Tim Peters        tests = map(removepy, tests)
335c5000dfc4098f8547461e790a91536a923124261Tim Peters
3366c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum    stdtests = STDTESTS[:]
3376c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum    nottests = NOTTESTS[:]
338152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if exclude:
3396c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum        for arg in args:
3406c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum            if arg in stdtests:
3416c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum                stdtests.remove(arg)
3426c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum        nottests[:0] = args
34341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        args = []
344747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum    tests = tests or args or findtests(testdir, stdtests, nottests)
345e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
346e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        tests = tests[:1]
347ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro    if randomize:
348ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro        random.shuffle(tests)
3493b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    if trace:
3503b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        import trace
3513b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix],
3523b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                             trace=False, count=True)
35336dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin    test_times = []
35441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum    test_support.verbose = verbose      # Tell tests to be moderately quiet
35508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    test_support.use_resources = use_resources
3565796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum    save_modules = sys.modules.keys()
357152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    for test in tests:
35841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if not quiet:
35941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            print test
3603cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
3613b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        if trace:
3623b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            # If we're tracing code coverage, then we don't exit with status
3633b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            # if on a false return value from main.
36436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin            tracer.runctx('runtest(test, generate, verbose, quiet,'
36536dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin                          '        test_times, testdir)',
3663b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                          globals=globals(), locals=vars())
36741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        else:
36814ca327f998511da5e89f819204c54fa582dd696Neal Norwitz            try:
36936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin                ok = runtest(test, generate, verbose, quiet, test_times,
37036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin                             testdir, huntrleaks)
37114ca327f998511da5e89f819204c54fa582dd696Neal Norwitz            except KeyboardInterrupt:
37214ca327f998511da5e89f819204c54fa582dd696Neal Norwitz                # print a newline separate from the ^C
37314ca327f998511da5e89f819204c54fa582dd696Neal Norwitz                print
37414ca327f998511da5e89f819204c54fa582dd696Neal Norwitz                break
37514ca327f998511da5e89f819204c54fa582dd696Neal Norwitz            except:
37614ca327f998511da5e89f819204c54fa582dd696Neal Norwitz                raise
3773b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            if ok > 0:
3783b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                good.append(test)
3793b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            elif ok == 0:
3803b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                bad.append(test)
3813b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            else:
3823b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                skipped.append(test)
3833b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                if ok == -2:
3843b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                    resource_denieds.append(test)
385d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer        if findleaks:
386d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            gc.collect()
387d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            if gc.garbage:
3888a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                print "Warning: test created", len(gc.garbage),
3898a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                print "uncollectable object(s)."
3908a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                # move the uncollectable objects somewhere so we don't see
3918a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                # them again
392d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer                found_garbage.extend(gc.garbage)
393d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer                del gc.garbage[:]
3945796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum        # Unload the newly imported modules (best effort finalization)
3955796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum        for module in sys.modules.keys():
39651931144427faa001a6db3cfc37380526be256b6Guido van Rossum            if module not in save_modules and module.startswith("test."):
3975796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum                test_support.unload(module)
3987a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton
3997a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    # The lists won't be sorted if running with -r
4007a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    good.sort()
4017a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    bad.sort()
4027a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    skipped.sort()
403e0c446bb4ad67294f42d4cb53b4ff28413bd8ddeTim Peters
404152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if good and not quiet:
40541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if not bad and not skipped and len(good) > 1:
40641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            print "All",
40741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        print count(len(good), "test"), "OK."
40836dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin    if print_slow:
40936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin        test_times.sort(reverse=True)
41036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin        print "10 slowest tests:"
41136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin        for time, test in test_times[:10]:
41236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin            print "%s: %.1fs" % (test, time)
413152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if bad:
414a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        print count(len(bad), "test"), "failed:"
415a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        printlist(bad)
416152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if skipped and not quiet:
417a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        print count(len(skipped), "test"), "skipped:"
418a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        printlist(skipped)
419e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
420b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        e = _ExpectedSkips()
421a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters        plat = sys.platform
422b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        if e.isvalid():
423a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            surprise = set(skipped) - e.getexpected() - set(resource_denieds)
424b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            if surprise:
425b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters                print count(len(surprise), "skip"), \
426a45da92484ceececf1cf32b4dfb16004945b001eTim Peters                      "unexpected on", plat + ":"
427a45da92484ceececf1cf32b4dfb16004945b001eTim Peters                printlist(surprise)
428b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            else:
429b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters                print "Those skips are all expected on", plat + "."
430b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        else:
431b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            print "Ask someone to teach regrtest.py about which tests are"
432b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            print "expected to get skipped on", plat + "."
433b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
43404824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis    if verbose2 and bad:
43504824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis        print "Re-running failed tests in verbose mode"
43604824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis        for test in bad:
437922dd7d49da75b07e27f917db0166f67bdbef3d3Tim Peters            print "Re-running test %r in verbose mode" % test
438922dd7d49da75b07e27f917db0166f67bdbef3d3Tim Peters            sys.stdout.flush()
43904824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis            try:
4405fe5cf6df20607033096c05d68cef7222a35697cNeal Norwitz                test_support.verbose = True
4415fe5cf6df20607033096c05d68cef7222a35697cNeal Norwitz                ok = runtest(test, generate, True, quiet, test_times, testdir,
44204824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                             huntrleaks)
44304824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis            except KeyboardInterrupt:
44404824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                # print a newline separate from the ^C
44504824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                print
44604824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                break
44704824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis            except:
44804824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                raise
44904824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis
450e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
451e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        alltests = findtests(testdir, stdtests, nottests)
452e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        for i in range(len(alltests)):
453e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            if tests[0] == alltests[i]:
454e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                if i == len(alltests) - 1:
455e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    os.unlink(filename)
456e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                else:
457e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp = open(filename, 'w')
458e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp.write(alltests[i+1] + '\n')
459e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp.close()
460e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                break
461e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        else:
462e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            os.unlink(filename)
463e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
4643b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    if trace:
4653b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        r = tracer.results()
4663b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        r.write_results(show_missing=True, summary=True, coverdir=coverdir)
4673b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw
4680179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro    if runleaks:
4690179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro        os.system("leaks %d" % os.getpid())
4700179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro
4715943b4ac1067e5011b66697396d5df93b5ef9af0Tim Peters    sys.exit(len(bad) > 0)
47208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
473152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
4746fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [
475152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_grammar',
476152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_opcodes',
477f567ca3e1ae851ea6e7418da3df47e034841a08dCollin Winter    'test_dict',
478152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_builtin',
479152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_exceptions',
480152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_types',
4815545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter    'test_unittest',
4825545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter    'test_doctest',
4835545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter    'test_doctest2',
484152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum   ]
485152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
4866fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [
487152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_support',
48862e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton    'test_future1',
48962e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton    'test_future2',
4908471a35febdbfbfab51b9d4b5fe51694fe6ca536Jeremy Hylton    'test_future3',
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
50636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskindef runtest(test, generate, 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:
52536dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin        return runtest_inner(test, generate, verbose, quiet, test_times,
52636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin                             testdir, huntrleaks)
527e55848695347c67effeb08aedcf2ce3d256524cdTim Peters    finally:
528e55848695347c67effeb08aedcf2ce3d256524cdTim Peters        cleanup_test_droppings(test, verbose)
529e55848695347c67effeb08aedcf2ce3d256524cdTim Peters
53036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskindef runtest_inner(test, generate, 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:
53641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        cfp = None
5370fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    else:
53874e67661a69ddb43a21a486c66965a052540cdd0Raymond Hettinger        cfp = cStringIO.StringIO()
53906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters
540152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    try:
541342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters        save_stdout = sys.stdout
54241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        try:
54341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            if cfp:
54441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum                sys.stdout = cfp
54541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum                print test              # Output file starts with test name
546408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            if test.startswith('test.'):
547408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                abstest = test
548408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            else:
549408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                # Always import it from the test package
550408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                abstest = 'test.' + test
55136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin            start_time = time.time()
552408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            the_package = __import__(abstest, globals(), locals(), [])
553408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            the_module = getattr(the_package, test)
554980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl            # Old tests run to completion simply as a side-effect of
555980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl            # being imported.  For tests based on unittest or doctest,
556980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl            # explicitly invoke their test_main() function (if it exists).
557d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            indirect_test = getattr(the_module, "test_main", None)
558d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            if indirect_test is not None:
559d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters                indirect_test()
56061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            if huntrleaks:
56106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters                dash_R(the_module, test, indirect_test, huntrleaks)
56236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin            test_time = time.time() - start_time
56336dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin            test_times.append((test_time, test))
56441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        finally:
565342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters            sys.stdout = save_stdout
5669a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake    except test_support.ResourceDenied, msg:
5679a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake        if not quiet:
5689a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake            print test, "skipped --", msg
5699a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake            sys.stdout.flush()
5709a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake        return -2
5713af826ebca80f8a6c782fb590c77ac210ae9e22dThomas Wouters    except (ImportError, test_support.TestSkipped), msg:
572f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick        if not quiet:
573de4742b87f7775fc3d9fa76cd640e7cdd5ef69a2Fred Drake            print test, "skipped --", msg
5743cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
57541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return -1
576fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake    except KeyboardInterrupt:
577fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake        raise
578152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    except test_support.TestFailed, msg:
57941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        print "test", test, "failed --", msg
5803cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
58141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return 0
5829e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum    except:
58341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        type, value = sys.exc_info()[:2]
58427c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake        print "test", test, "crashed --", str(type) + ":", value
5853cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
58641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if verbose:
58741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            traceback.print_exc(file=sys.stdout)
5883cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
58941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return 0
590152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
5910fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        if not cfp:
5920fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            return 1
5930fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        output = cfp.getvalue()
594a5573b31532f59a63d9ff24e415592f60f974da4Brett Cannon        expected = test + "\n"
59561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson        if output == expected or huntrleaks:
5960fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            return 1
5970fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        print "test", test, "produced unexpected output:"
5983cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
5990fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        reportdiff(expected, output)
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.
63664c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum    import copy_reg, _abcoll
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[:]
64406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    ps = copy_reg.dispatch_table.copy()
64506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    pic = sys.path_importer_cache.copy()
64664c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum    abcs = {}
64764c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum    for abc in [getattr(_abcoll, a) for a in _abcoll.__all__]:
648608c1d8e87b20116011fe8fce634e980e115d514Christian Heimes        if not isabstract(abc):
6496b29dd05c8fff4fc69ab4d68baef86fb7e91548cChristian Heimes            continue
65064c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum        for obj in abc.__subclasses__() + [abc]:
65164c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum            abcs[obj] = obj._abc_registry.copy()
65264c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum
65306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    if indirect_test:
65406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters        def run_the_test():
65506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters            indirect_test()
65606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    else:
65706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters        def run_the_test():
65806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters            reload(the_module)
65906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters
66006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    deltas = []
66106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    nwarmup, ntracked, fname = huntrleaks
66206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    repcount = nwarmup + ntracked
66306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    print >> sys.stderr, "beginning", repcount, "repetitions"
66406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    print >> sys.stderr, ("1234567890"*(repcount//10 + 1))[:repcount]
66564c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum    dash_R_cleanup(fs, ps, pic, abcs)
66606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    for i in range(repcount):
66706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters        rc = sys.gettotalrefcount()
66806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters        run_the_test()
66906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters        sys.stderr.write('.')
67064c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum        dash_R_cleanup(fs, ps, pic, abcs)
67106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters        if i >= nwarmup:
67206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters            deltas.append(sys.gettotalrefcount() - rc - 2)
67306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    print >> sys.stderr
67406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    if any(deltas):
675d9841039dbd0e37746d46f6e46ce1d82b85a21b3Neal Norwitz        msg = '%s leaked %s references, sum=%s' % (test, deltas, sum(deltas))
676d9841039dbd0e37746d46f6e46ce1d82b85a21b3Neal Norwitz        print >> sys.stderr, msg
67706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters        refrep = open(fname, "a")
678d9841039dbd0e37746d46f6e46ce1d82b85a21b3Neal Norwitz        print >> refrep, msg
67906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters        refrep.close()
68006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters
68164c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossumdef dash_R_cleanup(fs, ps, pic, abcs):
68206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    import gc, copy_reg
683d3c52de557546cf2381e27b7fc9b86676fec9a9dNeal Norwitz    import _strptime, linecache, dircache
68406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    import urlparse, urllib, urllib2, mimetypes, doctest
68564c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum    import struct, filecmp, _abcoll
68606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    from distutils.dir_util import _path_created
68706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters
68806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    # Restore some original values.
68906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    warnings.filters[:] = fs
69006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    copy_reg.dispatch_table.clear()
69106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    copy_reg.dispatch_table.update(ps)
69206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    sys.path_importer_cache.clear()
69306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    sys.path_importer_cache.update(pic)
69406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters
695908caac52e8e62baa1ee54e4e650e1cd3ac37907Christian Heimes    # clear type cache
696422051a3675271e179995ad4a0f056ff94395d55Christian Heimes    sys._clear_type_cache()
697908caac52e8e62baa1ee54e4e650e1cd3ac37907Christian Heimes
69864c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum    # Clear ABC registries, restoring previously saved ABC registries.
69964c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum    for abc in [getattr(_abcoll, a) for a in _abcoll.__all__]:
700608c1d8e87b20116011fe8fce634e980e115d514Christian Heimes        if not isabstract(abc):
7016b29dd05c8fff4fc69ab4d68baef86fb7e91548cChristian Heimes            continue
70264c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum        for obj in abc.__subclasses__() + [abc]:
70364c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum            obj._abc_registry = abcs.get(obj, {}).copy()
70464c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum            obj._abc_cache.clear()
70564c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum            obj._abc_negative_cache.clear()
70664c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum
70706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    # Clear assorted module caches.
70806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    _path_created.clear()
70906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    re.purge()
71006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    _strptime._regex_cache.clear()
71106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    urlparse.clear_cache()
71206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    urllib.urlcleanup()
71306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    urllib2.install_opener(None)
71406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    dircache.reset()
71506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    linecache.clearcache()
71606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    mimetypes._default_mime_types()
717c27d655c00ec08f44abea646ae06456cbcca84b6Tim Peters    filecmp._cache.clear()
71876d19f68e4c824bbcba890d924f20a6133ee0326Christian Heimes    struct._clearcache()
71906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    doctest.master = None
72006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters
72106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    # Collect cyclic trash.
72206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters    gc.collect()
72306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters
7240fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossumdef reportdiff(expected, output):
7250fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    import difflib
726c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    print "*" * 70
727c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    a = expected.splitlines(1)
728c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    b = output.splitlines(1)
729cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    sm = difflib.SequenceMatcher(a=a, b=b)
730cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    tuples = sm.get_opcodes()
731c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
732cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    def pair(x0, x1):
733c377b16d12ba325bb108eca575447d66f19294c0Tim Peters        # x0:x1 are 0-based slice indices; convert to 1-based line indices.
734cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        x0 += 1
735cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        if x0 >= x1:
736c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            return "line " + str(x0)
737cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        else:
738c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            return "lines %d-%d" % (x0, x1)
739c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
740cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    for op, a0, a1, b0, b1 in tuples:
741cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        if op == 'equal':
742cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            pass
743c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
744cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'delete':
745c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "***", pair(a0, a1), "of expected output missing:"
746cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            for line in a[a0:a1]:
747c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print "-", line,
748c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
749cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'replace':
750c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "*** mismatch between", pair(a0, a1), "of expected", \
751c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                  "output and", pair(b0, b1), "of actual output:"
752c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            for line in difflib.ndiff(a[a0:a1], b[b0:b1]):
753c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print line,
754c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
755cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'insert':
756c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "***", pair(b0, b1), "of actual output doesn't appear", \
757c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                  "in expected output after line", str(a1)+":"
758cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            for line in b[b0:b1]:
759c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print "+", line,
760c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
761cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        else:
762cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1)
763c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
7640fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    print "*" * 70
765152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
766152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir():
767152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if __name__ == '__main__':
76841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        file = sys.argv[0]
769152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
77041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        file = __file__
771152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    testdir = os.path.dirname(file) or os.curdir
772152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    return testdir
773152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
774c5000dfc4098f8547461e790a91536a923124261Tim Petersdef removepy(name):
775c5000dfc4098f8547461e790a91536a923124261Tim Peters    if name.endswith(os.extsep + "py"):
776c5000dfc4098f8547461e790a91536a923124261Tim Peters        name = name[:-3]
777c5000dfc4098f8547461e790a91536a923124261Tim Peters    return name
778c5000dfc4098f8547461e790a91536a923124261Tim Peters
779152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word):
780152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if n == 1:
78141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return "%d %s" % (n, word)
782152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
78341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return "%d %ss" % (n, word)
784152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
785a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4):
7867c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters    """Print the elements of iterable x to stdout.
787a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
788a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    Optional arg width (default 70) is the maximum line length.
789a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    Optional arg indent (default 4) is the number of blanks with which to
790a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    begin each line.
791a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    """
792a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
793ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    from textwrap import fill
794ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    blanks = ' ' * indent
795ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    print fill(' '.join(map(str, x)), width,
796ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters               initial_indent=blanks, subsequent_indent=blanks)
797a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
798de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# Map sys.platform to a string containing the basenames of tests
799de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# expected to be skipped on that platform.
8002a182dbf3f2520ad753792068391775d102b13dfTim Peters#
8012a182dbf3f2520ad753792068391775d102b13dfTim Peters# Special cases:
8022a182dbf3f2520ad753792068391775d102b13dfTim Peters#     test_pep277
8032a182dbf3f2520ad753792068391775d102b13dfTim Peters#         The _ExpectedSkips constructor adds this to the set of expected
8042a182dbf3f2520ad753792068391775d102b13dfTim Peters#         skips if not os.path.supports_unicode_filenames.
805b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#     test_socket_ssl
806b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#         Controlled by test_socket_ssl.skip_expected.  Requires the network
807b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#         resource, and a socket module with ssl support.
80855b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#     test_timeout
80955b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#         Controlled by test_timeout.skip_expected.  Requires the network
81055b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#         resource and a socket module.
811b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl#
812b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl# Tests that are expected to be skipped everywhere except on one platform
813b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl# are also handled separately.
814de14a30d1d70073d36f207fe432e4adad5178399Tim Peters
815f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = {
816f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum    'win32':
817f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """
818c7c516aa5140d255f18ffd2e8569434f0904f5dbTim Peters        test__locale
819823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
82078e35f931128d017d5955841eac8c397ff32595cTim Peters        test_bsddb3
821f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_commands
822f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_crypt
823d703057752d52cef6082a920879a0b62cdeffacaTim Peters        test_curses
824f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dbm
825f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dl
826f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_fcntl
827f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_fork1
828f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_gdbm
829f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_grp
830fd8e6e599051de07cdb8e9abc9dbadf37c5fca0cTim Peters        test_ioctl
831f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_largefile
832f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_mhlib
833f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_openpty
834efc4b121694888e00072f5a079de5496afecb05aTim Peters        test_ossaudiodev
83527d9ee32abac7a580b1ffc980522535bdd20f09bGeorg Brandl        test_pipes
836f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_poll
837003eb3088283927e3155f2e2317d3d516edd9645Tim Peters        test_posix
838f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_pty
839f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_pwd
8401e33ffa5c719ec611e182681c4a5f2ceb62a08f5Tim Peters        test_resource
841f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_signal
842cea2cc4a21e7e2ba84f6dc11682821e502bd1f5fTim Peters        test_threadsignals
843f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_timing
844b84de02f75c906fbcf519b4c89b9dbdd18837276Tim Peters        test_wait3
845b84de02f75c906fbcf519b4c89b9dbdd18837276Tim Peters        test_wait4
846f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """,
847f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum    'linux2':
848f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """
849823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
850f66dacdb017c7481c3ba4f0743d5446146de33c8Guido van Rossum        test_curses
851f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dl
852f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_largefile
8534507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum        test_ossaudiodev
854f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """,
85549a806edbb298f2a5be3598bd80c21392cb6968dJack Jansen   'mac':
856aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        """
857679751455798fab6425fda749a19e783e58b210eJack Jansen        test_atexit
858aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_bsddb
859823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
860679751455798fab6425fda749a19e783e58b210eJack Jansen        test_bsddb3
861679751455798fab6425fda749a19e783e58b210eJack Jansen        test_bz2
862aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_commands
863aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_crypt
864b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen        test_curses
865aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_dbm
866aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_dl
867aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_fcntl
868aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_fork1
869aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_grp
870c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen        test_ioctl
871aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_largefile
872aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_locale
873aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_mmap
874aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_openpty
875679751455798fab6425fda749a19e783e58b210eJack Jansen        test_ossaudiodev
876aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_poll
877679751455798fab6425fda749a19e783e58b210eJack Jansen        test_popen
878aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_popen2
8795bb97e66dcbb110877ac17209c7d2641db6f6006Jack Jansen        test_posix
880aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_pty
881aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_pwd
882679751455798fab6425fda749a19e783e58b210eJack Jansen        test_resource
883aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_signal
884aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_sundry
885c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen        test_tarfile
886aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_timing
887aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        """,
88821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'unixware7':
8890ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        """
8900ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_bsddb
891823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
8920ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_dl
8930ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_largefile
8940ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_minidom
8950ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_openpty
8960ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_pyexpat
8970ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_sax
8980ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_sundry
8990ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        """,
90021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'openunix8':
90121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """
90221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_bsddb
903823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
90421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_dl
90521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_largefile
90621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_minidom
90721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_openpty
90821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_pyexpat
90921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sax
91021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sundry
91121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """,
91221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'sco_sv3':
91321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """
91421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_asynchat
91521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_bsddb
916823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
91721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_dl
91821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_fork1
91921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_gettext
92021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_largefile
92121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_locale
92221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_minidom
92321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_openpty
92421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_pyexpat
92521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_queue
92621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sax
92721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sundry
92821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_thread
92921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threaded_import
93021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threadedtempfile
93121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threading
93221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """,
933e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum    'riscos':
934e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        """
935e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_asynchat
936a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis        test_atexit
937e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_bsddb
938823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
939a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis        test_bsddb3
940e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_commands
941e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_crypt
942e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_dbm
943e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_dl
944e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_fcntl
945e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_fork1
946e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_gdbm
947e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_grp
948e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_largefile
949e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_locale
950e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_mmap
951e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_openpty
952e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_poll
953e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_popen2
954e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_pty
955e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_pwd
956e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_strop
957e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_sundry
958e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_thread
959e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threaded_import
960e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threadedtempfile
961e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threading
962e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_timing
963e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        """,
9648a97f4a380a7a356730e48406f8269c3efe5e6ebJack Jansen    'darwin':
965398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        """
9662bfb94c871caeae622174485264f407d9df354b9Brett Cannon        test__locale
967acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_bsddb
9689d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum        test_bsddb3
969398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_curses
970398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_gdbm
971398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_largefile
972acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_locale
973398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_minidom
974acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_ossaudiodev
975398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_poll
976398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        """,
97711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum    'sunos5':
97811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        """
97911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_bsddb
980823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
98111c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_curses
98211c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_dbm
98311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_gdbm
98411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_gzip
98511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_openpty
98611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_zipfile
98711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_zlib
988ed375e18d10d37bfea1769aa1fe69795df6cbc10Jeremy Hylton        """,
989b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro    'hp-ux11':
990b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        """
991b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_bsddb
992823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
993b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_curses
994b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_dl
995b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_gdbm
996b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_gzip
997b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_largefile
998b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_locale
999b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_minidom
1000b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_openpty
1001b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_pyexpat
1002b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_sax
1003b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_zipfile
1004b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_zlib
1005b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        """,
1006f90ae20354ceb501f0ba0b6459df17f1a8005a47Martin v. Löwis    'atheos':
1007c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        """
1008823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
1009c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_curses
1010c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_dl
1011c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_gdbm
1012c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_largefile
1013c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_locale
1014c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_mhlib
1015c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_mmap
1016c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_poll
1017c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_popen2
1018c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_resource
1019c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        """,
102025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler    'cygwin':
102125115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        """
1022823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
1023b0f89e05ad9aaf229033bbc81be43c1f826e3930Tim Peters        test_bsddb3
102425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_curses
102525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_dbm
1026c23f39ca9dc540ace879fcf9746254d94293b86fJason Tishler        test_ioctl
102725115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_largefile
102825115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_locale
10295c4ded2c3b59aa134b82ab17cdfe7ab633194ca6Jason Tishler        test_ossaudiodev
103025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_socketserver
103125115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        """,
1032fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre    'os2emx':
1033fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        """
1034fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_audioop
1035823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
1036fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_bsddb3
1037fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_commands
1038fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_curses
1039fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_dl
1040fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_largefile
1041fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_mhlib
1042fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_mmap
1043fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_openpty
1044fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_ossaudiodev
1045fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_pty
1046fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_resource
1047fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_signal
1048fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        """,
1049944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum    'freebsd4':
1050944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        """
1051944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_bsddb
1052944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_bsddb3
1053f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang        test_gdbm
1054944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_locale
1055944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_ossaudiodev
1056944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_pep277
1057f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang        test_pty
1058944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_socket_ssl
1059944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_socketserver
1060f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang        test_tcl
1061944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_timeout
1062944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_urllibnet
106356f88113b7272be8403f9b722c943e679e23d362Martin v. Löwis        """,
10648ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum    'aix5':
10658ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        """
10668ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_bsddb
10678ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_bsddb185
10688ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_bsddb3
10698ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_bz2
10708ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_dl
10718ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_gdbm
10728ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_gzip
10738ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_ossaudiodev
10748ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_tcl
10758ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_zipimport
10768ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_zlib
10778ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        """,
10786da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis    'openbsd3':
10796da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        """
10806da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        test_bsddb
10816da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        test_bsddb3
10826da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        test_ctypes
10836da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        test_dl
10846da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        test_gdbm
10856da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        test_locale
10866da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        test_normalization
10876da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        test_ossaudiodev
10886da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        test_pep277
10896da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        test_tcl
10906da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis        """,
10910870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl    'netbsd3':
10920870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        """
10930870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        test_bsddb
10940870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        test_bsddb185
10950870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        test_bsddb3
10960870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        test_ctypes
10970870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        test_curses
10980870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        test_dl
10990870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        test_gdbm
11000870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        test_locale
11010870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        test_ossaudiodev
11020870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        test_pep277
11030870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        test_tcl
11040870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl        """,
1105f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum}
110632d0c1b458bbdda8d8895f5b5bedfb4644f839e7Martin v. Löwis_expectations['freebsd5'] = _expectations['freebsd4']
1107f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang_expectations['freebsd6'] = _expectations['freebsd4']
11084e422817eb1bc5a6a42365001ad45683ae07e559Hye-Shik Chang_expectations['freebsd7'] = _expectations['freebsd4']
1109ea684743daa0c198ab327d07832eca48a9578c68Hye-Shik Chang_expectations['freebsd8'] = _expectations['freebsd4']
1110f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum
1111b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips:
1112b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters    def __init__(self):
11132a182dbf3f2520ad753792068391775d102b13dfTim Peters        import os.path
111455b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz        from test import test_timeout
11151b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
11167c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters        self.valid = False
1117de14a30d1d70073d36f207fe432e4adad5178399Tim Peters        if sys.platform in _expectations:
1118f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum            s = _expectations[sys.platform]
1119a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.expected = set(s.split())
11201b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
1121b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl            # expected to be skipped on every platform, even Linux
1122b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl            self.expected.add('test_linuxaudiodev')
1123b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl
11242a182dbf3f2520ad753792068391775d102b13dfTim Peters            if not os.path.supports_unicode_filenames:
11252a182dbf3f2520ad753792068391775d102b13dfTim Peters                self.expected.add('test_pep277')
11261b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
112798d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen            try:
112898d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen                from test import test_socket_ssl
112998d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen            except ImportError:
113098d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen                pass
113198d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen            else:
113298d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen                if test_socket_ssl.skip_expected:
113398d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen                    self.expected.add('test_socket_ssl')
1134b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters
113555b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz            if test_timeout.skip_expected:
113655b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz                self.expected.add('test_timeout')
113755b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz
1138fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis            if sys.maxint == 9223372036854775807L:
1139fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis                self.expected.add('test_imageop')
1140fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis
11416afc5e02fa775517fa0b6455906a8c203baf9cd2Jack Jansen            if not sys.platform in ("mac", "darwin"):
11425e2635103c34ca1d4226f64c84c6bdf54d528d75Brett Cannon                MAC_ONLY = ["test_macostools", "test_aepack",
1143b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl                            "test_plistlib", "test_scriptpackages",
1144b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl                            "test_applesingle"]
11457035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                for skip in MAC_ONLY:
11467035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                    self.expected.add(skip)
1147ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters
1148ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters            if sys.platform != "win32":
1149b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl                # test_sqlite is only reliable on Windows where the library
1150b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl                # is distributed with Python
11517035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                WIN_ONLY = ["test_unicode_file", "test_winreg",
1152b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl                            "test_winsound", "test_startfile",
1153b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl                            "test_sqlite"]
11547035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                for skip in WIN_ONLY:
11557035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                    self.expected.add(skip)
1156f2715e076435b74638acb81512c2ee014f75aea2Tim Peters
1157dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon            if sys.platform != 'irix':
1158b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl                IRIX_ONLY = ["test_imageop", "test_al", "test_cd", "test_cl",
1159b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl                             "test_gl", "test_imgfile"]
1160dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon                for skip in IRIX_ONLY:
1161dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon                    self.expected.add(skip)
1162dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon
1163b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl            if sys.platform != 'sunos5':
1164b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl                self.expected.add('test_sunaudiodev')
1165b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl                self.expected.add('test_nis')
1166b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl
11677c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters            self.valid = True
1168b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1169b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters    def isvalid(self):
1170b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        "Return true iff _ExpectedSkips knows about the current platform."
1171b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        return self.valid
1172b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1173b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters    def getexpected(self):
1174b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        """Return set of test names we expect to skip on current platform.
1175b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1176b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        self.isvalid() must be true.
1177b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        """
1178b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1179b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        assert self.isvalid()
1180b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        return self.expected
1181b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1182152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumif __name__ == '__main__':
1183408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # Remove regrtest.py's own directory from the module search path.  This
1184408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # prevents relative imports from working, and relative imports will screw
1185408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # up the testing framework.  E.g. if both test.test_support and
1186408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # test_support are imported, they will not contain the same globals, and
1187408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # much of the testing framework relies on the globals in the
1188408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # test.test_support module.
1189408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0])))
1190408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    i = pathlen = len(sys.path)
1191408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    while i >= 0:
1192408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw        i -= 1
1193408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw        if os.path.abspath(os.path.normpath(sys.path[i])) == mydir:
1194408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            del sys.path[i]
1195408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    if len(sys.path) == pathlen:
1196408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw        print 'Could not find %r in sys.path to remove it' % mydir
119708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    main()
1198