regrtest.py revision 32d0c1b458bbdda8d8895f5b5bedfb4644f839e7
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
11a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw-v: verbose   -- run tests in verbose mode with output to stdout
12a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw-q: quiet     -- don't print anything except if a test fails
13a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw-g: generate  -- write the output file for a test instead of comparing it
14a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw-x: exclude   -- arguments are tests to *exclude*
15a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw-s: single    -- run only a single test (see below)
16a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw-r: random    -- randomize test execution order
17c5000dfc4098f8547461e790a91536a923124261Tim Peters-f: fromfile  -- read names of tests to run from a file (see below)
188a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer-l: findleaks -- if GC is available detect tests that leak memory
1908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw-u: use       -- specify which special resource intensive tests to run
2008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw-h: help      -- print this text and exit
219e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-t: threshold -- call gc.set_threshold(N)
223b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw-T: coverage  -- turn on code coverage using the trace module
230179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro-L: runleaks  -- run the leaks(1) command just before exit
24152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
25152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf non-option arguments are present, they are names for tests to run,
26152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumunless -x is given, in which case they are names for tests not to run.
27152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf no test names are given, all tests are run.
28f58ed2596706b97c16174a839c1ed6f6b1f87fa6Guido van Rossum
29a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum-v is incompatible with -g and does not compare test output files.
30e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
313b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw-T turns on code coverage tracing with the trace module.
323b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw
339e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-s means to run only a single test and exit.  This is useful when
349e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumdoing memory analysis on the Python interpreter (which tend to consume
359e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumtoo many resources to run the full regression test non-stop).  The
369e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile /tmp/pynexttest is read to find the next test to run.  If this
379e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile is missing, the first test_*.py file in testdir or on the command
389e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumline is used.  (actually tempfile.gettempdir() is used instead of
399e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum/tmp).
40e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
419e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-f reads the names of tests from the file given as f's argument, one
429e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumor more test names per line.  Whitespace is ignored.  Blank lines and
439e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumlines beginning with '#' are ignored.  This is especially useful for
449e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumwhittling down failures involving interactions among tests.
45c5000dfc4098f8547461e790a91536a923124261Tim Peters
460179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro-L causes the leaks(1) command to be run just before exit if it exists.
470179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaroleaks(1) is available on Mac OS X and presumably on some other
480179a18034b2316a70655d0f05bfbb20a0881f17Skip MontanaroFreeBSD-derived systems.
490179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro
509e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-u is used to specify which special resource intensive tests to run,
519e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumsuch as those requiring large file support or network connectivity.
529e9d4f8ed8d467d0558251f43c5decc754712d53Guido van RossumThe argument is a comma-separated list of words indicating the
539e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumresources to test.  Currently only the following are defined:
5408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
553a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake    all -       Enable all special resources.
563a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
57315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum    audio -     Tests that use the audio device.  (There are known
58315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum                cases of broken audio drivers that can crash Python or
59315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum                even the Linux kernel.)
60315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum
612158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling    curses -    Tests that use curses and will modify the terminal's
622158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling                state and output modes.
631633a2e3452b40d0e9bb1f15ab16cd6b90f15a19Tim Peters
649e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum    largefile - It is okay to run some test that may create huge
659e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum                files.  These tests can take a long time and may
669e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum                consume >2GB of disk space temporarily.
6708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
689e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum    network -   It is okay to run tests that use external network
699e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum                resource, e.g. testing SSL support for sockets.
701c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis
711c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis    bsddb -     It is okay to run the bsddb testsuite, which takes
721c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis                a long time to complete.
734dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake
747c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger    decimal -   Test the decimal module against a large suite that
757c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger                verifies compliance with standards.
767c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger
774dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred DrakeTo enable all resources except one, use '-uall,-<resource>'.  For
784dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeexample, to run all the tests except for the bsddb tests, give the
794dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeoption '-uall,-bsddb'.
80152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum"""
81152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
82152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport os
833b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport sys
84152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport getopt
85ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaroimport random
86dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossumimport warnings
873b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport cStringIO
883b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport traceback
89dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum
90dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# I see no other way to suppress these warnings;
91dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# putting them in test_grammar.py has no effect:
9288b1defb6f770c4f74788e8296b88fc31c3936ceGuido van Rossumwarnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
93dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum                        ".*test.test_grammar$")
94c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossumif sys.maxint > 0x7fffffff:
95c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    # Also suppress them in <string>, because for 64-bit platforms,
96c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    # that's where test_grammar.py hides them.
97c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
98c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum                            "<string>")
99152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
100bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# MacOSX (a.k.a. Darwin) has a default stack size that is too small
101bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# for deeply recursive regular expressions.  We see this as crashes in
102bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# the Python test suite when running test_re.py and test_sre.py.  The
103bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# fix is to set the stack limit to 2048.
104bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# This approach may also be useful for other Unixy platforms that
105bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# suffer from small default stack limits.
106bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossumif sys.platform == 'darwin':
107bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    try:
108bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        import resource
109bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    except ImportError:
110bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        pass
111bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    else:
112bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        soft, hard = resource.getrlimit(resource.RLIMIT_STACK)
113bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        newsoft = min(hard, max(soft, 1024*2048))
114bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard))
115bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum
11604f357cffef6d764f2f0ff2671dabde75ec250d1Barry Warsawfrom test import test_support
1173a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
1187c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond HettingerRESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb',
1197c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger                  'decimal')
1203a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
1213a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
12208fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''):
12308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    print __doc__
12408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    if msg: print msg
12508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    sys.exit(code)
12608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
12708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
1283b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawdef main(tests=None, testdir=None, verbose=0, quiet=False, generate=False,
1293b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw         exclude=False, single=False, randomize=False, fromfile=None,
1300179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro         findleaks=False, use_resources=None, trace=False, runleaks=False):
1316fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """Execute a test suite.
1326fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1337e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters    This also parses command-line options and modifies its behavior
134004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake    accordingly.
1356fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1366fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    tests -- a list of strings containing test names (optional)
1376fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    testdir -- the directory in which to look for tests (optional)
1386fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1396fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    Users other than the Python test suite will certainly want to
1406fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    specify testdir; if it's omitted, the directory containing the
141004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake    Python test suite is searched for.
1426fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1436fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    If the tests argument is omitted, the tests listed on the
1446fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    command-line will be used.  If that's empty, too, then all *.py
1456fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    files beginning with test_ will be used.
146ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro
1473b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    The other default arguments (verbose, quiet, generate, exclude, single,
1483b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    randomize, findleaks, use_resources, and trace) allow programmers calling
1493b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    main() directly to set the values that would normally be set by flags on
1503b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    the command line.
1516fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """
152004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake
1538dee809410e2d433bb0be5d8a1699736b90db0b5Tim Peters    test_support.record_original_stdout(sys.stdout)
154152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    try:
1550179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro        opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsrf:lu:t:TL',
15608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw                                   ['help', 'verbose', 'quiet', 'generate',
157c5000dfc4098f8547461e790a91536a923124261Tim Peters                                    'exclude', 'single', 'random', 'fromfile',
1583b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                                    'findleaks', 'use=', 'threshold=', 'trace',
1590179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro                                    'runleaks'
1603b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                                    ])
161152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    except getopt.error, msg:
16208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        usage(2, msg)
16308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
16408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    # Defaults
16508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    if use_resources is None:
16608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        use_resources = []
167152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    for o, a in opts:
16808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        if o in ('-h', '--help'):
16908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            usage(0)
17008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-v', '--verbose'):
17108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            verbose += 1
17208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-q', '--quiet'):
1733b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            quiet = True;
17408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            verbose = 0
17508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-g', '--generate'):
1763b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            generate = True
17708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-x', '--exclude'):
1783b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            exclude = True
17908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-s', '--single'):
1803b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            single = True
18108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-r', '--randomize'):
1823b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            randomize = True
183c5000dfc4098f8547461e790a91536a923124261Tim Peters        elif o in ('-f', '--fromfile'):
184c5000dfc4098f8547461e790a91536a923124261Tim Peters            fromfile = a
18508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-l', '--findleaks'):
1863b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            findleaks = True
1870179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro        elif o in ('-L', '--runleaks'):
1880179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro            runleaks = True
1899e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum        elif o in ('-t', '--threshold'):
1909e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum            import gc
1919e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum            gc.set_threshold(int(a))
1923b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        elif o in ('-T', '--coverage'):
1933b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            trace = True
19408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-u', '--use'):
195fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum            u = [x.lower() for x in a.split(',')]
196fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum            for r in u:
1973a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                if r == 'all':
1984dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    use_resources[:] = RESOURCE_NAMES
1994dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    continue
2004dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                remove = False
2014dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                if r[0] == '-':
2024dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    remove = True
2034dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    r = r[1:]
2043a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                if r not in RESOURCE_NAMES:
2053a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                    usage(1, 'Invalid -u/--use option: ' + a)
2064dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                if remove:
2074dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    if r in use_resources:
2084dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                        use_resources.remove(r)
2094dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                elif r not in use_resources:
210e41abab33b0b467acd6bdc7d73ce4b5cef4fd5bfAndrew MacIntyre                    use_resources.append(r)
211a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum    if generate and verbose:
21208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        usage(2, "-g and -v don't go together!")
213c5000dfc4098f8547461e790a91536a923124261Tim Peters    if single and fromfile:
214c5000dfc4098f8547461e790a91536a923124261Tim Peters        usage(2, "-s and -f don't go together!")
21508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
216152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    good = []
217152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    bad = []
218152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    skipped = []
2199a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake    resource_denieds = []
220e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
221d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer    if findleaks:
222a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        try:
223a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw            import gc
224a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        except ImportError:
2258a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            print 'No GC available, disabling findleaks.'
2263b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            findleaks = False
227a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        else:
2288a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # Uncomment the line below to report garbage that is not
2298a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # freeable by reference counting alone.  By default only
2308a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # garbage that is not collectable by the GC is reported.
2318a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            #gc.set_debug(gc.DEBUG_SAVEALL)
232d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            found_garbage = []
233a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw
234e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
235e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        from tempfile import gettempdir
236e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        filename = os.path.join(gettempdir(), 'pynexttest')
237e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        try:
238e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            fp = open(filename, 'r')
239fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond            next = fp.read().strip()
240e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            tests = [next]
241e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            fp.close()
242e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        except IOError:
243e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            pass
244c5000dfc4098f8547461e790a91536a923124261Tim Peters
245c5000dfc4098f8547461e790a91536a923124261Tim Peters    if fromfile:
246c5000dfc4098f8547461e790a91536a923124261Tim Peters        tests = []
247c5000dfc4098f8547461e790a91536a923124261Tim Peters        fp = open(fromfile)
248c5000dfc4098f8547461e790a91536a923124261Tim Peters        for line in fp:
249c5000dfc4098f8547461e790a91536a923124261Tim Peters            guts = line.split() # assuming no test has whitespace in its name
250c5000dfc4098f8547461e790a91536a923124261Tim Peters            if guts and not guts[0].startswith('#'):
251c5000dfc4098f8547461e790a91536a923124261Tim Peters                tests.extend(guts)
252c5000dfc4098f8547461e790a91536a923124261Tim Peters        fp.close()
253c5000dfc4098f8547461e790a91536a923124261Tim Peters
254c5000dfc4098f8547461e790a91536a923124261Tim Peters    # Strip .py extensions.
255c5000dfc4098f8547461e790a91536a923124261Tim Peters    if args:
256c5000dfc4098f8547461e790a91536a923124261Tim Peters        args = map(removepy, args)
257c5000dfc4098f8547461e790a91536a923124261Tim Peters    if tests:
258c5000dfc4098f8547461e790a91536a923124261Tim Peters        tests = map(removepy, tests)
259c5000dfc4098f8547461e790a91536a923124261Tim Peters
2606c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum    stdtests = STDTESTS[:]
2616c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum    nottests = NOTTESTS[:]
262152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if exclude:
2636c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum        for arg in args:
2646c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum            if arg in stdtests:
2656c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum                stdtests.remove(arg)
2666c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum        nottests[:0] = args
26741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        args = []
268747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum    tests = tests or args or findtests(testdir, stdtests, nottests)
269e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
270e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        tests = tests[:1]
271ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro    if randomize:
272ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro        random.shuffle(tests)
2733b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    if trace:
2743b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        import trace
2753b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix],
2763b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                             trace=False, count=True)
2773b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        coverdir = os.path.join(os.getcwd(), 'coverage')
27841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum    test_support.verbose = verbose      # Tell tests to be moderately quiet
27908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    test_support.use_resources = use_resources
2805796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum    save_modules = sys.modules.keys()
281152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    for test in tests:
28241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if not quiet:
28341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            print test
2843cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
2853b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        if trace:
2863b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            # If we're tracing code coverage, then we don't exit with status
2873b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            # if on a false return value from main.
2883b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            tracer.runctx('runtest(test, generate, verbose, quiet, testdir)',
2893b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                          globals=globals(), locals=vars())
29041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        else:
2913b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            ok = runtest(test, generate, verbose, quiet, testdir)
2923b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            if ok > 0:
2933b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                good.append(test)
2943b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            elif ok == 0:
2953b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                bad.append(test)
2963b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            else:
2973b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                skipped.append(test)
2983b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                if ok == -2:
2993b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                    resource_denieds.append(test)
300d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer        if findleaks:
301d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            gc.collect()
302d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            if gc.garbage:
3038a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                print "Warning: test created", len(gc.garbage),
3048a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                print "uncollectable object(s)."
3058a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                # move the uncollectable objects somewhere so we don't see
3068a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                # them again
307d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer                found_garbage.extend(gc.garbage)
308d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer                del gc.garbage[:]
3095796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum        # Unload the newly imported modules (best effort finalization)
3105796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum        for module in sys.modules.keys():
31151931144427faa001a6db3cfc37380526be256b6Guido van Rossum            if module not in save_modules and module.startswith("test."):
3125796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum                test_support.unload(module)
3137a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton
3147a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    # The lists won't be sorted if running with -r
3157a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    good.sort()
3167a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    bad.sort()
3177a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    skipped.sort()
318e0c446bb4ad67294f42d4cb53b4ff28413bd8ddeTim Peters
319152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if good and not quiet:
32041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if not bad and not skipped and len(good) > 1:
32141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            print "All",
32241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        print count(len(good), "test"), "OK."
3231a4d77b2527ced1052b4faae3d176b125a764325Tim Peters        if verbose:
324408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            print "CAUTION:  stdout isn't compared in verbose mode:"
325408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            print "a test that passes in verbose mode may fail without it."
326152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if bad:
327a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        print count(len(bad), "test"), "failed:"
328a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        printlist(bad)
329152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if skipped and not quiet:
330a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        print count(len(skipped), "test"), "skipped:"
331a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        printlist(skipped)
332e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
333b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        e = _ExpectedSkips()
334a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters        plat = sys.platform
335b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        if e.isvalid():
336a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            surprise = set(skipped) - e.getexpected() - set(resource_denieds)
337b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            if surprise:
338b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters                print count(len(surprise), "skip"), \
339a45da92484ceececf1cf32b4dfb16004945b001eTim Peters                      "unexpected on", plat + ":"
340a45da92484ceececf1cf32b4dfb16004945b001eTim Peters                printlist(surprise)
341b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            else:
342b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters                print "Those skips are all expected on", plat + "."
343b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        else:
344b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            print "Ask someone to teach regrtest.py about which tests are"
345b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            print "expected to get skipped on", plat + "."
346b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
347e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
348e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        alltests = findtests(testdir, stdtests, nottests)
349e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        for i in range(len(alltests)):
350e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            if tests[0] == alltests[i]:
351e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                if i == len(alltests) - 1:
352e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    os.unlink(filename)
353e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                else:
354e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp = open(filename, 'w')
355e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp.write(alltests[i+1] + '\n')
356e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp.close()
357e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                break
358e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        else:
359e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            os.unlink(filename)
360e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
3613b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    if trace:
3623b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        r = tracer.results()
3633b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        r.write_results(show_missing=True, summary=True, coverdir=coverdir)
3643b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw
3650179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro    if runleaks:
3660179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro        os.system("leaks %d" % os.getpid())
3670179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro
3685943b4ac1067e5011b66697396d5df93b5ef9af0Tim Peters    sys.exit(len(bad) > 0)
36908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
370152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
3716fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [
372152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_grammar',
373152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_opcodes',
374152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_operations',
375152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_builtin',
376152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_exceptions',
377152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_types',
378152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum   ]
379152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
3806fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [
381152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_support',
38262e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton    'test_future1',
38362e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton    'test_future2',
3848471a35febdbfbfab51b9d4b5fe51694fe6ca536Jeremy Hylton    'test_future3',
385152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    ]
386152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
3876fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossumdef findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
388152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    """Return a list of all applicable test modules."""
3896fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    if not testdir: testdir = findtestdir()
390152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    names = os.listdir(testdir)
391152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    tests = []
392152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    for name in names:
393e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        if name[:5] == "test_" and name[-3:] == os.extsep+"py":
39441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            modname = name[:-3]
39541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            if modname not in stdtests and modname not in nottests:
39641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum                tests.append(modname)
397152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    tests.sort()
398152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    return stdtests + tests
399152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
4003b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawdef runtest(test, generate, verbose, quiet, testdir=None):
4016fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """Run a single test.
4026fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    test -- the name of the test
4036fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    generate -- if true, generate output, instead of running the test
4046fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    and comparing it to a previously created output file
4056fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    verbose -- if true, print more messages
406f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick    quiet -- if true, don't print 'skipped' messages (probably redundant)
4076fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    testdir -- test directory
4086fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """
409152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    test_support.unload(test)
4103b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    if not testdir:
4113b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        testdir = findtestdir()
412152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    outputdir = os.path.join(testdir, "output")
413152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    outputfile = os.path.join(outputdir, test)
4149390cc15da5cd6920bd41bb4cd146d5d0601345fTim Peters    if verbose:
41541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        cfp = None
4160fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    else:
41774e67661a69ddb43a21a486c66965a052540cdd0Raymond Hettinger        cfp = cStringIO.StringIO()
418152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    try:
419342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters        save_stdout = sys.stdout
42041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        try:
42141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            if cfp:
42241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum                sys.stdout = cfp
42341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum                print test              # Output file starts with test name
424408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            if test.startswith('test.'):
425408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                abstest = test
426408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            else:
427408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                # Always import it from the test package
428408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                abstest = 'test.' + test
429408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            the_package = __import__(abstest, globals(), locals(), [])
430408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            the_module = getattr(the_package, test)
431d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # Most tests run to completion simply as a side-effect of
432d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # being imported.  For the benefit of tests that can't run
433d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # that way (like test_threaded_import), explicitly invoke
434d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # their test_main() function (if it exists).
435d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            indirect_test = getattr(the_module, "test_main", None)
436d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            if indirect_test is not None:
437d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters                indirect_test()
43841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        finally:
439342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters            sys.stdout = save_stdout
4409a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake    except test_support.ResourceDenied, msg:
4419a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake        if not quiet:
4429a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake            print test, "skipped --", msg
4439a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake            sys.stdout.flush()
4449a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake        return -2
4453af826ebca80f8a6c782fb590c77ac210ae9e22dThomas Wouters    except (ImportError, test_support.TestSkipped), msg:
446f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick        if not quiet:
447de4742b87f7775fc3d9fa76cd640e7cdd5ef69a2Fred Drake            print test, "skipped --", msg
4483cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
44941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return -1
450fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake    except KeyboardInterrupt:
451fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake        raise
452152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    except test_support.TestFailed, msg:
45341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        print "test", test, "failed --", msg
4543cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
45541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return 0
4569e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum    except:
45741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        type, value = sys.exc_info()[:2]
45827c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake        print "test", test, "crashed --", str(type) + ":", value
4593cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
46041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if verbose:
46141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            traceback.print_exc(file=sys.stdout)
4623cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
46341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return 0
464152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
4650fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        if not cfp:
4660fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            return 1
4670fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        output = cfp.getvalue()
468e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake        if generate:
469e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake            if output == test + "\n":
470e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                if os.path.exists(outputfile):
471e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    # Write it since it already exists (and the contents
472e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    # may have changed), but let the user know it isn't
473e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    # needed:
474e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    print "output file", outputfile, \
475e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                          "is no longer needed; consider removing it"
4760fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum                else:
4770fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum                    # We don't need it, so don't create it.
4780fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum                    return 1
4790fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp = open(outputfile, "w")
4800fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp.write(output)
4810fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp.close()
4820fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            return 1
4830fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        if os.path.exists(outputfile):
4840fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp = open(outputfile, "r")
4850fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            expected = fp.read()
4860fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp.close()
4870fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        else:
4880fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            expected = test + "\n"
4890fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        if output == expected:
4900fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            return 1
4910fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        print "test", test, "produced unexpected output:"
4923cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
4930fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        reportdiff(expected, output)
4943cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
4950fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        return 0
4960fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum
4970fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossumdef reportdiff(expected, output):
4980fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    import difflib
499c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    print "*" * 70
500c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    a = expected.splitlines(1)
501c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    b = output.splitlines(1)
502cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    sm = difflib.SequenceMatcher(a=a, b=b)
503cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    tuples = sm.get_opcodes()
504c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
505cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    def pair(x0, x1):
506c377b16d12ba325bb108eca575447d66f19294c0Tim Peters        # x0:x1 are 0-based slice indices; convert to 1-based line indices.
507cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        x0 += 1
508cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        if x0 >= x1:
509c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            return "line " + str(x0)
510cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        else:
511c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            return "lines %d-%d" % (x0, x1)
512c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
513cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    for op, a0, a1, b0, b1 in tuples:
514cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        if op == 'equal':
515cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            pass
516c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
517cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'delete':
518c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "***", pair(a0, a1), "of expected output missing:"
519cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            for line in a[a0:a1]:
520c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print "-", line,
521c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
522cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'replace':
523c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "*** mismatch between", pair(a0, a1), "of expected", \
524c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                  "output and", pair(b0, b1), "of actual output:"
525c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            for line in difflib.ndiff(a[a0:a1], b[b0:b1]):
526c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print line,
527c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
528cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'insert':
529c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "***", pair(b0, b1), "of actual output doesn't appear", \
530c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                  "in expected output after line", str(a1)+":"
531cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            for line in b[b0:b1]:
532c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print "+", line,
533c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
534cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        else:
535cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1)
536c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
5370fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    print "*" * 70
538152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
539152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir():
540152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if __name__ == '__main__':
54141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        file = sys.argv[0]
542152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
54341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        file = __file__
544152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    testdir = os.path.dirname(file) or os.curdir
545152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    return testdir
546152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
547c5000dfc4098f8547461e790a91536a923124261Tim Petersdef removepy(name):
548c5000dfc4098f8547461e790a91536a923124261Tim Peters    if name.endswith(os.extsep + "py"):
549c5000dfc4098f8547461e790a91536a923124261Tim Peters        name = name[:-3]
550c5000dfc4098f8547461e790a91536a923124261Tim Peters    return name
551c5000dfc4098f8547461e790a91536a923124261Tim Peters
552152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word):
553152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if n == 1:
55441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return "%d %s" % (n, word)
555152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
55641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return "%d %ss" % (n, word)
557152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
558a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4):
5597c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters    """Print the elements of iterable x to stdout.
560a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
561a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    Optional arg width (default 70) is the maximum line length.
562a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    Optional arg indent (default 4) is the number of blanks with which to
563a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    begin each line.
564a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    """
565a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
566ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    from textwrap import fill
567ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    blanks = ' ' * indent
568ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    print fill(' '.join(map(str, x)), width,
569ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters               initial_indent=blanks, subsequent_indent=blanks)
570a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
571de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# Map sys.platform to a string containing the basenames of tests
572de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# expected to be skipped on that platform.
5732a182dbf3f2520ad753792068391775d102b13dfTim Peters#
5742a182dbf3f2520ad753792068391775d102b13dfTim Peters# Special cases:
5752a182dbf3f2520ad753792068391775d102b13dfTim Peters#     test_pep277
5762a182dbf3f2520ad753792068391775d102b13dfTim Peters#         The _ExpectedSkips constructor adds this to the set of expected
5772a182dbf3f2520ad753792068391775d102b13dfTim Peters#         skips if not os.path.supports_unicode_filenames.
5781b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters#     test_normalization
5791b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters#         Whether a skip is expected here depends on whether a large test
5801b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters#         input file has been downloaded.  test_normalization.skip_expected
5811babdfc48afc60afe5ae708f77dad8a641bf36ecTim Peters#         controls that.
582b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#     test_socket_ssl
583b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#         Controlled by test_socket_ssl.skip_expected.  Requires the network
584b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#         resource, and a socket module with ssl support.
58555b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#     test_timeout
58655b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#         Controlled by test_timeout.skip_expected.  Requires the network
58755b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#         resource and a socket module.
5883e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang#     test_codecmaps_*
5893e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang#         Whether a skip is expected here depends on whether a large test
5903e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang#         input file has been downloaded.  test_codecmaps_*.skip_expected
5913e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang#         controls that.
592de14a30d1d70073d36f207fe432e4adad5178399Tim Peters
593f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = {
594f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum    'win32':
595f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """
596c7c516aa5140d255f18ffd2e8569434f0904f5dbTim Peters        test__locale
597901dc983168d4ca706ed664a8f5134ee3add26edRaymond Hettinger        test_applesingle
598f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_al
599823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
60078e35f931128d017d5955841eac8c397ff32595cTim Peters        test_bsddb3
601f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cd
602f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cl
603f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_commands
604f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_crypt
605d703057752d52cef6082a920879a0b62cdeffacaTim Peters        test_curses
606f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dbm
607f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dl
608f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_fcntl
609f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_fork1
610f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_gdbm
611f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_gl
612f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_grp
613f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_imgfile
614fd8e6e599051de07cdb8e9abc9dbadf37c5fca0cTim Peters        test_ioctl
615f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_largefile
616f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_linuxaudiodev
617f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_mhlib
618de14a30d1d70073d36f207fe432e4adad5178399Tim Peters        test_mpz
619f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_nis
620f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_openpty
621efc4b121694888e00072f5a079de5496afecb05aTim Peters        test_ossaudiodev
622f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_poll
623003eb3088283927e3155f2e2317d3d516edd9645Tim Peters        test_posix
624f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_pty
625f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_pwd
6261e33ffa5c719ec611e182681c4a5f2ceb62a08f5Tim Peters        test_resource
627f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_signal
628f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_sunaudiodev
629f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_timing
630f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """,
631f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum    'linux2':
632f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """
633f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_al
634944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
635823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
636f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cd
637f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cl
638f66dacdb017c7481c3ba4f0743d5446146de33c8Guido van Rossum        test_curses
639f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dl
640f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_gl
641f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_imgfile
642f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_largefile
6434507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum        test_linuxaudiodev
644f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_nis
645f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_ntpath
6464507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum        test_ossaudiodev
647f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_sunaudiodev
648f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """,
64949a806edbb298f2a5be3598bd80c21392cb6968dJack Jansen   'mac':
650aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        """
651aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_al
652679751455798fab6425fda749a19e783e58b210eJack Jansen        test_atexit
653aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_bsddb
654823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
655679751455798fab6425fda749a19e783e58b210eJack Jansen        test_bsddb3
656679751455798fab6425fda749a19e783e58b210eJack Jansen        test_bz2
657aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_cd
658aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_cl
659aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_commands
660aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_crypt
661b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen        test_curses
662aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_dbm
663aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_dl
664aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_fcntl
665aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_fork1
666aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_gl
667aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_grp
668c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen        test_ioctl
669aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_imgfile
670aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_largefile
671aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_linuxaudiodev
672aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_locale
673aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_mmap
674679751455798fab6425fda749a19e783e58b210eJack Jansen        test_mpz
675aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_nis
676aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_ntpath
677aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_openpty
678679751455798fab6425fda749a19e783e58b210eJack Jansen        test_ossaudiodev
679aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_poll
680679751455798fab6425fda749a19e783e58b210eJack Jansen        test_popen
681aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_popen2
6825bb97e66dcbb110877ac17209c7d2641db6f6006Jack Jansen        test_posix
683aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_pty
684aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_pwd
685679751455798fab6425fda749a19e783e58b210eJack Jansen        test_resource
686aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_signal
687aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_sunaudiodev
688aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_sundry
689c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen        test_tarfile
690aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_timing
691aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        """,
69221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'unixware7':
6930ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        """
6940ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_al
695944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
6960ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_bsddb
697823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
6980ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_cd
6990ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_cl
7000ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_dl
7010ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_gl
7020ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_imgfile
7030ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_largefile
7040ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_linuxaudiodev
7050ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_minidom
7060ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_nis
7070ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_ntpath
7080ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_openpty
7090ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_pyexpat
7100ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_sax
7110ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_sunaudiodev
7120ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_sundry
7130ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        """,
71421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'openunix8':
71521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """
71621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_al
717944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
71821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_bsddb
719823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
72021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cd
72121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cl
72221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_dl
72321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_gl
72421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_imgfile
72521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_largefile
72621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_linuxaudiodev
72721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_minidom
72821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_nis
72921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_ntpath
73021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_openpty
73121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_pyexpat
73221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sax
73321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sunaudiodev
73421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sundry
73521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """,
73621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'sco_sv3':
73721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """
73821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_al
739944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
74021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_asynchat
74121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_bsddb
742823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
74321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cd
74421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cl
74521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_dl
74621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_fork1
74721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_gettext
74821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_gl
74921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_imgfile
75021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_largefile
75121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_linuxaudiodev
75221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_locale
75321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_minidom
75421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_nis
75521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_ntpath
75621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_openpty
75721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_pyexpat
75821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_queue
75921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sax
76021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sunaudiodev
76121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sundry
76221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_thread
76321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threaded_import
76421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threadedtempfile
76521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threading
76621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """,
767e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum    'riscos':
768e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        """
769e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_al
770944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
771e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_asynchat
772a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis        test_atexit
773e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_bsddb
774823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
775a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis        test_bsddb3
776e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_cd
777e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_cl
778e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_commands
779e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_crypt
780e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_dbm
781e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_dl
782e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_fcntl
783e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_fork1
784e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_gdbm
785e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_gl
786e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_grp
787e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_imgfile
788e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_largefile
789e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_linuxaudiodev
790e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_locale
791e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_mmap
792e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_nis
793e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_ntpath
794e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_openpty
795e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_poll
796e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_popen2
797e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_pty
798e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_pwd
799e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_strop
800e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_sunaudiodev
801e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_sundry
802e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_thread
803e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threaded_import
804e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threadedtempfile
805e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threading
806e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_timing
807e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        """,
8088a97f4a380a7a356730e48406f8269c3efe5e6ebJack Jansen    'darwin':
809398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        """
8102bfb94c871caeae622174485264f407d9df354b9Brett Cannon        test__locale
811398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_al
812acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_bsddb
8139d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum        test_bsddb3
814398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_cd
815398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_cl
816398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_curses
817398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_dl
818398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_gdbm
819398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_gl
820398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_imgfile
821398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_largefile
822398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_linuxaudiodev
823acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_locale
824398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_minidom
8259d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum        test_mpz
826398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_nis
827398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_ntpath
828acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_ossaudiodev
829398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_poll
830398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_sunaudiodev
831398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        """,
83211c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum    'sunos5':
83311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        """
83411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_al
835944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
83611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_bsddb
837823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
83811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_cd
83911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_cl
84011c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_curses
84111c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_dbm
84211c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_gdbm
84311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_gl
84411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_gzip
84511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_imgfile
84611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_linuxaudiodev
84711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_mpz
84811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_openpty
84911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_zipfile
85011c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_zlib
851ed375e18d10d37bfea1769aa1fe69795df6cbc10Jeremy Hylton        """,
852b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro    'hp-ux11':
853b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        """
854b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_al
855944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
856b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_bsddb
857823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
858b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_cd
859b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_cl
860b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_curses
861b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_dl
862b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_gdbm
863b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_gl
864b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_gzip
865b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_imgfile
866b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_largefile
867b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_linuxaudiodev
868b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_locale
869b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_minidom
870b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_nis
871b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_ntpath
872b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_openpty
873b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_pyexpat
874b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_sax
875b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_sunaudiodev
876b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_zipfile
877b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_zlib
878b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        """,
879f90ae20354ceb501f0ba0b6459df17f1a8005a47Martin v. Löwis    'atheos':
880c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        """
881c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_al
882944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
883823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
884c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_cd
885c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_cl
886c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_curses
887c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_dl
888c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_gdbm
889c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_gl
890c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_imgfile
891c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_largefile
892c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_linuxaudiodev
893c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_locale
894c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_mhlib
895c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_mmap
896c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_mpz
897c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_nis
898c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_poll
899c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_popen2
900c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_resource
901c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_sunaudiodev
902c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        """,
90325115940604e6051aa2fb16be88c6b8f64577251Jason Tishler    'cygwin':
90425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        """
90525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_al
906944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
907823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
908b0f89e05ad9aaf229033bbc81be43c1f826e3930Tim Peters        test_bsddb3
90925115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_cd
91025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_cl
91125115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_curses
91225115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_dbm
91325115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_gl
91425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_imgfile
915c23f39ca9dc540ace879fcf9746254d94293b86fJason Tishler        test_ioctl
91625115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_largefile
91725115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_linuxaudiodev
91825115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_locale
91925115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_mpz
92025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_nis
9215c4ded2c3b59aa134b82ab17cdfe7ab633194ca6Jason Tishler        test_ossaudiodev
92225115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_socketserver
92325115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_sunaudiodev
92425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        """,
925fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre    'os2emx':
926fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        """
927fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_al
928944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
929fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_audioop
930823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
931fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_bsddb3
932fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_cd
933fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_cl
934fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_commands
935fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_curses
936fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_dl
937fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_gl
938fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_imgfile
939fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_largefile
940fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_linuxaudiodev
941fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_mhlib
942fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_mmap
943fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_nis
944fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_openpty
945fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_ossaudiodev
946fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_pty
947fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_resource
948fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_signal
949fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_sunaudiodev
950fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        """,
951944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum    'freebsd4':
952944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        """
953944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_aepack
954944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_al
955944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
956944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_bsddb
957944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_bsddb3
958944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_cd
959944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_cl
960944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_gl
961944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_imgfile
962944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_linuxaudiodev
963944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_locale
964944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_macfs
965944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_macostools
966944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_nis
967944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_normalization
968944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_ossaudiodev
969944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_pep277
970944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_plistlib
971944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_scriptpackages
972944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_socket_ssl
973944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_socketserver
974944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_sunaudiodev
975944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_timeout
976944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_unicode_file
977944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_urllibnet
978944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_winreg
979944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_winsound
98056f88113b7272be8403f9b722c943e679e23d362Martin v. Löwis        """,
981f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum}
98232d0c1b458bbdda8d8895f5b5bedfb4644f839e7Martin v. Löwis_expectations['freebsd5'] = _expectations['freebsd4']
983f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum
984b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips:
985b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters    def __init__(self):
9862a182dbf3f2520ad753792068391775d102b13dfTim Peters        import os.path
9871b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters        from test import test_normalization
988b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters        from test import test_socket_ssl
98955b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz        from test import test_timeout
9903e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang        from test import test_codecmaps_cn, test_codecmaps_jp
9913e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang        from test import test_codecmaps_kr, test_codecmaps_tw
9925ef601854efbf467c45e2fe2b087833c1916ab54Hye-Shik Chang        from test import test_codecmaps_hk
9931b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
9947c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters        self.valid = False
995de14a30d1d70073d36f207fe432e4adad5178399Tim Peters        if sys.platform in _expectations:
996f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum            s = _expectations[sys.platform]
997a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.expected = set(s.split())
9981b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
9992a182dbf3f2520ad753792068391775d102b13dfTim Peters            if not os.path.supports_unicode_filenames:
10002a182dbf3f2520ad753792068391775d102b13dfTim Peters                self.expected.add('test_pep277')
10011b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
10021b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters            if test_normalization.skip_expected:
10031b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters                self.expected.add('test_normalization')
10041b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
1005b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters            if test_socket_ssl.skip_expected:
1006b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters                self.expected.add('test_socket_ssl')
1007b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters
100855b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz            if test_timeout.skip_expected:
100955b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz                self.expected.add('test_timeout')
101055b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz
10115ef601854efbf467c45e2fe2b087833c1916ab54Hye-Shik Chang            for cc in ('cn', 'jp', 'kr', 'tw', 'hk'):
10123e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang                if eval('test_codecmaps_' + cc).skip_expected:
10133e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang                    self.expected.add('test_codecmaps_' + cc)
10143e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang
10156afc5e02fa775517fa0b6455906a8c203baf9cd2Jack Jansen            if not sys.platform in ("mac", "darwin"):
10167035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                MAC_ONLY = ["test_macostools", "test_macfs", "test_aepack",
10177035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                            "test_plistlib", "test_scriptpackages"]
10187035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                for skip in MAC_ONLY:
10197035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                    self.expected.add(skip)
1020ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters
1021ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters            if sys.platform != "win32":
10227035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                WIN_ONLY = ["test_unicode_file", "test_winreg",
10237035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                            "test_winsound"]
10247035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                for skip in WIN_ONLY:
10257035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                    self.expected.add(skip)
1026f2715e076435b74638acb81512c2ee014f75aea2Tim Peters
10277c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters            self.valid = True
1028b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1029b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters    def isvalid(self):
1030b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        "Return true iff _ExpectedSkips knows about the current platform."
1031b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        return self.valid
1032b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1033b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters    def getexpected(self):
1034b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        """Return set of test names we expect to skip on current platform.
1035b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1036b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        self.isvalid() must be true.
1037b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        """
1038b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1039b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        assert self.isvalid()
1040b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        return self.expected
1041b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1042152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumif __name__ == '__main__':
1043408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # Remove regrtest.py's own directory from the module search path.  This
1044408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # prevents relative imports from working, and relative imports will screw
1045408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # up the testing framework.  E.g. if both test.test_support and
1046408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # test_support are imported, they will not contain the same globals, and
1047408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # much of the testing framework relies on the globals in the
1048408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # test.test_support module.
1049408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0])))
1050408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    i = pathlen = len(sys.path)
1051408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    while i >= 0:
1052408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw        i -= 1
1053408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw        if os.path.abspath(os.path.normpath(sys.path[i])) == mydir:
1054408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            del sys.path[i]
1055408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    if len(sys.path) == pathlen:
1056408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw        print 'Could not find %r in sys.path to remove it' % mydir
105708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    main()
1058