regrtest.py revision 922dd7d49da75b07e27f917db0166f67bdbef3d3
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-g: generate   -- write the output file for a test instead of comparing it
1561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-x: exclude    -- arguments are tests to *exclude*
1661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-s: single     -- run only a single test (see below)
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)
28152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
29152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf non-option arguments are present, they are names for tests to run,
30152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumunless -x is given, in which case they are names for tests not to run.
31152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf no test names are given, all tests are run.
32f58ed2596706b97c16174a839c1ed6f6b1f87fa6Guido van Rossum
33a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum-v is incompatible with -g and does not compare test output files.
34e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
353b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw-T turns on code coverage tracing with the trace module.
363b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw
37aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-D specifies the directory where coverage files are put.
38aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald
39aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-N Put coverage files alongside modules.
40aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald
419e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-s means to run only a single test and exit.  This is useful when
429e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumdoing memory analysis on the Python interpreter (which tend to consume
439e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumtoo many resources to run the full regression test non-stop).  The
449e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile /tmp/pynexttest is read to find the next test to run.  If this
459e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile is missing, the first test_*.py file in testdir or on the command
469e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumline is used.  (actually tempfile.gettempdir() is used instead of
479e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum/tmp).
48e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
499e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-f reads the names of tests from the file given as f's argument, one
509e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumor more test names per line.  Whitespace is ignored.  Blank lines and
519e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumlines beginning with '#' are ignored.  This is especially useful for
529e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumwhittling down failures involving interactions among tests.
53c5000dfc4098f8547461e790a91536a923124261Tim Peters
540179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro-L causes the leaks(1) command to be run just before exit if it exists.
550179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaroleaks(1) is available on Mac OS X and presumably on some other
560179a18034b2316a70655d0f05bfbb20a0881f17Skip MontanaroFreeBSD-derived systems.
570179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro
5861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-R runs each test several times and examines sys.gettotalrefcount() to
5961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonsee if the test appears to be leaking references.  The argument should
6061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonbe of the form stab:run:fname where 'stab' is the number of times the
6161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsontest is run to let gettotalrefcount settle down, 'run' is the number
6261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonof times further it is run and 'fname' is the name of the file the
6361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonreports are written to.  These parameters all have defaults (5, 4 and
6461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson"reflog.txt" respectively), so the minimal invocation is '-R ::'.
6561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson
669e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-u is used to specify which special resource intensive tests to run,
679e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumsuch as those requiring large file support or network connectivity.
689e9d4f8ed8d467d0558251f43c5decc754712d53Guido van RossumThe argument is a comma-separated list of words indicating the
699e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumresources to test.  Currently only the following are defined:
7008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
713a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake    all -       Enable all special resources.
723a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
73315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum    audio -     Tests that use the audio device.  (There are known
74315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum                cases of broken audio drivers that can crash Python or
75315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum                even the Linux kernel.)
76315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum
772158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling    curses -    Tests that use curses and will modify the terminal's
782158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling                state and output modes.
791633a2e3452b40d0e9bb1f15ab16cd6b90f15a19Tim Peters
809e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum    largefile - It is okay to run some test that may create huge
819e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum                files.  These tests can take a long time and may
829e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum                consume >2GB of disk space temporarily.
8308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
849e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum    network -   It is okay to run tests that use external network
859e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum                resource, e.g. testing SSL support for sockets.
861c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis
871c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis    bsddb -     It is okay to run the bsddb testsuite, which takes
881c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis                a long time to complete.
894dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake
907c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger    decimal -   Test the decimal module against a large suite that
917c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger                verifies compliance with standards.
927c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger
934336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton    compiler -  Test the compiler package by compiling all the source
944336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton                in the standard library and test suite.  This takes
9568c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger                a long time.  Enabling this resource also allows
9668c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger                test_tokenize to verify round-trip lexing on every
9768c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger                file in the test library.
984336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton
99eba28bea9b8ef7df010e65c630b8c0f7009c6005Tim Peters    subprocess  Run all tests for the subprocess module.
100f7f1bb7ff5039626c856efafb68a4d338ab96642Peter Astrand
101aaa2f1dea706daf2a5f431d97a3e3120dba652d2Hye-Shik Chang    urlfetch -  It is okay to download files required on testing.
102aaa2f1dea706daf2a5f431d97a3e3120dba652d2Hye-Shik Chang
1034dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred DrakeTo enable all resources except one, use '-uall,-<resource>'.  For
1044dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeexample, to run all the tests except for the bsddb tests, give the
1054dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeoption '-uall,-bsddb'.
106152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum"""
107152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
108152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport os
1093b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport sys
110152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport getopt
111ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaroimport random
112dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossumimport warnings
11361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonimport sre
1143b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport cStringIO
1153b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport traceback
116dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum
117dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# I see no other way to suppress these warnings;
118dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# putting them in test_grammar.py has no effect:
11988b1defb6f770c4f74788e8296b88fc31c3936ceGuido van Rossumwarnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
120dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum                        ".*test.test_grammar$")
121c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossumif sys.maxint > 0x7fffffff:
122c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    # Also suppress them in <string>, because for 64-bit platforms,
123c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    # that's where test_grammar.py hides them.
124c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
125c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum                            "<string>")
126152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
127bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# MacOSX (a.k.a. Darwin) has a default stack size that is too small
128bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# for deeply recursive regular expressions.  We see this as crashes in
129bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# the Python test suite when running test_re.py and test_sre.py.  The
130bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# fix is to set the stack limit to 2048.
131bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# This approach may also be useful for other Unixy platforms that
132bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# suffer from small default stack limits.
133bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossumif sys.platform == 'darwin':
134bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    try:
135bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        import resource
136bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    except ImportError:
137bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        pass
138bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    else:
139bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        soft, hard = resource.getrlimit(resource.RLIMIT_STACK)
140bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        newsoft = min(hard, max(soft, 1024*2048))
141bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard))
142bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum
14304f357cffef6d764f2f0ff2671dabde75ec250d1Barry Warsawfrom test import test_support
1443a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
1457c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond HettingerRESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb',
146aaa2f1dea706daf2a5f431d97a3e3120dba652d2Hye-Shik Chang                  'decimal', 'compiler', 'subprocess', 'urlfetch')
1473a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
1483a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
14908fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''):
15008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    print __doc__
15108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    if msg: print msg
15208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    sys.exit(code)
15308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
15408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
1553b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawdef main(tests=None, testdir=None, verbose=0, quiet=False, generate=False,
1563b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw         exclude=False, single=False, randomize=False, fromfile=None,
157aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald         findleaks=False, use_resources=None, trace=False, coverdir='coverage',
15804824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis         runleaks=False, huntrleaks=False, verbose2=False):
1596fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """Execute a test suite.
1606fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1617e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters    This also parses command-line options and modifies its behavior
162004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake    accordingly.
1636fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1646fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    tests -- a list of strings containing test names (optional)
1656fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    testdir -- the directory in which to look for tests (optional)
1666fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1676fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    Users other than the Python test suite will certainly want to
1686fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    specify testdir; if it's omitted, the directory containing the
169004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake    Python test suite is searched for.
1706fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1716fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    If the tests argument is omitted, the tests listed on the
1726fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    command-line will be used.  If that's empty, too, then all *.py
1736fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    files beginning with test_ will be used.
174ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro
1753b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    The other default arguments (verbose, quiet, generate, exclude, single,
176aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald    randomize, findleaks, use_resources, trace and coverdir) allow programmers
177aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald    calling main() directly to set the values that would normally be set by
178aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald    flags on the command line.
1796fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """
180004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake
1818dee809410e2d433bb0be5d8a1699736b90db0b5Tim Peters    test_support.record_original_stdout(sys.stdout)
182152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    try:
18304824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis        opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsrf:lu:t:TD:NLR:w',
18408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw                                   ['help', 'verbose', 'quiet', 'generate',
185c5000dfc4098f8547461e790a91536a923124261Tim Peters                                    'exclude', 'single', 'random', 'fromfile',
1863b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                                    'findleaks', 'use=', 'threshold=', 'trace',
187aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald                                    'coverdir=', 'nocoverdir', 'runleaks',
18804824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                                    'huntrleaks=', 'verbose2',
1893b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                                    ])
190152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    except getopt.error, msg:
19108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        usage(2, msg)
19208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
19308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    # Defaults
19408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    if use_resources is None:
19508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        use_resources = []
196152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    for o, a in opts:
19708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        if o in ('-h', '--help'):
19808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            usage(0)
19908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-v', '--verbose'):
20008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            verbose += 1
20104824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis        elif o in ('-w', '--verbose2'):
20204824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis            verbose2 = True
20308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-q', '--quiet'):
2043b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            quiet = True;
20508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            verbose = 0
20608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-g', '--generate'):
2073b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            generate = True
20808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-x', '--exclude'):
2093b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            exclude = True
21008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-s', '--single'):
2113b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            single = True
21208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-r', '--randomize'):
2133b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            randomize = True
214c5000dfc4098f8547461e790a91536a923124261Tim Peters        elif o in ('-f', '--fromfile'):
215c5000dfc4098f8547461e790a91536a923124261Tim Peters            fromfile = a
21608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-l', '--findleaks'):
2173b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            findleaks = True
2180179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro        elif o in ('-L', '--runleaks'):
2190179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro            runleaks = True
2209e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum        elif o in ('-t', '--threshold'):
2219e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum            import gc
2229e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum            gc.set_threshold(int(a))
2233b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        elif o in ('-T', '--coverage'):
2243b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            trace = True
225aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald        elif o in ('-D', '--coverdir'):
226aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald            coverdir = os.path.join(os.getcwd(), a)
227aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald        elif o in ('-N', '--nocoverdir'):
228aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald            coverdir = None
22961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson        elif o in ('-R', '--huntrleaks'):
23061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            huntrleaks = a.split(':')
23161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            if len(huntrleaks) != 3:
23261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                print a, huntrleaks
23361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                usage(2, '-R takes three colon-separated arguments')
23461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            if len(huntrleaks[0]) == 0:
23561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                huntrleaks[0] = 5
23661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            else:
23761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                huntrleaks[0] = int(huntrleaks[0])
23861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            if len(huntrleaks[1]) == 0:
23961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                huntrleaks[1] = 4
24061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            else:
24161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                huntrleaks[1] = int(huntrleaks[1])
24261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            if len(huntrleaks[2]) == 0:
24361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                huntrleaks[2] = "reflog.txt"
24408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-u', '--use'):
245fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum            u = [x.lower() for x in a.split(',')]
246fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum            for r in u:
2473a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                if r == 'all':
2484dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    use_resources[:] = RESOURCE_NAMES
2494dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    continue
2504dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                remove = False
2514dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                if r[0] == '-':
2524dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    remove = True
2534dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    r = r[1:]
2543a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                if r not in RESOURCE_NAMES:
2553a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                    usage(1, 'Invalid -u/--use option: ' + a)
2564dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                if remove:
2574dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    if r in use_resources:
2584dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                        use_resources.remove(r)
2594dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                elif r not in use_resources:
260e41abab33b0b467acd6bdc7d73ce4b5cef4fd5bfAndrew MacIntyre                    use_resources.append(r)
261a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum    if generate and verbose:
26208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        usage(2, "-g and -v don't go together!")
263c5000dfc4098f8547461e790a91536a923124261Tim Peters    if single and fromfile:
264c5000dfc4098f8547461e790a91536a923124261Tim Peters        usage(2, "-s and -f don't go together!")
26508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
266152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    good = []
267152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    bad = []
268152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    skipped = []
2699a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake    resource_denieds = []
270e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
271d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer    if findleaks:
272a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        try:
273a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw            import gc
274a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        except ImportError:
2758a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            print 'No GC available, disabling findleaks.'
2763b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            findleaks = False
277a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        else:
2788a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # Uncomment the line below to report garbage that is not
2798a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # freeable by reference counting alone.  By default only
2808a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # garbage that is not collectable by the GC is reported.
2818a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            #gc.set_debug(gc.DEBUG_SAVEALL)
282d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            found_garbage = []
283a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw
284e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
285e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        from tempfile import gettempdir
286e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        filename = os.path.join(gettempdir(), 'pynexttest')
287e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        try:
288e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            fp = open(filename, 'r')
289fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond            next = fp.read().strip()
290e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            tests = [next]
291e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            fp.close()
292e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        except IOError:
293e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            pass
294c5000dfc4098f8547461e790a91536a923124261Tim Peters
295c5000dfc4098f8547461e790a91536a923124261Tim Peters    if fromfile:
296c5000dfc4098f8547461e790a91536a923124261Tim Peters        tests = []
297c5000dfc4098f8547461e790a91536a923124261Tim Peters        fp = open(fromfile)
298c5000dfc4098f8547461e790a91536a923124261Tim Peters        for line in fp:
299c5000dfc4098f8547461e790a91536a923124261Tim Peters            guts = line.split() # assuming no test has whitespace in its name
300c5000dfc4098f8547461e790a91536a923124261Tim Peters            if guts and not guts[0].startswith('#'):
301c5000dfc4098f8547461e790a91536a923124261Tim Peters                tests.extend(guts)
302c5000dfc4098f8547461e790a91536a923124261Tim Peters        fp.close()
303c5000dfc4098f8547461e790a91536a923124261Tim Peters
304c5000dfc4098f8547461e790a91536a923124261Tim Peters    # Strip .py extensions.
305c5000dfc4098f8547461e790a91536a923124261Tim Peters    if args:
306c5000dfc4098f8547461e790a91536a923124261Tim Peters        args = map(removepy, args)
307c5000dfc4098f8547461e790a91536a923124261Tim Peters    if tests:
308c5000dfc4098f8547461e790a91536a923124261Tim Peters        tests = map(removepy, tests)
309c5000dfc4098f8547461e790a91536a923124261Tim Peters
3106c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum    stdtests = STDTESTS[:]
3116c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum    nottests = NOTTESTS[:]
312152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if exclude:
3136c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum        for arg in args:
3146c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum            if arg in stdtests:
3156c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum                stdtests.remove(arg)
3166c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum        nottests[:0] = args
31741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        args = []
318747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum    tests = tests or args or findtests(testdir, stdtests, nottests)
319e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
320e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        tests = tests[:1]
321ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro    if randomize:
322ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro        random.shuffle(tests)
3233b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    if trace:
3243b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        import trace
3253b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix],
3263b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                             trace=False, count=True)
32741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum    test_support.verbose = verbose      # Tell tests to be moderately quiet
32808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    test_support.use_resources = use_resources
3295796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum    save_modules = sys.modules.keys()
330152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    for test in tests:
33141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if not quiet:
33241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            print test
3333cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
3343b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        if trace:
3353b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            # If we're tracing code coverage, then we don't exit with status
3363b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            # if on a false return value from main.
3373b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            tracer.runctx('runtest(test, generate, verbose, quiet, testdir)',
3383b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                          globals=globals(), locals=vars())
33941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        else:
34014ca327f998511da5e89f819204c54fa582dd696Neal Norwitz            try:
34114ca327f998511da5e89f819204c54fa582dd696Neal Norwitz                ok = runtest(test, generate, verbose, quiet, testdir,
34214ca327f998511da5e89f819204c54fa582dd696Neal Norwitz                             huntrleaks)
34314ca327f998511da5e89f819204c54fa582dd696Neal Norwitz            except KeyboardInterrupt:
34414ca327f998511da5e89f819204c54fa582dd696Neal Norwitz                # print a newline separate from the ^C
34514ca327f998511da5e89f819204c54fa582dd696Neal Norwitz                print
34614ca327f998511da5e89f819204c54fa582dd696Neal Norwitz                break
34714ca327f998511da5e89f819204c54fa582dd696Neal Norwitz            except:
34814ca327f998511da5e89f819204c54fa582dd696Neal Norwitz                raise
3493b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            if ok > 0:
3503b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                good.append(test)
3513b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            elif ok == 0:
3523b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                bad.append(test)
3533b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            else:
3543b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                skipped.append(test)
3553b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                if ok == -2:
3563b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                    resource_denieds.append(test)
357d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer        if findleaks:
358d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            gc.collect()
359d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            if gc.garbage:
3608a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                print "Warning: test created", len(gc.garbage),
3618a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                print "uncollectable object(s)."
3628a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                # move the uncollectable objects somewhere so we don't see
3638a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                # them again
364d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer                found_garbage.extend(gc.garbage)
365d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer                del gc.garbage[:]
3665796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum        # Unload the newly imported modules (best effort finalization)
3675796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum        for module in sys.modules.keys():
36851931144427faa001a6db3cfc37380526be256b6Guido van Rossum            if module not in save_modules and module.startswith("test."):
3695796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum                test_support.unload(module)
3707a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton
3717a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    # The lists won't be sorted if running with -r
3727a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    good.sort()
3737a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    bad.sort()
3747a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    skipped.sort()
375e0c446bb4ad67294f42d4cb53b4ff28413bd8ddeTim Peters
376152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if good and not quiet:
37741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if not bad and not skipped and len(good) > 1:
37841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            print "All",
37941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        print count(len(good), "test"), "OK."
3801a4d77b2527ced1052b4faae3d176b125a764325Tim Peters        if verbose:
381408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            print "CAUTION:  stdout isn't compared in verbose mode:"
382408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            print "a test that passes in verbose mode may fail without it."
383152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if bad:
384a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        print count(len(bad), "test"), "failed:"
385a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        printlist(bad)
386152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if skipped and not quiet:
387a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        print count(len(skipped), "test"), "skipped:"
388a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        printlist(skipped)
389e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
390b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        e = _ExpectedSkips()
391a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters        plat = sys.platform
392b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        if e.isvalid():
393a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            surprise = set(skipped) - e.getexpected() - set(resource_denieds)
394b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            if surprise:
395b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters                print count(len(surprise), "skip"), \
396a45da92484ceececf1cf32b4dfb16004945b001eTim Peters                      "unexpected on", plat + ":"
397a45da92484ceececf1cf32b4dfb16004945b001eTim Peters                printlist(surprise)
398b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            else:
399b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters                print "Those skips are all expected on", plat + "."
400b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        else:
401b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            print "Ask someone to teach regrtest.py about which tests are"
402b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            print "expected to get skipped on", plat + "."
403b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
40404824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis    if verbose2 and bad:
40504824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis        print "Re-running failed tests in verbose mode"
40604824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis        for test in bad:
407922dd7d49da75b07e27f917db0166f67bdbef3d3Tim Peters            print "Re-running test %r in verbose mode" % test
408922dd7d49da75b07e27f917db0166f67bdbef3d3Tim Peters            sys.stdout.flush()
40904824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis            try:
41004824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                test_support.verbose = 1
41104824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                ok = runtest(test, generate, 1, quiet, testdir,
41204824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                             huntrleaks)
41304824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis            except KeyboardInterrupt:
41404824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                # print a newline separate from the ^C
41504824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                print
41604824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                break
41704824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis            except:
41804824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis                raise
41904824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis
420e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
421e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        alltests = findtests(testdir, stdtests, nottests)
422e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        for i in range(len(alltests)):
423e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            if tests[0] == alltests[i]:
424e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                if i == len(alltests) - 1:
425e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    os.unlink(filename)
426e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                else:
427e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp = open(filename, 'w')
428e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp.write(alltests[i+1] + '\n')
429e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp.close()
430e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                break
431e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        else:
432e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            os.unlink(filename)
433e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
4343b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    if trace:
4353b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        r = tracer.results()
4363b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        r.write_results(show_missing=True, summary=True, coverdir=coverdir)
4373b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw
4380179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro    if runleaks:
4390179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro        os.system("leaks %d" % os.getpid())
4400179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro
4415943b4ac1067e5011b66697396d5df93b5ef9af0Tim Peters    sys.exit(len(bad) > 0)
44208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
443152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
4446fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [
445152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_grammar',
446152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_opcodes',
447152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_operations',
448152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_builtin',
449152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_exceptions',
450152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_types',
451152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum   ]
452152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
4536fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [
454152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_support',
45562e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton    'test_future1',
45662e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton    'test_future2',
4578471a35febdbfbfab51b9d4b5fe51694fe6ca536Jeremy Hylton    'test_future3',
458152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    ]
459152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
4606fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossumdef findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
461152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    """Return a list of all applicable test modules."""
4626fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    if not testdir: testdir = findtestdir()
463152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    names = os.listdir(testdir)
464152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    tests = []
465152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    for name in names:
466e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        if name[:5] == "test_" and name[-3:] == os.extsep+"py":
46741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            modname = name[:-3]
46841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            if modname not in stdtests and modname not in nottests:
46941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum                tests.append(modname)
470152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    tests.sort()
471152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    return stdtests + tests
472152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
47361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsondef runtest(test, generate, verbose, quiet, testdir=None, huntrleaks=False):
4746fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """Run a single test.
4756fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    test -- the name of the test
4766fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    generate -- if true, generate output, instead of running the test
4776fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    and comparing it to a previously created output file
4786fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    verbose -- if true, print more messages
479f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick    quiet -- if true, don't print 'skipped' messages (probably redundant)
4806fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    testdir -- test directory
4816fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """
482152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    test_support.unload(test)
4833b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    if not testdir:
4843b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        testdir = findtestdir()
485152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    outputdir = os.path.join(testdir, "output")
486152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    outputfile = os.path.join(outputdir, test)
4879390cc15da5cd6920bd41bb4cd146d5d0601345fTim Peters    if verbose:
48841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        cfp = None
4890fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    else:
49074e67661a69ddb43a21a486c66965a052540cdd0Raymond Hettinger        cfp = cStringIO.StringIO()
49161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson    if huntrleaks:
49261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson        refrep = open(huntrleaks[2], "a")
493152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    try:
494342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters        save_stdout = sys.stdout
49541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        try:
49641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            if cfp:
49741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum                sys.stdout = cfp
49841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum                print test              # Output file starts with test name
499408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            if test.startswith('test.'):
500408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                abstest = test
501408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            else:
502408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                # Always import it from the test package
503408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                abstest = 'test.' + test
504408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            the_package = __import__(abstest, globals(), locals(), [])
505408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            the_module = getattr(the_package, test)
506d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # Most tests run to completion simply as a side-effect of
507d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # being imported.  For the benefit of tests that can't run
508d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # that way (like test_threaded_import), explicitly invoke
509d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # their test_main() function (if it exists).
510d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            indirect_test = getattr(the_module, "test_main", None)
511d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            if indirect_test is not None:
512d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters                indirect_test()
51361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson            if huntrleaks:
51461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                # This code *is* hackish and inelegant, yes.
51561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                # But it seems to do the job.
51661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                import copy_reg
51761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                fs = warnings.filters[:]
51861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                ps = copy_reg.dispatch_table.copy()
51961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                pic = sys.path_importer_cache.copy()
52061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                import gc
52161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                def cleanup():
522545d4962f5860c49c44f06fc80c4678271cfac18Neal Norwitz                    import _strptime, linecache, warnings, dircache
523545d4962f5860c49c44f06fc80c4678271cfac18Neal Norwitz                    import urlparse, urllib, urllib2
52461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    from distutils.dir_util import _path_created
52561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    _path_created.clear()
52661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    warnings.filters[:] = fs
52761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    gc.collect()
52861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    sre.purge()
52961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    _strptime._regex_cache.clear()
53061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    urlparse.clear_cache()
531545d4962f5860c49c44f06fc80c4678271cfac18Neal Norwitz                    urllib.urlcleanup()
532545d4962f5860c49c44f06fc80c4678271cfac18Neal Norwitz                    urllib2.install_opener(None)
53361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    copy_reg.dispatch_table.clear()
53461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    copy_reg.dispatch_table.update(ps)
53561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    sys.path_importer_cache.clear()
53661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    sys.path_importer_cache.update(pic)
53761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    dircache.reset()
5381a7285250ba1fb504c10fe3b402e5ebba98d287cMichael W. Hudson                    linecache.clearcache()
53961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                if indirect_test:
54061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    def run_the_test():
54161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                        indirect_test()
54261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                else:
54361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    def run_the_test():
54461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                        reload(the_module)
54561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                deltas = []
54661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                repcount = huntrleaks[0] + huntrleaks[1]
54761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                print >> sys.stderr, "beginning", repcount, "repetitions"
54861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                print >> sys.stderr, \
54961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                      ("1234567890"*(repcount//10 + 1))[:repcount]
55061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                for i in range(repcount):
55161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    rc = sys.gettotalrefcount()
55261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    run_the_test()
55361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    sys.stderr.write('.')
55461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    cleanup()
55561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    deltas.append(sys.gettotalrefcount() - rc - 2)
55661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                print >>sys.stderr
55761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                if max(map(abs, deltas[-huntrleaks[1]:])) > 0:
558e667e665070624f9cceaa87f15328ec5d1031ba0Michael W. Hudson                    print >>sys.stderr, test, 'leaked', \
559e667e665070624f9cceaa87f15328ec5d1031ba0Michael W. Hudson                          deltas[-huntrleaks[1]:], 'references'
56061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                    print >>refrep, test, 'leaked', \
56161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                          deltas[-huntrleaks[1]:], 'references'
56261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson                # The end of the huntrleaks hackishness.
56341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        finally:
564342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters            sys.stdout = save_stdout
5659a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake    except test_support.ResourceDenied, msg:
5669a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake        if not quiet:
5679a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake            print test, "skipped --", msg
5689a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake            sys.stdout.flush()
5699a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake        return -2
5703af826ebca80f8a6c782fb590c77ac210ae9e22dThomas Wouters    except (ImportError, test_support.TestSkipped), msg:
571f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick        if not quiet:
572de4742b87f7775fc3d9fa76cd640e7cdd5ef69a2Fred Drake            print test, "skipped --", msg
5733cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
57441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return -1
575fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake    except KeyboardInterrupt:
576fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake        raise
577152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    except test_support.TestFailed, msg:
57841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        print "test", test, "failed --", msg
5793cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
58041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return 0
5819e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum    except:
58241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        type, value = sys.exc_info()[:2]
58327c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake        print "test", test, "crashed --", str(type) + ":", value
5843cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
58541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if verbose:
58641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            traceback.print_exc(file=sys.stdout)
5873cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
58841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return 0
589152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
5900fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        if not cfp:
5910fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            return 1
5920fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        output = cfp.getvalue()
593e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake        if generate:
594e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake            if output == test + "\n":
595e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                if os.path.exists(outputfile):
596e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    # Write it since it already exists (and the contents
597e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    # may have changed), but let the user know it isn't
598e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    # needed:
599e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    print "output file", outputfile, \
600e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                          "is no longer needed; consider removing it"
6010fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum                else:
6020fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum                    # We don't need it, so don't create it.
6030fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum                    return 1
6040fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp = open(outputfile, "w")
6050fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp.write(output)
6060fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp.close()
6070fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            return 1
6080fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        if os.path.exists(outputfile):
6090fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp = open(outputfile, "r")
6100fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            expected = fp.read()
6110fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp.close()
6120fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        else:
6130fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            expected = test + "\n"
61461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson        if output == expected or huntrleaks:
6150fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            return 1
6160fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        print "test", test, "produced unexpected output:"
6173cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
6180fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        reportdiff(expected, output)
6193cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
6200fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        return 0
6210fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum
6220fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossumdef reportdiff(expected, output):
6230fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    import difflib
624c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    print "*" * 70
625c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    a = expected.splitlines(1)
626c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    b = output.splitlines(1)
627cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    sm = difflib.SequenceMatcher(a=a, b=b)
628cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    tuples = sm.get_opcodes()
629c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
630cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    def pair(x0, x1):
631c377b16d12ba325bb108eca575447d66f19294c0Tim Peters        # x0:x1 are 0-based slice indices; convert to 1-based line indices.
632cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        x0 += 1
633cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        if x0 >= x1:
634c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            return "line " + str(x0)
635cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        else:
636c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            return "lines %d-%d" % (x0, x1)
637c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
638cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    for op, a0, a1, b0, b1 in tuples:
639cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        if op == 'equal':
640cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            pass
641c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
642cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'delete':
643c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "***", pair(a0, a1), "of expected output missing:"
644cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            for line in a[a0:a1]:
645c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print "-", line,
646c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
647cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'replace':
648c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "*** mismatch between", pair(a0, a1), "of expected", \
649c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                  "output and", pair(b0, b1), "of actual output:"
650c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            for line in difflib.ndiff(a[a0:a1], b[b0:b1]):
651c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print line,
652c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
653cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'insert':
654c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "***", pair(b0, b1), "of actual output doesn't appear", \
655c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                  "in expected output after line", str(a1)+":"
656cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            for line in b[b0:b1]:
657c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print "+", line,
658c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
659cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        else:
660cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1)
661c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
6620fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    print "*" * 70
663152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
664152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir():
665152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if __name__ == '__main__':
66641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        file = sys.argv[0]
667152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
66841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        file = __file__
669152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    testdir = os.path.dirname(file) or os.curdir
670152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    return testdir
671152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
672c5000dfc4098f8547461e790a91536a923124261Tim Petersdef removepy(name):
673c5000dfc4098f8547461e790a91536a923124261Tim Peters    if name.endswith(os.extsep + "py"):
674c5000dfc4098f8547461e790a91536a923124261Tim Peters        name = name[:-3]
675c5000dfc4098f8547461e790a91536a923124261Tim Peters    return name
676c5000dfc4098f8547461e790a91536a923124261Tim Peters
677152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word):
678152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if n == 1:
67941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return "%d %s" % (n, word)
680152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
68141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return "%d %ss" % (n, word)
682152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
683a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4):
6847c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters    """Print the elements of iterable x to stdout.
685a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
686a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    Optional arg width (default 70) is the maximum line length.
687a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    Optional arg indent (default 4) is the number of blanks with which to
688a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    begin each line.
689a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    """
690a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
691ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    from textwrap import fill
692ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    blanks = ' ' * indent
693ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    print fill(' '.join(map(str, x)), width,
694ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters               initial_indent=blanks, subsequent_indent=blanks)
695a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
696de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# Map sys.platform to a string containing the basenames of tests
697de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# expected to be skipped on that platform.
6982a182dbf3f2520ad753792068391775d102b13dfTim Peters#
6992a182dbf3f2520ad753792068391775d102b13dfTim Peters# Special cases:
7002a182dbf3f2520ad753792068391775d102b13dfTim Peters#     test_pep277
7012a182dbf3f2520ad753792068391775d102b13dfTim Peters#         The _ExpectedSkips constructor adds this to the set of expected
7022a182dbf3f2520ad753792068391775d102b13dfTim Peters#         skips if not os.path.supports_unicode_filenames.
703b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#     test_socket_ssl
704b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#         Controlled by test_socket_ssl.skip_expected.  Requires the network
705b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#         resource, and a socket module with ssl support.
70655b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#     test_timeout
70755b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#         Controlled by test_timeout.skip_expected.  Requires the network
70855b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#         resource and a socket module.
709de14a30d1d70073d36f207fe432e4adad5178399Tim Peters
710f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = {
711f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum    'win32':
712f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """
713c7c516aa5140d255f18ffd2e8569434f0904f5dbTim Peters        test__locale
714901dc983168d4ca706ed664a8f5134ee3add26edRaymond Hettinger        test_applesingle
715f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_al
716823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
71778e35f931128d017d5955841eac8c397ff32595cTim Peters        test_bsddb3
718f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cd
719f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cl
720f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_commands
721f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_crypt
722d703057752d52cef6082a920879a0b62cdeffacaTim Peters        test_curses
723f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dbm
724f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dl
725f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_fcntl
726f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_fork1
727f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_gdbm
728f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_gl
729f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_grp
730f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_imgfile
731fd8e6e599051de07cdb8e9abc9dbadf37c5fca0cTim Peters        test_ioctl
732f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_largefile
733f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_linuxaudiodev
734f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_mhlib
735f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_nis
736f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_openpty
737efc4b121694888e00072f5a079de5496afecb05aTim Peters        test_ossaudiodev
738f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_poll
739003eb3088283927e3155f2e2317d3d516edd9645Tim Peters        test_posix
740f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_pty
741f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_pwd
7421e33ffa5c719ec611e182681c4a5f2ceb62a08f5Tim Peters        test_resource
743f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_signal
744f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_sunaudiodev
745cea2cc4a21e7e2ba84f6dc11682821e502bd1f5fTim Peters        test_threadsignals
746f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_timing
747f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """,
748f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum    'linux2':
749f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """
750f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_al
751944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
752823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
753f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cd
754f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cl
755f66dacdb017c7481c3ba4f0743d5446146de33c8Guido van Rossum        test_curses
756f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dl
757f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_gl
758f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_imgfile
759f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_largefile
7604507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum        test_linuxaudiodev
761f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_nis
762f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_ntpath
7634507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum        test_ossaudiodev
764f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_sunaudiodev
765f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """,
76649a806edbb298f2a5be3598bd80c21392cb6968dJack Jansen   'mac':
767aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        """
768aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_al
769679751455798fab6425fda749a19e783e58b210eJack Jansen        test_atexit
770aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_bsddb
771823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
772679751455798fab6425fda749a19e783e58b210eJack Jansen        test_bsddb3
773679751455798fab6425fda749a19e783e58b210eJack Jansen        test_bz2
774aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_cd
775aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_cl
776aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_commands
777aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_crypt
778b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen        test_curses
779aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_dbm
780aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_dl
781aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_fcntl
782aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_fork1
783aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_gl
784aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_grp
785c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen        test_ioctl
786aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_imgfile
787aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_largefile
788aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_linuxaudiodev
789aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_locale
790aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_mmap
791aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_nis
792aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_ntpath
793aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_openpty
794679751455798fab6425fda749a19e783e58b210eJack Jansen        test_ossaudiodev
795aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_poll
796679751455798fab6425fda749a19e783e58b210eJack Jansen        test_popen
797aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_popen2
7985bb97e66dcbb110877ac17209c7d2641db6f6006Jack Jansen        test_posix
799aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_pty
800aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_pwd
801679751455798fab6425fda749a19e783e58b210eJack Jansen        test_resource
802aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_signal
803aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_sunaudiodev
804aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_sundry
805c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen        test_tarfile
806aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_timing
807aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        """,
80821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'unixware7':
8090ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        """
8100ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_al
811944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
8120ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_bsddb
813823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
8140ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_cd
8150ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_cl
8160ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_dl
8170ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_gl
8180ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_imgfile
8190ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_largefile
8200ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_linuxaudiodev
8210ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_minidom
8220ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_nis
8230ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_ntpath
8240ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_openpty
8250ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_pyexpat
8260ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_sax
8270ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_sunaudiodev
8280ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_sundry
8290ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        """,
83021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'openunix8':
83121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """
83221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_al
833944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
83421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_bsddb
835823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
83621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cd
83721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cl
83821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_dl
83921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_gl
84021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_imgfile
84121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_largefile
84221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_linuxaudiodev
84321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_minidom
84421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_nis
84521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_ntpath
84621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_openpty
84721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_pyexpat
84821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sax
84921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sunaudiodev
85021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sundry
85121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """,
85221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'sco_sv3':
85321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """
85421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_al
855944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
85621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_asynchat
85721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_bsddb
858823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
85921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cd
86021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cl
86121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_dl
86221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_fork1
86321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_gettext
86421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_gl
86521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_imgfile
86621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_largefile
86721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_linuxaudiodev
86821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_locale
86921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_minidom
87021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_nis
87121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_ntpath
87221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_openpty
87321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_pyexpat
87421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_queue
87521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sax
87621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sunaudiodev
87721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sundry
87821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_thread
87921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threaded_import
88021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threadedtempfile
88121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threading
88221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """,
883e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum    'riscos':
884e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        """
885e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_al
886944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
887e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_asynchat
888a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis        test_atexit
889e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_bsddb
890823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
891a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis        test_bsddb3
892e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_cd
893e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_cl
894e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_commands
895e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_crypt
896e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_dbm
897e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_dl
898e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_fcntl
899e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_fork1
900e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_gdbm
901e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_gl
902e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_grp
903e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_imgfile
904e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_largefile
905e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_linuxaudiodev
906e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_locale
907e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_mmap
908e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_nis
909e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_ntpath
910e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_openpty
911e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_poll
912e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_popen2
913e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_pty
914e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_pwd
915e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_strop
916e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_sunaudiodev
917e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_sundry
918e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_thread
919e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threaded_import
920e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threadedtempfile
921e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threading
922e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_timing
923e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        """,
9248a97f4a380a7a356730e48406f8269c3efe5e6ebJack Jansen    'darwin':
925398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        """
9262bfb94c871caeae622174485264f407d9df354b9Brett Cannon        test__locale
927398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_al
928acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_bsddb
9299d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum        test_bsddb3
930398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_cd
931398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_cl
932398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_curses
933398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_dl
934398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_gdbm
935398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_gl
936398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_imgfile
937398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_largefile
938398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_linuxaudiodev
939acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_locale
940398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_minidom
941398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_nis
942398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_ntpath
943acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_ossaudiodev
944398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_poll
945398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_sunaudiodev
946398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        """,
94711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum    'sunos5':
94811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        """
94911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_al
950944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
95111c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_bsddb
952823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
95311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_cd
95411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_cl
95511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_curses
95611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_dbm
95711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_gdbm
95811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_gl
95911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_gzip
96011c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_imgfile
96111c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_linuxaudiodev
96211c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_openpty
96311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_zipfile
96411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_zlib
965ed375e18d10d37bfea1769aa1fe69795df6cbc10Jeremy Hylton        """,
966b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro    'hp-ux11':
967b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        """
968b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_al
969944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
970b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_bsddb
971823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
972b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_cd
973b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_cl
974b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_curses
975b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_dl
976b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_gdbm
977b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_gl
978b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_gzip
979b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_imgfile
980b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_largefile
981b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_linuxaudiodev
982b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_locale
983b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_minidom
984b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_nis
985b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_ntpath
986b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_openpty
987b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_pyexpat
988b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_sax
989b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_sunaudiodev
990b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_zipfile
991b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_zlib
992b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        """,
993f90ae20354ceb501f0ba0b6459df17f1a8005a47Martin v. Löwis    'atheos':
994c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        """
995c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_al
996944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
997823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
998c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_cd
999c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_cl
1000c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_curses
1001c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_dl
1002c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_gdbm
1003c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_gl
1004c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_imgfile
1005c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_largefile
1006c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_linuxaudiodev
1007c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_locale
1008c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_mhlib
1009c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_mmap
1010c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_nis
1011c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_poll
1012c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_popen2
1013c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_resource
1014c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_sunaudiodev
1015c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        """,
101625115940604e6051aa2fb16be88c6b8f64577251Jason Tishler    'cygwin':
101725115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        """
101825115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_al
1019944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
1020823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
1021b0f89e05ad9aaf229033bbc81be43c1f826e3930Tim Peters        test_bsddb3
102225115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_cd
102325115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_cl
102425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_curses
102525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_dbm
102625115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_gl
102725115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_imgfile
1028c23f39ca9dc540ace879fcf9746254d94293b86fJason Tishler        test_ioctl
102925115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_largefile
103025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_linuxaudiodev
103125115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_locale
103225115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_nis
10335c4ded2c3b59aa134b82ab17cdfe7ab633194ca6Jason Tishler        test_ossaudiodev
103425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_socketserver
103525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_sunaudiodev
103625115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        """,
1037fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre    'os2emx':
1038fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        """
1039fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_al
1040944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
1041fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_audioop
1042823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
1043fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_bsddb3
1044fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_cd
1045fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_cl
1046fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_commands
1047fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_curses
1048fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_dl
1049fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_gl
1050fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_imgfile
1051fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_largefile
1052fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_linuxaudiodev
1053fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_mhlib
1054fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_mmap
1055fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_nis
1056fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_openpty
1057fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_ossaudiodev
1058fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_pty
1059fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_resource
1060fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_signal
1061fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_sunaudiodev
1062fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        """,
1063944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum    'freebsd4':
1064944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        """
1065944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_aepack
1066944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_al
1067944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
1068944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_bsddb
1069944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_bsddb3
1070944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_cd
1071944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_cl
1072f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang        test_gdbm
1073944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_gl
1074944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_imgfile
1075944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_linuxaudiodev
1076944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_locale
1077944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_macfs
1078944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_macostools
1079944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_nis
1080944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_ossaudiodev
1081944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_pep277
1082944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_plistlib
1083f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang        test_pty
1084944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_scriptpackages
1085944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_socket_ssl
1086944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_socketserver
1087944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_sunaudiodev
1088f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang        test_tcl
1089944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_timeout
1090944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_unicode_file
1091944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_urllibnet
1092944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_winreg
1093944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_winsound
109456f88113b7272be8403f9b722c943e679e23d362Martin v. Löwis        """,
10958ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum    'aix5':
10968ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        """
10978ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_aepack
10988ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_al
10998ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_applesingle
11008ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_bsddb
11018ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_bsddb185
11028ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_bsddb3
11038ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_bz2
11048ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_cd
11058ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_cl
11068ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_dl
11078ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_gdbm
11088ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_gl
11098ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_gzip
11108ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_imgfile
11118ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_linuxaudiodev
11128ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_macfs
11138ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_macostools
11148ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_nis
11158ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_ossaudiodev
11168ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_sunaudiodev
11178ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_tcl
11188ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_winreg
11198ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_winsound
11208ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_zipimport
11218ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        test_zlib
11228ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum        """,
1123f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum}
112432d0c1b458bbdda8d8895f5b5bedfb4644f839e7Martin v. Löwis_expectations['freebsd5'] = _expectations['freebsd4']
1125f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang_expectations['freebsd6'] = _expectations['freebsd4']
11264e422817eb1bc5a6a42365001ad45683ae07e559Hye-Shik Chang_expectations['freebsd7'] = _expectations['freebsd4']
1127f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum
1128b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips:
1129b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters    def __init__(self):
11302a182dbf3f2520ad753792068391775d102b13dfTim Peters        import os.path
1131b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters        from test import test_socket_ssl
113255b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz        from test import test_timeout
11331b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
11347c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters        self.valid = False
1135de14a30d1d70073d36f207fe432e4adad5178399Tim Peters        if sys.platform in _expectations:
1136f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum            s = _expectations[sys.platform]
1137a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.expected = set(s.split())
11381b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
1139f21a5f773964d34c7b6deb7e3d753fae2b9c70e2Gregory P. Smith            # this isn't a regularly run unit test, it is always skipped
1140f21a5f773964d34c7b6deb7e3d753fae2b9c70e2Gregory P. Smith            self.expected.add('test_hashlib_speed')
1141f21a5f773964d34c7b6deb7e3d753fae2b9c70e2Gregory P. Smith
11422a182dbf3f2520ad753792068391775d102b13dfTim Peters            if not os.path.supports_unicode_filenames:
11432a182dbf3f2520ad753792068391775d102b13dfTim Peters                self.expected.add('test_pep277')
11441b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
1145b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters            if test_socket_ssl.skip_expected:
1146b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters                self.expected.add('test_socket_ssl')
1147b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters
114855b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz            if test_timeout.skip_expected:
114955b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz                self.expected.add('test_timeout')
115055b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz
1151fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis            if sys.maxint == 9223372036854775807L:
1152fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis                self.expected.add('test_rgbimg')
1153fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis                self.expected.add('test_imageop')
1154fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis
11556afc5e02fa775517fa0b6455906a8c203baf9cd2Jack Jansen            if not sys.platform in ("mac", "darwin"):
11567035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                MAC_ONLY = ["test_macostools", "test_macfs", "test_aepack",
11577035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                            "test_plistlib", "test_scriptpackages"]
11587035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                for skip in MAC_ONLY:
11597035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                    self.expected.add(skip)
1160ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters
1161ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters            if sys.platform != "win32":
11627035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                WIN_ONLY = ["test_unicode_file", "test_winreg",
11637035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                            "test_winsound"]
11647035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                for skip in WIN_ONLY:
11657035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                    self.expected.add(skip)
1166f2715e076435b74638acb81512c2ee014f75aea2Tim Peters
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