regrtest.py revision 0179a18034b2316a70655d0f05bfbb20a0881f17
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
744dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred DrakeTo enable all resources except one, use '-uall,-<resource>'.  For
754dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeexample, to run all the tests except for the bsddb tests, give the
764dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeoption '-uall,-bsddb'.
77152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum"""
78152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
79152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport os
803b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport sys
81152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport getopt
82ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaroimport random
83dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossumimport warnings
843b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport cStringIO
853b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport traceback
86dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum
87dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# I see no other way to suppress these warnings;
88dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# putting them in test_grammar.py has no effect:
8988b1defb6f770c4f74788e8296b88fc31c3936ceGuido van Rossumwarnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
90dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum                        ".*test.test_grammar$")
91c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossumif sys.maxint > 0x7fffffff:
92c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    # Also suppress them in <string>, because for 64-bit platforms,
93c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    # that's where test_grammar.py hides them.
94c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum    warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
95c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum                            "<string>")
96152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
97bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# MacOSX (a.k.a. Darwin) has a default stack size that is too small
98bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# for deeply recursive regular expressions.  We see this as crashes in
99bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# the Python test suite when running test_re.py and test_sre.py.  The
100bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# fix is to set the stack limit to 2048.
101bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# This approach may also be useful for other Unixy platforms that
102bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# suffer from small default stack limits.
103bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossumif sys.platform == 'darwin':
104bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    try:
105bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        import resource
106bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    except ImportError:
107bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        pass
108bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum    else:
109bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        soft, hard = resource.getrlimit(resource.RLIMIT_STACK)
110bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        newsoft = min(hard, max(soft, 1024*2048))
111bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum        resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard))
112bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum
11304f357cffef6d764f2f0ff2671dabde75ec250d1Barry Warsawfrom test import test_support
1143a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
115315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van RossumRESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb')
1163a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
1173a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake
11808fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''):
11908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    print __doc__
12008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    if msg: print msg
12108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    sys.exit(code)
12208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
12308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
1243b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawdef main(tests=None, testdir=None, verbose=0, quiet=False, generate=False,
1253b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw         exclude=False, single=False, randomize=False, fromfile=None,
1260179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro         findleaks=False, use_resources=None, trace=False, runleaks=False):
1276fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """Execute a test suite.
1286fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1297e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters    This also parses command-line options and modifies its behavior
130004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake    accordingly.
1316fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1326fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    tests -- a list of strings containing test names (optional)
1336fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    testdir -- the directory in which to look for tests (optional)
1346fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1356fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    Users other than the Python test suite will certainly want to
1366fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    specify testdir; if it's omitted, the directory containing the
137004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake    Python test suite is searched for.
1386fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum
1396fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    If the tests argument is omitted, the tests listed on the
1406fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    command-line will be used.  If that's empty, too, then all *.py
1416fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    files beginning with test_ will be used.
142ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro
1433b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    The other default arguments (verbose, quiet, generate, exclude, single,
1443b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    randomize, findleaks, use_resources, and trace) allow programmers calling
1453b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    main() directly to set the values that would normally be set by flags on
1463b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    the command line.
1476fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """
148004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake
1498dee809410e2d433bb0be5d8a1699736b90db0b5Tim Peters    test_support.record_original_stdout(sys.stdout)
150152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    try:
1510179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro        opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsrf:lu:t:TL',
15208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw                                   ['help', 'verbose', 'quiet', 'generate',
153c5000dfc4098f8547461e790a91536a923124261Tim Peters                                    'exclude', 'single', 'random', 'fromfile',
1543b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                                    'findleaks', 'use=', 'threshold=', 'trace',
1550179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro                                    'runleaks'
1563b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                                    ])
157152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    except getopt.error, msg:
15808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        usage(2, msg)
15908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
16008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    # Defaults
16108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    if use_resources is None:
16208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        use_resources = []
163152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    for o, a in opts:
16408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        if o in ('-h', '--help'):
16508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            usage(0)
16608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-v', '--verbose'):
16708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            verbose += 1
16808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-q', '--quiet'):
1693b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            quiet = True;
17008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw            verbose = 0
17108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-g', '--generate'):
1723b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            generate = True
17308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-x', '--exclude'):
1743b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            exclude = True
17508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-s', '--single'):
1763b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            single = True
17708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-r', '--randomize'):
1783b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            randomize = True
179c5000dfc4098f8547461e790a91536a923124261Tim Peters        elif o in ('-f', '--fromfile'):
180c5000dfc4098f8547461e790a91536a923124261Tim Peters            fromfile = a
18108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-l', '--findleaks'):
1823b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            findleaks = True
1830179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro        elif o in ('-L', '--runleaks'):
1840179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro            runleaks = True
1859e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum        elif o in ('-t', '--threshold'):
1869e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum            import gc
1879e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum            gc.set_threshold(int(a))
1883b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        elif o in ('-T', '--coverage'):
1893b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            trace = True
19008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        elif o in ('-u', '--use'):
191fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum            u = [x.lower() for x in a.split(',')]
192fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum            for r in u:
1933a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                if r == 'all':
1944dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    use_resources[:] = RESOURCE_NAMES
1954dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    continue
1964dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                remove = False
1974dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                if r[0] == '-':
1984dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    remove = True
1994dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    r = r[1:]
2003a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                if r not in RESOURCE_NAMES:
2013a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake                    usage(1, 'Invalid -u/--use option: ' + a)
2024dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                if remove:
2034dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                    if r in use_resources:
2044dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                        use_resources.remove(r)
2054dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake                elif r not in use_resources:
206e41abab33b0b467acd6bdc7d73ce4b5cef4fd5bfAndrew MacIntyre                    use_resources.append(r)
207a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum    if generate and verbose:
20808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw        usage(2, "-g and -v don't go together!")
209c5000dfc4098f8547461e790a91536a923124261Tim Peters    if single and fromfile:
210c5000dfc4098f8547461e790a91536a923124261Tim Peters        usage(2, "-s and -f don't go together!")
21108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
212152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    good = []
213152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    bad = []
214152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    skipped = []
2159a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake    resource_denieds = []
216e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
217d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer    if findleaks:
218a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        try:
219a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw            import gc
220a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        except ImportError:
2218a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            print 'No GC available, disabling findleaks.'
2223b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            findleaks = False
223a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw        else:
2248a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # Uncomment the line below to report garbage that is not
2258a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # freeable by reference counting alone.  By default only
2268a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            # garbage that is not collectable by the GC is reported.
2278a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer            #gc.set_debug(gc.DEBUG_SAVEALL)
228d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            found_garbage = []
229a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw
230e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
231e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        from tempfile import gettempdir
232e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        filename = os.path.join(gettempdir(), 'pynexttest')
233e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        try:
234e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            fp = open(filename, 'r')
235fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond            next = fp.read().strip()
236e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            tests = [next]
237e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            fp.close()
238e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        except IOError:
239e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            pass
240c5000dfc4098f8547461e790a91536a923124261Tim Peters
241c5000dfc4098f8547461e790a91536a923124261Tim Peters    if fromfile:
242c5000dfc4098f8547461e790a91536a923124261Tim Peters        tests = []
243c5000dfc4098f8547461e790a91536a923124261Tim Peters        fp = open(fromfile)
244c5000dfc4098f8547461e790a91536a923124261Tim Peters        for line in fp:
245c5000dfc4098f8547461e790a91536a923124261Tim Peters            guts = line.split() # assuming no test has whitespace in its name
246c5000dfc4098f8547461e790a91536a923124261Tim Peters            if guts and not guts[0].startswith('#'):
247c5000dfc4098f8547461e790a91536a923124261Tim Peters                tests.extend(guts)
248c5000dfc4098f8547461e790a91536a923124261Tim Peters        fp.close()
249c5000dfc4098f8547461e790a91536a923124261Tim Peters
250c5000dfc4098f8547461e790a91536a923124261Tim Peters    # Strip .py extensions.
251c5000dfc4098f8547461e790a91536a923124261Tim Peters    if args:
252c5000dfc4098f8547461e790a91536a923124261Tim Peters        args = map(removepy, args)
253c5000dfc4098f8547461e790a91536a923124261Tim Peters    if tests:
254c5000dfc4098f8547461e790a91536a923124261Tim Peters        tests = map(removepy, tests)
255c5000dfc4098f8547461e790a91536a923124261Tim Peters
2566c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum    stdtests = STDTESTS[:]
2576c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum    nottests = NOTTESTS[:]
258152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if exclude:
2596c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum        for arg in args:
2606c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum            if arg in stdtests:
2616c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum                stdtests.remove(arg)
2626c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum        nottests[:0] = args
26341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        args = []
264747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum    tests = tests or args or findtests(testdir, stdtests, nottests)
265e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
266e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        tests = tests[:1]
267ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro    if randomize:
268ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro        random.shuffle(tests)
2693b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    if trace:
2703b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        import trace
2713b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix],
2723b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                             trace=False, count=True)
2733b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        coverdir = os.path.join(os.getcwd(), 'coverage')
27441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum    test_support.verbose = verbose      # Tell tests to be moderately quiet
27508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    test_support.use_resources = use_resources
2765796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum    save_modules = sys.modules.keys()
277152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    for test in tests:
27841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if not quiet:
27941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            print test
2803cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
2813b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        if trace:
2823b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            # If we're tracing code coverage, then we don't exit with status
2833b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            # if on a false return value from main.
2843b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            tracer.runctx('runtest(test, generate, verbose, quiet, testdir)',
2853b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                          globals=globals(), locals=vars())
28641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        else:
2873b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            ok = runtest(test, generate, verbose, quiet, testdir)
2883b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            if ok > 0:
2893b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                good.append(test)
2903b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            elif ok == 0:
2913b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                bad.append(test)
2923b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw            else:
2933b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                skipped.append(test)
2943b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                if ok == -2:
2953b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw                    resource_denieds.append(test)
296d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer        if findleaks:
297d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            gc.collect()
298d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer            if gc.garbage:
2998a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                print "Warning: test created", len(gc.garbage),
3008a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                print "uncollectable object(s)."
3018a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                # move the uncollectable objects somewhere so we don't see
3028a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer                # them again
303d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer                found_garbage.extend(gc.garbage)
304d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer                del gc.garbage[:]
3055796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum        # Unload the newly imported modules (best effort finalization)
3065796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum        for module in sys.modules.keys():
30751931144427faa001a6db3cfc37380526be256b6Guido van Rossum            if module not in save_modules and module.startswith("test."):
3085796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum                test_support.unload(module)
3097a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton
3107a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    # The lists won't be sorted if running with -r
3117a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    good.sort()
3127a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    bad.sort()
3137a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton    skipped.sort()
314e0c446bb4ad67294f42d4cb53b4ff28413bd8ddeTim Peters
315152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if good and not quiet:
31641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if not bad and not skipped and len(good) > 1:
31741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            print "All",
31841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        print count(len(good), "test"), "OK."
3191a4d77b2527ced1052b4faae3d176b125a764325Tim Peters        if verbose:
320408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            print "CAUTION:  stdout isn't compared in verbose mode:"
321408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            print "a test that passes in verbose mode may fail without it."
322152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if bad:
323a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        print count(len(bad), "test"), "failed:"
324a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        printlist(bad)
325152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if skipped and not quiet:
326a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        print count(len(skipped), "test"), "skipped:"
327a45da92484ceececf1cf32b4dfb16004945b001eTim Peters        printlist(skipped)
328e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
329b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        e = _ExpectedSkips()
330a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters        plat = sys.platform
331b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        if e.isvalid():
332a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            surprise = set(skipped) - e.getexpected() - set(resource_denieds)
333b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            if surprise:
334b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters                print count(len(surprise), "skip"), \
335a45da92484ceececf1cf32b4dfb16004945b001eTim Peters                      "unexpected on", plat + ":"
336a45da92484ceececf1cf32b4dfb16004945b001eTim Peters                printlist(surprise)
337b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            else:
338b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters                print "Those skips are all expected on", plat + "."
339b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        else:
340b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            print "Ask someone to teach regrtest.py about which tests are"
341b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters            print "expected to get skipped on", plat + "."
342b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
343e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw    if single:
344e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        alltests = findtests(testdir, stdtests, nottests)
345e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        for i in range(len(alltests)):
346e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            if tests[0] == alltests[i]:
347e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                if i == len(alltests) - 1:
348e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    os.unlink(filename)
349e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                else:
350e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp = open(filename, 'w')
351e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp.write(alltests[i+1] + '\n')
352e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                    fp.close()
353e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw                break
354e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw        else:
355e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw            os.unlink(filename)
356e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw
3573b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    if trace:
3583b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        r = tracer.results()
3593b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        r.write_results(show_missing=True, summary=True, coverdir=coverdir)
3603b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw
3610179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro    if runleaks:
3620179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro        os.system("leaks %d" % os.getpid())
3630179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro
3645943b4ac1067e5011b66697396d5df93b5ef9af0Tim Peters    sys.exit(len(bad) > 0)
36508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw
366152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
3676fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [
368152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_grammar',
369152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_opcodes',
370152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_operations',
371152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_builtin',
372152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_exceptions',
373152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_types',
374152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum   ]
375152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
3766fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [
377152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    'test_support',
37862e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton    'test_future1',
37962e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton    'test_future2',
3808471a35febdbfbfab51b9d4b5fe51694fe6ca536Jeremy Hylton    'test_future3',
381152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    ]
382152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
3836fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossumdef findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
384152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    """Return a list of all applicable test modules."""
3856fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    if not testdir: testdir = findtestdir()
386152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    names = os.listdir(testdir)
387152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    tests = []
388152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    for name in names:
389e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        if name[:5] == "test_" and name[-3:] == os.extsep+"py":
39041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            modname = name[:-3]
39141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            if modname not in stdtests and modname not in nottests:
39241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum                tests.append(modname)
393152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    tests.sort()
394152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    return stdtests + tests
395152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
3963b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawdef runtest(test, generate, verbose, quiet, testdir=None):
3976fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """Run a single test.
3986fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    test -- the name of the test
3996fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    generate -- if true, generate output, instead of running the test
4006fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    and comparing it to a previously created output file
4016fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    verbose -- if true, print more messages
402f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick    quiet -- if true, don't print 'skipped' messages (probably redundant)
4036fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    testdir -- test directory
4046fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum    """
405152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    test_support.unload(test)
4063b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw    if not testdir:
4073b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw        testdir = findtestdir()
408152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    outputdir = os.path.join(testdir, "output")
409152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    outputfile = os.path.join(outputdir, test)
4109390cc15da5cd6920bd41bb4cd146d5d0601345fTim Peters    if verbose:
41141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        cfp = None
4120fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    else:
41374e67661a69ddb43a21a486c66965a052540cdd0Raymond Hettinger        cfp = cStringIO.StringIO()
414152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    try:
415342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters        save_stdout = sys.stdout
41641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        try:
41741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            if cfp:
41841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum                sys.stdout = cfp
41941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum                print test              # Output file starts with test name
420408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            if test.startswith('test.'):
421408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                abstest = test
422408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            else:
423408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                # Always import it from the test package
424408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw                abstest = 'test.' + test
425408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            the_package = __import__(abstest, globals(), locals(), [])
426408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            the_module = getattr(the_package, test)
427d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # Most tests run to completion simply as a side-effect of
428d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # being imported.  For the benefit of tests that can't run
429d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # that way (like test_threaded_import), explicitly invoke
430d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            # their test_main() function (if it exists).
431d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            indirect_test = getattr(the_module, "test_main", None)
432d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters            if indirect_test is not None:
433d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters                indirect_test()
43441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        finally:
435342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters            sys.stdout = save_stdout
4369a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake    except test_support.ResourceDenied, msg:
4379a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake        if not quiet:
4389a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake            print test, "skipped --", msg
4399a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake            sys.stdout.flush()
4409a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake        return -2
4413af826ebca80f8a6c782fb590c77ac210ae9e22dThomas Wouters    except (ImportError, test_support.TestSkipped), msg:
442f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick        if not quiet:
443de4742b87f7775fc3d9fa76cd640e7cdd5ef69a2Fred Drake            print test, "skipped --", msg
4443cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
44541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return -1
446fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake    except KeyboardInterrupt:
447fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake        raise
448152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    except test_support.TestFailed, msg:
44941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        print "test", test, "failed --", msg
4503cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
45141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return 0
4529e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum    except:
45341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        type, value = sys.exc_info()[:2]
45427c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake        print "test", test, "crashed --", str(type) + ":", value
4553cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
45641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        if verbose:
45741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum            traceback.print_exc(file=sys.stdout)
4583cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum            sys.stdout.flush()
45941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return 0
460152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
4610fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        if not cfp:
4620fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            return 1
4630fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        output = cfp.getvalue()
464e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake        if generate:
465e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake            if output == test + "\n":
466e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                if os.path.exists(outputfile):
467e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    # Write it since it already exists (and the contents
468e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    # may have changed), but let the user know it isn't
469e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    # needed:
470e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                    print "output file", outputfile, \
471e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake                          "is no longer needed; consider removing it"
4720fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum                else:
4730fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum                    # We don't need it, so don't create it.
4740fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum                    return 1
4750fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp = open(outputfile, "w")
4760fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp.write(output)
4770fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp.close()
4780fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            return 1
4790fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        if os.path.exists(outputfile):
4800fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp = open(outputfile, "r")
4810fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            expected = fp.read()
4820fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            fp.close()
4830fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        else:
4840fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            expected = test + "\n"
4850fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        if output == expected:
4860fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum            return 1
4870fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        print "test", test, "produced unexpected output:"
4883cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
4890fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        reportdiff(expected, output)
4903cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum        sys.stdout.flush()
4910fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum        return 0
4920fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum
4930fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossumdef reportdiff(expected, output):
4940fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    import difflib
495c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    print "*" * 70
496c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    a = expected.splitlines(1)
497c377b16d12ba325bb108eca575447d66f19294c0Tim Peters    b = output.splitlines(1)
498cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    sm = difflib.SequenceMatcher(a=a, b=b)
499cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    tuples = sm.get_opcodes()
500c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
501cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    def pair(x0, x1):
502c377b16d12ba325bb108eca575447d66f19294c0Tim Peters        # x0:x1 are 0-based slice indices; convert to 1-based line indices.
503cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        x0 += 1
504cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        if x0 >= x1:
505c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            return "line " + str(x0)
506cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        else:
507c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            return "lines %d-%d" % (x0, x1)
508c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
509cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum    for op, a0, a1, b0, b1 in tuples:
510cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        if op == 'equal':
511cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            pass
512c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
513cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'delete':
514c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "***", pair(a0, a1), "of expected output missing:"
515cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            for line in a[a0:a1]:
516c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print "-", line,
517c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
518cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'replace':
519c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "*** mismatch between", pair(a0, a1), "of expected", \
520c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                  "output and", pair(b0, b1), "of actual output:"
521c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            for line in difflib.ndiff(a[a0:a1], b[b0:b1]):
522c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print line,
523c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
524cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        elif op == 'insert':
525c377b16d12ba325bb108eca575447d66f19294c0Tim Peters            print "***", pair(b0, b1), "of actual output doesn't appear", \
526c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                  "in expected output after line", str(a1)+":"
527cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            for line in b[b0:b1]:
528c377b16d12ba325bb108eca575447d66f19294c0Tim Peters                print "+", line,
529c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
530cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum        else:
531cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum            print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1)
532c377b16d12ba325bb108eca575447d66f19294c0Tim Peters
5330fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum    print "*" * 70
534152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
535152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir():
536152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if __name__ == '__main__':
53741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        file = sys.argv[0]
538152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
53941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        file = __file__
540152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    testdir = os.path.dirname(file) or os.curdir
541152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    return testdir
542152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
543c5000dfc4098f8547461e790a91536a923124261Tim Petersdef removepy(name):
544c5000dfc4098f8547461e790a91536a923124261Tim Peters    if name.endswith(os.extsep + "py"):
545c5000dfc4098f8547461e790a91536a923124261Tim Peters        name = name[:-3]
546c5000dfc4098f8547461e790a91536a923124261Tim Peters    return name
547c5000dfc4098f8547461e790a91536a923124261Tim Peters
548152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word):
549152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    if n == 1:
55041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return "%d %s" % (n, word)
551152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum    else:
55241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum        return "%d %ss" % (n, word)
553152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum
554a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4):
5557c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters    """Print the elements of iterable x to stdout.
556a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
557a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    Optional arg width (default 70) is the maximum line length.
558a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    Optional arg indent (default 4) is the number of blanks with which to
559a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    begin each line.
560a45da92484ceececf1cf32b4dfb16004945b001eTim Peters    """
561a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
562ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    from textwrap import fill
563ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    blanks = ' ' * indent
564ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters    print fill(' '.join(map(str, x)), width,
565ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters               initial_indent=blanks, subsequent_indent=blanks)
566a45da92484ceececf1cf32b4dfb16004945b001eTim Peters
567de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# Map sys.platform to a string containing the basenames of tests
568de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# expected to be skipped on that platform.
5692a182dbf3f2520ad753792068391775d102b13dfTim Peters#
5702a182dbf3f2520ad753792068391775d102b13dfTim Peters# Special cases:
5712a182dbf3f2520ad753792068391775d102b13dfTim Peters#     test_pep277
5722a182dbf3f2520ad753792068391775d102b13dfTim Peters#         The _ExpectedSkips constructor adds this to the set of expected
5732a182dbf3f2520ad753792068391775d102b13dfTim Peters#         skips if not os.path.supports_unicode_filenames.
5741b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters#     test_normalization
5751b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters#         Whether a skip is expected here depends on whether a large test
5761b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters#         input file has been downloaded.  test_normalization.skip_expected
5771babdfc48afc60afe5ae708f77dad8a641bf36ecTim Peters#         controls that.
578b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#     test_socket_ssl
579b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#         Controlled by test_socket_ssl.skip_expected.  Requires the network
580b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters#         resource, and a socket module with ssl support.
58155b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#     test_timeout
58255b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#         Controlled by test_timeout.skip_expected.  Requires the network
58355b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz#         resource and a socket module.
5843e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang#     test_codecmaps_*
5853e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang#         Whether a skip is expected here depends on whether a large test
5863e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang#         input file has been downloaded.  test_codecmaps_*.skip_expected
5873e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang#         controls that.
588de14a30d1d70073d36f207fe432e4adad5178399Tim Peters
589f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = {
590f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum    'win32':
591f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """
592c7c516aa5140d255f18ffd2e8569434f0904f5dbTim Peters        test__locale
593901dc983168d4ca706ed664a8f5134ee3add26edRaymond Hettinger        test_applesingle
594f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_al
595823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
59678e35f931128d017d5955841eac8c397ff32595cTim Peters        test_bsddb3
597f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cd
598f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cl
599f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_commands
600f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_crypt
601d703057752d52cef6082a920879a0b62cdeffacaTim Peters        test_curses
602f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dbm
603f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dl
604f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_fcntl
605f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_fork1
606f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_gdbm
607f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_gl
608f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_grp
609f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_imgfile
610fd8e6e599051de07cdb8e9abc9dbadf37c5fca0cTim Peters        test_ioctl
611f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_largefile
612f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_linuxaudiodev
613f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_mhlib
614de14a30d1d70073d36f207fe432e4adad5178399Tim Peters        test_mpz
615f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_nis
616f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_openpty
617efc4b121694888e00072f5a079de5496afecb05aTim Peters        test_ossaudiodev
618f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_poll
619003eb3088283927e3155f2e2317d3d516edd9645Tim Peters        test_posix
620f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_pty
621f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_pwd
6221e33ffa5c719ec611e182681c4a5f2ceb62a08f5Tim Peters        test_resource
623f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_signal
624f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_sunaudiodev
625f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_timing
626f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """,
627f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum    'linux2':
628f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """
629f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_al
630944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
631823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
632f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cd
633f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_cl
634f66dacdb017c7481c3ba4f0743d5446146de33c8Guido van Rossum        test_curses
635f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_dl
636f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_gl
637f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_imgfile
638f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_largefile
6394507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum        test_linuxaudiodev
640f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_nis
641f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_ntpath
6424507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum        test_ossaudiodev
643f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        test_sunaudiodev
644f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum        """,
64549a806edbb298f2a5be3598bd80c21392cb6968dJack Jansen   'mac':
646aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        """
647aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_al
648679751455798fab6425fda749a19e783e58b210eJack Jansen        test_atexit
649aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_bsddb
650823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
651679751455798fab6425fda749a19e783e58b210eJack Jansen        test_bsddb3
652679751455798fab6425fda749a19e783e58b210eJack Jansen        test_bz2
653aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_cd
654aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_cl
655aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_commands
656aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_crypt
657b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen        test_curses
658aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_dbm
659aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_dl
660aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_fcntl
661aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_fork1
662aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_gl
663aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_grp
664c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen        test_ioctl
665aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_imgfile
666aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_largefile
667aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_linuxaudiodev
668aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_locale
669aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_mmap
670679751455798fab6425fda749a19e783e58b210eJack Jansen        test_mpz
671aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_nis
672aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_ntpath
673aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_openpty
674679751455798fab6425fda749a19e783e58b210eJack Jansen        test_ossaudiodev
675aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_poll
676679751455798fab6425fda749a19e783e58b210eJack Jansen        test_popen
677aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_popen2
6785bb97e66dcbb110877ac17209c7d2641db6f6006Jack Jansen        test_posix
679aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_pty
680aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_pwd
681679751455798fab6425fda749a19e783e58b210eJack Jansen        test_resource
682aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_signal
683aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_sunaudiodev
684aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_sundry
685c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen        test_tarfile
686aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        test_timing
687aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum        """,
68821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'unixware7':
6890ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        """
6900ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_al
691944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
6920ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_bsddb
693823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
6940ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_cd
6950ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_cl
6960ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_dl
6970ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_gl
6980ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_imgfile
6990ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_largefile
7000ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_linuxaudiodev
7010ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_minidom
7020ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_nis
7030ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_ntpath
7040ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_openpty
7050ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_pyexpat
7060ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_sax
7070ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_sunaudiodev
7080ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        test_sundry
7090ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis        """,
71021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'openunix8':
71121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """
71221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_al
713944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
71421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_bsddb
715823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
71621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cd
71721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cl
71821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_dl
71921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_gl
72021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_imgfile
72121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_largefile
72221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_linuxaudiodev
72321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_minidom
72421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_nis
72521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_ntpath
72621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_openpty
72721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_pyexpat
72821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sax
72921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sunaudiodev
73021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sundry
73121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """,
73221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis    'sco_sv3':
73321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """
73421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_al
735944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
73621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_asynchat
73721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_bsddb
738823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
73921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cd
74021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_cl
74121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_dl
74221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_fork1
74321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_gettext
74421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_gl
74521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_imgfile
74621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_largefile
74721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_linuxaudiodev
74821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_locale
74921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_minidom
75021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_nis
75121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_ntpath
75221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_openpty
75321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_pyexpat
75421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_queue
75521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sax
75621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sunaudiodev
75721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_sundry
75821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_thread
75921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threaded_import
76021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threadedtempfile
76121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        test_threading
76221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis        """,
763e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum    'riscos':
764e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        """
765e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_al
766944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
767e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_asynchat
768a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis        test_atexit
769e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_bsddb
770823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
771a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis        test_bsddb3
772e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_cd
773e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_cl
774e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_commands
775e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_crypt
776e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_dbm
777e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_dl
778e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_fcntl
779e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_fork1
780e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_gdbm
781e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_gl
782e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_grp
783e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_imgfile
784e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_largefile
785e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_linuxaudiodev
786e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_locale
787e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_mmap
788e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_nis
789e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_ntpath
790e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_openpty
791e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_poll
792e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_popen2
793e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_pty
794e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_pwd
795e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_strop
796e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_sunaudiodev
797e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_sundry
798e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_thread
799e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threaded_import
800e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threadedtempfile
801e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_threading
802e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        test_timing
803e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum        """,
8048a97f4a380a7a356730e48406f8269c3efe5e6ebJack Jansen    'darwin':
805398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        """
8062bfb94c871caeae622174485264f407d9df354b9Brett Cannon        test__locale
807398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_al
808acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_bsddb
8099d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum        test_bsddb3
810398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_cd
811398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_cl
812398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_curses
813398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_dl
814398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_gdbm
815398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_gl
816398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_imgfile
817398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_largefile
818398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_linuxaudiodev
819acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_locale
820398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_minidom
8219d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum        test_mpz
822398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_nis
823398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_ntpath
824acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen        test_ossaudiodev
825398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_poll
826398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        test_sunaudiodev
827398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen        """,
82811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum    'sunos5':
82911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        """
83011c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_al
831944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
83211c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_bsddb
833823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
83411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_cd
83511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_cl
83611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_curses
83711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_dbm
83811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_gdbm
83911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_gl
84011c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_gzip
84111c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_imgfile
84211c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_linuxaudiodev
84311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_mpz
84411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_openpty
84511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_zipfile
84611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum        test_zlib
847ed375e18d10d37bfea1769aa1fe69795df6cbc10Jeremy Hylton        """,
848b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro    'hp-ux11':
849b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        """
850b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_al
851944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
852b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_bsddb
853823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
854b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_cd
855b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_cl
856b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_curses
857b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_dl
858b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_gdbm
859b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_gl
860b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_gzip
861b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_imgfile
862b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_largefile
863b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_linuxaudiodev
864b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_locale
865b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_minidom
866b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_nis
867b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_ntpath
868b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_openpty
869b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_pyexpat
870b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_sax
871b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_sunaudiodev
872b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_zipfile
873b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        test_zlib
874b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro        """,
875f90ae20354ceb501f0ba0b6459df17f1a8005a47Martin v. Löwis    'atheos':
876c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        """
877c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_al
878944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
879823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
880c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_cd
881c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_cl
882c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_curses
883c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_dl
884c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_gdbm
885c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_gl
886c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_imgfile
887c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_largefile
888c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_linuxaudiodev
889c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_locale
890c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_mhlib
891c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_mmap
892c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_mpz
893c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_nis
894c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_poll
895c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_popen2
896c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_resource
897c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        test_sunaudiodev
898c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters        """,
89925115940604e6051aa2fb16be88c6b8f64577251Jason Tishler    'cygwin':
90025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        """
90125115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_al
902944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
903823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
904b0f89e05ad9aaf229033bbc81be43c1f826e3930Tim Peters        test_bsddb3
90525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_cd
90625115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_cl
90725115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_curses
90825115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_dbm
90925115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_gl
91025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_imgfile
911c23f39ca9dc540ace879fcf9746254d94293b86fJason Tishler        test_ioctl
91225115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_largefile
91325115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_linuxaudiodev
91425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_locale
91525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_mpz
91625115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_nis
9175c4ded2c3b59aa134b82ab17cdfe7ab633194ca6Jason Tishler        test_ossaudiodev
91825115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_socketserver
91925115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        test_sunaudiodev
92025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler        """,
921fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre    'os2emx':
922fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        """
923fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_al
924944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
925fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_audioop
926823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro        test_bsddb185
927fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_bsddb3
928fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_cd
929fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_cl
930fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_commands
931fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_curses
932fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_dl
933fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_gl
934fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_imgfile
935fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_largefile
936fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_linuxaudiodev
937fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_mhlib
938fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_mmap
939fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_nis
940fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_openpty
941fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_ossaudiodev
942fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_pty
943fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_resource
944fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_signal
945fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        test_sunaudiodev
946fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre        """,
947944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum    'freebsd4':
948944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        """
949944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_aepack
950944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_al
951944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_applesingle
952944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_bsddb
953944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_bsddb3
954944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_cd
955944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_cl
956944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_gl
957944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_imgfile
958944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_linuxaudiodev
959944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_locale
960944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_macfs
961944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_macostools
962944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_nis
963944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_normalization
964944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_ossaudiodev
965944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_pep277
966944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_plistlib
967944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_scriptpackages
968944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_socket_ssl
969944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_socketserver
970944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_sunaudiodev
971944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_timeout
972944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_unicode_file
973944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_urllibnet
974944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_winreg
975944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum        test_winsound
97656f88113b7272be8403f9b722c943e679e23d362Martin v. Löwis        """,
977f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum}
978f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum
979b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips:
980b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters    def __init__(self):
9812a182dbf3f2520ad753792068391775d102b13dfTim Peters        import os.path
9821b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters        from test import test_normalization
983b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters        from test import test_socket_ssl
98455b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz        from test import test_timeout
9853e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang        from test import test_codecmaps_cn, test_codecmaps_jp
9863e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang        from test import test_codecmaps_kr, test_codecmaps_tw
9871b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
9887c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters        self.valid = False
989de14a30d1d70073d36f207fe432e4adad5178399Tim Peters        if sys.platform in _expectations:
990f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum            s = _expectations[sys.platform]
991a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger            self.expected = set(s.split())
9921b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
9932a182dbf3f2520ad753792068391775d102b13dfTim Peters            if not os.path.supports_unicode_filenames:
9942a182dbf3f2520ad753792068391775d102b13dfTim Peters                self.expected.add('test_pep277')
9951b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
9961b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters            if test_normalization.skip_expected:
9971b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters                self.expected.add('test_normalization')
9981b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters
999b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters            if test_socket_ssl.skip_expected:
1000b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters                self.expected.add('test_socket_ssl')
1001b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters
100255b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz            if test_timeout.skip_expected:
100355b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz                self.expected.add('test_timeout')
100455b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz
10053e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang            for cc in ('cn', 'jp', 'kr', 'tw'):
10063e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang                if eval('test_codecmaps_' + cc).skip_expected:
10073e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang                    self.expected.add('test_codecmaps_' + cc)
10083e2a30692085d32ac63f72b35da39158a471fc68Hye-Shik Chang
10096afc5e02fa775517fa0b6455906a8c203baf9cd2Jack Jansen            if not sys.platform in ("mac", "darwin"):
10107035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                MAC_ONLY = ["test_macostools", "test_macfs", "test_aepack",
10117035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                            "test_plistlib", "test_scriptpackages"]
10127035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                for skip in MAC_ONLY:
10137035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                    self.expected.add(skip)
1014ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters
1015ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters            if sys.platform != "win32":
10167035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                WIN_ONLY = ["test_unicode_file", "test_winreg",
10177035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                            "test_winsound"]
10187035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                for skip in WIN_ONLY:
10197035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz                    self.expected.add(skip)
1020f2715e076435b74638acb81512c2ee014f75aea2Tim Peters
10217c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters            self.valid = True
1022b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1023b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters    def isvalid(self):
1024b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        "Return true iff _ExpectedSkips knows about the current platform."
1025b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        return self.valid
1026b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1027b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters    def getexpected(self):
1028b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        """Return set of test names we expect to skip on current platform.
1029b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1030b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        self.isvalid() must be true.
1031b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        """
1032b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1033b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        assert self.isvalid()
1034b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters        return self.expected
1035b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters
1036152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumif __name__ == '__main__':
1037408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # Remove regrtest.py's own directory from the module search path.  This
1038408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # prevents relative imports from working, and relative imports will screw
1039408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # up the testing framework.  E.g. if both test.test_support and
1040408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # test_support are imported, they will not contain the same globals, and
1041408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # much of the testing framework relies on the globals in the
1042408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    # test.test_support module.
1043408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0])))
1044408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    i = pathlen = len(sys.path)
1045408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    while i >= 0:
1046408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw        i -= 1
1047408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw        if os.path.abspath(os.path.normpath(sys.path[i])) == mydir:
1048408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw            del sys.path[i]
1049408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw    if len(sys.path) == pathlen:
1050408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw        print 'Could not find %r in sys.path to remove it' % mydir
105108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw    main()
1052