regrtest.py revision 9e9d4f8ed8d467d0558251f43c5decc754712d53
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) 22152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 23152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf non-option arguments are present, they are names for tests to run, 24152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumunless -x is given, in which case they are names for tests not to run. 25152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf no test names are given, all tests are run. 26f58ed2596706b97c16174a839c1ed6f6b1f87fa6Guido van Rossum 27a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum-v is incompatible with -g and does not compare test output files. 28e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 299e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-s means to run only a single test and exit. This is useful when 309e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumdoing memory analysis on the Python interpreter (which tend to consume 319e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumtoo many resources to run the full regression test non-stop). The 329e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile /tmp/pynexttest is read to find the next test to run. If this 339e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile is missing, the first test_*.py file in testdir or on the command 349e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumline is used. (actually tempfile.gettempdir() is used instead of 359e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum/tmp). 36e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 379e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-f reads the names of tests from the file given as f's argument, one 389e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumor more test names per line. Whitespace is ignored. Blank lines and 399e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumlines beginning with '#' are ignored. This is especially useful for 409e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumwhittling down failures involving interactions among tests. 41c5000dfc4098f8547461e790a91536a923124261Tim Peters 429e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-u is used to specify which special resource intensive tests to run, 439e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumsuch as those requiring large file support or network connectivity. 449e9d4f8ed8d467d0558251f43c5decc754712d53Guido van RossumThe argument is a comma-separated list of words indicating the 459e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumresources to test. Currently only the following are defined: 4608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 473a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake all - Enable all special resources. 483a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 492158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling curses - Tests that use curses and will modify the terminal's 502158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling state and output modes. 511633a2e3452b40d0e9bb1f15ab16cd6b90f15a19Tim Peters 529e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum largefile - It is okay to run some test that may create huge 539e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum files. These tests can take a long time and may 549e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum consume >2GB of disk space temporarily. 5508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 569e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum network - It is okay to run tests that use external network 579e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum resource, e.g. testing SSL support for sockets. 58152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum""" 59152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 60152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport sys 61152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport os 62152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport getopt 639e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossumimport traceback 64ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaroimport random 65ae1bb176bea47b2123bba208733edb42692e9431Fred Drakeimport StringIO 66152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 67152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport test_support 68152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 693a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 703a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred DrakeRESOURCE_NAMES = ('curses', 'largefile', 'network') 713a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 723a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 7308fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''): 7408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw print __doc__ 7508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if msg: print msg 7608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(code) 7708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 7808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 79ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanarodef main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, 80c5000dfc4098f8547461e790a91536a923124261Tim Peters exclude=0, single=0, randomize=0, fromfile=None, findleaks=0, 8108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources=None): 826fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Execute a test suite. 836fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 847e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters This also parses command-line options and modifies its behavior 85004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake accordingly. 866fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 876fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum tests -- a list of strings containing test names (optional) 886fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- the directory in which to look for tests (optional) 896fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 906fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum Users other than the Python test suite will certainly want to 916fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum specify testdir; if it's omitted, the directory containing the 92004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake Python test suite is searched for. 936fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 946fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum If the tests argument is omitted, the tests listed on the 956fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum command-line will be used. If that's empty, too, then all *.py 966fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum files beginning with test_ will be used. 97ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro 989e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum The other default arguments (verbose, quiet, generate, exclude, 999e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum single, randomize, findleaks, and use_resources) allow programmers 1009e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum calling main() directly to set the values that would normally be 1019e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum set by flags on the command line. 102a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 1036fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 104004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake 1058dee809410e2d433bb0be5d8a1699736b90db0b5Tim Peters test_support.record_original_stdout(sys.stdout) 106152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 1079e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsrf:lu:t:', 10808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw ['help', 'verbose', 'quiet', 'generate', 109c5000dfc4098f8547461e790a91536a923124261Tim Peters 'exclude', 'single', 'random', 'fromfile', 1109e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum 'findleaks', 'use=', 'threshold=']) 111152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except getopt.error, msg: 11208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, msg) 11308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 11408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw # Defaults 11508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if use_resources is None: 11608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources = [] 117152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for o, a in opts: 11808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if o in ('-h', '--help'): 11908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(0) 12008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-v', '--verbose'): 12108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose += 1 12208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-q', '--quiet'): 12308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw quiet = 1; 12408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose = 0 12508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-g', '--generate'): 12608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw generate = 1 12708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-x', '--exclude'): 12808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw exclude = 1 12908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-s', '--single'): 13008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw single = 1 13108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-r', '--randomize'): 13208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw randomize = 1 133c5000dfc4098f8547461e790a91536a923124261Tim Peters elif o in ('-f', '--fromfile'): 134c5000dfc4098f8547461e790a91536a923124261Tim Peters fromfile = a 13508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-l', '--findleaks'): 13608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw findleaks = 1 1379e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum elif o in ('-t', '--threshold'): 1389e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum import gc 1399e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum gc.set_threshold(int(a)) 14008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-u', '--use'): 141fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum u = [x.lower() for x in a.split(',')] 142fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum for r in u: 1433a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r == 'all': 1443a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake use_resources = RESOURCE_NAMES 1453a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake break 1463a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r not in RESOURCE_NAMES: 1473a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake usage(1, 'Invalid -u/--use option: ' + a) 14804a8da5cdb185322ca519db1e731ba10d7646970Fred Drake if r not in use_resources: 149e41abab33b0b467acd6bdc7d73ce4b5cef4fd5bfAndrew MacIntyre use_resources.append(r) 150a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum if generate and verbose: 15108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, "-g and -v don't go together!") 152c5000dfc4098f8547461e790a91536a923124261Tim Peters if single and fromfile: 153c5000dfc4098f8547461e790a91536a923124261Tim Peters usage(2, "-s and -f don't go together!") 15408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 155152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum good = [] 156152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum bad = [] 157152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum skipped = [] 158e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 159d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 160a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw try: 161a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw import gc 162a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw except ImportError: 1638a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print 'No GC available, disabling findleaks.' 164d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer findleaks = 0 165a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw else: 1668a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # Uncomment the line below to report garbage that is not 1678a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # freeable by reference counting alone. By default only 1688a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # garbage that is not collectable by the GC is reported. 1698a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer #gc.set_debug(gc.DEBUG_SAVEALL) 170d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage = [] 171a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 172e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 173e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw from tempfile import gettempdir 174e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw filename = os.path.join(gettempdir(), 'pynexttest') 175e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw try: 176e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'r') 177fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond next = fp.read().strip() 178e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = [next] 179e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 180e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw except IOError: 181e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw pass 182c5000dfc4098f8547461e790a91536a923124261Tim Peters 183c5000dfc4098f8547461e790a91536a923124261Tim Peters if fromfile: 184c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = [] 185c5000dfc4098f8547461e790a91536a923124261Tim Peters fp = open(fromfile) 186c5000dfc4098f8547461e790a91536a923124261Tim Peters for line in fp: 187c5000dfc4098f8547461e790a91536a923124261Tim Peters guts = line.split() # assuming no test has whitespace in its name 188c5000dfc4098f8547461e790a91536a923124261Tim Peters if guts and not guts[0].startswith('#'): 189c5000dfc4098f8547461e790a91536a923124261Tim Peters tests.extend(guts) 190c5000dfc4098f8547461e790a91536a923124261Tim Peters fp.close() 191c5000dfc4098f8547461e790a91536a923124261Tim Peters 192c5000dfc4098f8547461e790a91536a923124261Tim Peters # Strip .py extensions. 193c5000dfc4098f8547461e790a91536a923124261Tim Peters if args: 194c5000dfc4098f8547461e790a91536a923124261Tim Peters args = map(removepy, args) 195c5000dfc4098f8547461e790a91536a923124261Tim Peters if tests: 196c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = map(removepy, tests) 197c5000dfc4098f8547461e790a91536a923124261Tim Peters 1986c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests = STDTESTS[:] 1996c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests = NOTTESTS[:] 200152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if exclude: 2016c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum for arg in args: 2026c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum if arg in stdtests: 2036c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests.remove(arg) 2046c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests[:0] = args 20541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum args = [] 206747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum tests = tests or args or findtests(testdir, stdtests, nottests) 207e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 208e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = tests[:1] 209ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro if randomize: 210ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro random.shuffle(tests) 21141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum test_support.verbose = verbose # Tell tests to be moderately quiet 21208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_support.use_resources = use_resources 2135796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum save_modules = sys.modules.keys() 214152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for test in tests: 21541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not quiet: 21641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test 217f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick ok = runtest(test, generate, verbose, quiet, testdir) 21841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if ok > 0: 21941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum good.append(test) 22041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum elif ok == 0: 22141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum bad.append(test) 22241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum else: 22341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum skipped.append(test) 224d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 225d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer gc.collect() 226d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if gc.garbage: 2278a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "Warning: test created", len(gc.garbage), 2288a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "uncollectable object(s)." 2298a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # move the uncollectable objects somewhere so we don't see 2308a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # them again 231d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage.extend(gc.garbage) 232d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer del gc.garbage[:] 2335796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum # Unload the newly imported modules (best effort finalization) 2345796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum for module in sys.modules.keys(): 23551931144427faa001a6db3cfc37380526be256b6Guido van Rossum if module not in save_modules and module.startswith("test."): 2365796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum test_support.unload(module) 2377a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton 2387a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton # The lists won't be sorted if running with -r 2397a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton good.sort() 2407a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton bad.sort() 2417a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton skipped.sort() 242e0c446bb4ad67294f42d4cb53b4ff28413bd8ddeTim Peters 243152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if good and not quiet: 24441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not bad and not skipped and len(good) > 1: 24541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "All", 24641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print count(len(good), "test"), "OK." 2471a4d77b2527ced1052b4faae3d176b125a764325Tim Peters if verbose: 2481a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print "CAUTION: stdout isn't compared in verbose mode: a test" 2491a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print "that passes in verbose mode may fail without it." 250152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if bad: 251a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(bad), "test"), "failed:" 252a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(bad) 253152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if skipped and not quiet: 254a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(skipped), "test"), "skipped:" 255a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(skipped) 256e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 257b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters e = _ExpectedSkips() 258a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters plat = sys.platform 259b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if e.isvalid(): 260b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters surprise = _Set(skipped) - e.getexpected() 261b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if surprise: 262b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print count(len(surprise), "skip"), \ 263a45da92484ceececf1cf32b4dfb16004945b001eTim Peters "unexpected on", plat + ":" 264a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(surprise) 265b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 266b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Those skips are all expected on", plat + "." 267b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 268b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Ask someone to teach regrtest.py about which tests are" 269b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "expected to get skipped on", plat + "." 270b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 271e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 272e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw alltests = findtests(testdir, stdtests, nottests) 273e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw for i in range(len(alltests)): 274e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if tests[0] == alltests[i]: 275e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if i == len(alltests) - 1: 276e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 277e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 278e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'w') 279e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.write(alltests[i+1] + '\n') 280e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 281e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw break 282e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 283e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 284e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 28508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(len(bad) > 0) 28608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 287152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 2886fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [ 289152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_grammar', 290152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_opcodes', 291152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_operations', 292152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_builtin', 293152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_exceptions', 294152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_types', 295152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 296152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 2976fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [ 298152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_support', 299152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_b1', 300152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_b2', 30162e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future1', 30262e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future2', 3038471a35febdbfbfab51b9d4b5fe51694fe6ca536Jeremy Hylton 'test_future3', 304152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 305152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 3066fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossumdef findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): 307152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum """Return a list of all applicable test modules.""" 3086fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 309152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum names = os.listdir(testdir) 310152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests = [] 311152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for name in names: 312e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum if name[:5] == "test_" and name[-3:] == os.extsep+"py": 31341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum modname = name[:-3] 31441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if modname not in stdtests and modname not in nottests: 31541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum tests.append(modname) 316152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests.sort() 317152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return stdtests + tests 318152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 319f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mickdef runtest(test, generate, verbose, quiet, testdir = None): 3206fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Run a single test. 3216fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum test -- the name of the test 3226fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum generate -- if true, generate output, instead of running the test 3236fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum and comparing it to a previously created output file 3246fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum verbose -- if true, print more messages 325f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick quiet -- if true, don't print 'skipped' messages (probably redundant) 3266fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- test directory 3276fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 328152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum test_support.unload(test) 3296fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 330152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum outputdir = os.path.join(testdir, "output") 331152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum outputfile = os.path.join(outputdir, test) 3329390cc15da5cd6920bd41bb4cd146d5d0601345fTim Peters if verbose: 33341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum cfp = None 3340fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 33588a56857f65d98e9d2b670eab6e048bda519340aFred Drake cfp = StringIO.StringIO() 336152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 337342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters save_stdout = sys.stdout 33841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum try: 33941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if cfp: 34041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum sys.stdout = cfp 34141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test # Output file starts with test name 342d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters the_module = __import__(test, globals(), locals(), []) 343d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # Most tests run to completion simply as a side-effect of 344d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # being imported. For the benefit of tests that can't run 345d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # that way (like test_threaded_import), explicitly invoke 346d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # their test_main() function (if it exists). 347d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test = getattr(the_module, "test_main", None) 348d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters if indirect_test is not None: 349d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test() 35041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum finally: 351342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters sys.stdout = save_stdout 3523af826ebca80f8a6c782fb590c77ac210ae9e22dThomas Wouters except (ImportError, test_support.TestSkipped), msg: 353f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick if not quiet: 354eb9490526508dc643c2329771f95a925e5412049Guido van Rossum print "test", test, "skipped --", msg 35541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return -1 356fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake except KeyboardInterrupt: 357fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake raise 358152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except test_support.TestFailed, msg: 35941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "test", test, "failed --", msg 36041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 3619e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum except: 36241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum type, value = sys.exc_info()[:2] 36327c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake print "test", test, "crashed --", str(type) + ":", value 36441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if verbose: 36541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum traceback.print_exc(file=sys.stdout) 36641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 367152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 3680fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if not cfp: 3690fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3700fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum output = cfp.getvalue() 371e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if generate: 372e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if output == test + "\n": 373e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if os.path.exists(outputfile): 374e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # Write it since it already exists (and the contents 375e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # may have changed), but let the user know it isn't 376e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # needed: 377e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake print "output file", outputfile, \ 378e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake "is no longer needed; consider removing it" 3790fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 3800fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum # We don't need it, so don't create it. 3810fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3820fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp = open(outputfile, "w") 3830fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.write(output) 3840fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.close() 3850fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3860fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if os.path.exists(outputfile): 3870fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp = open(outputfile, "r") 3880fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum expected = fp.read() 3890fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.close() 3900fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 3910fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum expected = test + "\n" 3920fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if output == expected: 3930fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3940fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "test", test, "produced unexpected output:" 3950fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum reportdiff(expected, output) 3960fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 0 3970fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum 3980fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossumdef reportdiff(expected, output): 3990fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum import difflib 400c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "*" * 70 401c377b16d12ba325bb108eca575447d66f19294c0Tim Peters a = expected.splitlines(1) 402c377b16d12ba325bb108eca575447d66f19294c0Tim Peters b = output.splitlines(1) 403cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum sm = difflib.SequenceMatcher(a=a, b=b) 404cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum tuples = sm.get_opcodes() 405c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 406cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum def pair(x0, x1): 407c377b16d12ba325bb108eca575447d66f19294c0Tim Peters # x0:x1 are 0-based slice indices; convert to 1-based line indices. 408cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum x0 += 1 409cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum if x0 >= x1: 410c377b16d12ba325bb108eca575447d66f19294c0Tim Peters return "line " + str(x0) 411cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum else: 412c377b16d12ba325bb108eca575447d66f19294c0Tim Peters return "lines %d-%d" % (x0, x1) 413c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 414cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for op, a0, a1, b0, b1 in tuples: 415cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum if op == 'equal': 416cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum pass 417c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 418cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'delete': 419c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "***", pair(a0, a1), "of expected output missing:" 420cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for line in a[a0:a1]: 421c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "-", line, 422c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 423cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'replace': 424c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "*** mismatch between", pair(a0, a1), "of expected", \ 425c377b16d12ba325bb108eca575447d66f19294c0Tim Peters "output and", pair(b0, b1), "of actual output:" 426c377b16d12ba325bb108eca575447d66f19294c0Tim Peters for line in difflib.ndiff(a[a0:a1], b[b0:b1]): 427c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print line, 428c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 429cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'insert': 430c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "***", pair(b0, b1), "of actual output doesn't appear", \ 431c377b16d12ba325bb108eca575447d66f19294c0Tim Peters "in expected output after line", str(a1)+":" 432cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for line in b[b0:b1]: 433c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "+", line, 434c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 435cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum else: 436cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1) 437c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 4380fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "*" * 70 439152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 440152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir(): 441152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if __name__ == '__main__': 44241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = sys.argv[0] 443152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 44441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = __file__ 445152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum testdir = os.path.dirname(file) or os.curdir 446152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return testdir 447152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 448c5000dfc4098f8547461e790a91536a923124261Tim Petersdef removepy(name): 449c5000dfc4098f8547461e790a91536a923124261Tim Peters if name.endswith(os.extsep + "py"): 450c5000dfc4098f8547461e790a91536a923124261Tim Peters name = name[:-3] 451c5000dfc4098f8547461e790a91536a923124261Tim Peters return name 452c5000dfc4098f8547461e790a91536a923124261Tim Peters 453152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word): 454152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if n == 1: 45541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %s" % (n, word) 456152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 45741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %ss" % (n, word) 458152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 459a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4): 460a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """Print the elements of a sequence to stdout. 461a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 462a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg width (default 70) is the maximum line length. 463a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg indent (default 4) is the number of blanks with which to 464a45da92484ceececf1cf32b4dfb16004945b001eTim Peters begin each line. 465a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """ 466a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 467a45da92484ceececf1cf32b4dfb16004945b001eTim Peters line = ' ' * indent 468a45da92484ceececf1cf32b4dfb16004945b001eTim Peters for one in map(str, x): 469a45da92484ceececf1cf32b4dfb16004945b001eTim Peters w = len(line) + len(one) 470a45da92484ceececf1cf32b4dfb16004945b001eTim Peters if line[-1:] == ' ': 471a45da92484ceececf1cf32b4dfb16004945b001eTim Peters pad = '' 472a45da92484ceececf1cf32b4dfb16004945b001eTim Peters else: 473a45da92484ceececf1cf32b4dfb16004945b001eTim Peters pad = ' ' 474a45da92484ceececf1cf32b4dfb16004945b001eTim Peters w += 1 475a45da92484ceececf1cf32b4dfb16004945b001eTim Peters if w > width: 476a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print line 477a45da92484ceececf1cf32b4dfb16004945b001eTim Peters line = ' ' * indent + one 478a45da92484ceececf1cf32b4dfb16004945b001eTim Peters else: 479a45da92484ceececf1cf32b4dfb16004945b001eTim Peters line += pad + one 480a45da92484ceececf1cf32b4dfb16004945b001eTim Peters if len(line) > indent: 481a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print line 482a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 483b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _Set: 484b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self, seq=[]): 485b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = self.data = {} 486b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters for x in seq: 487b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data[x] = 1 488b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 489b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __len__(self): 490b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return len(self.data) 491b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 492b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __sub__(self, other): 493b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return set of all elements in self not in other." 494b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters result = _Set() 495b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = result.data = self.data.copy() 496b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters for x in other.data: 497b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if x in data: 498b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters del data[x] 499b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return result 500b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 50139f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton def __iter__(self): 50239f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton return iter(self.data) 50339f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton 504b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def tolist(self, sorted=1): 505b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return _Set elements as a list." 506b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = self.data.keys() 507b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if sorted: 508b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data.sort() 509b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return data 510b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 511de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# Map sys.platform to a string containing the basenames of tests 512de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# expected to be skipped on that platform. 513de14a30d1d70073d36f207fe432e4adad5178399Tim Peters 514f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = { 515f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'win32': 516f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 517f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_al 518f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cd 519f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cl 520f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_commands 521f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_crypt 522d703057752d52cef6082a920879a0b62cdeffacaTim Peters test_curses 523f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dbm 524f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 525deb121aec7185f0d8034453203c6be436b2951f5Tim Peters test_email_codecs 526f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fcntl 527f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fork1 528f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gdbm 529f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gl 530f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_grp 531f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_imgfile 532f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 533f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_linuxaudiodev 534f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_mhlib 535de14a30d1d70073d36f207fe432e4adad5178399Tim Peters test_mpz 536f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_nis 537f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_openpty 538f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_poll 539f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pty 540f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pwd 5411e33ffa5c719ec611e182681c4a5f2ceb62a08f5Tim Peters test_resource 542f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_signal 54308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_socket_ssl 544a86f0c17a1385c07710d894b93a1c13159c0b57fTim Peters test_socketserver 545f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_sunaudiodev 546f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_timing 547f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 548f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'linux2': 549f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 550f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_al 551f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cd 552f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cl 553f66dacdb017c7481c3ba4f0743d5446146de33c8Guido van Rossum test_curses 554f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 5556184c117e9af1cf6178fd34bd7c576ce36107df2Guido van Rossum test_email_codecs 556f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gl 557f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_imgfile 558f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 559f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_nis 560f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_ntpath 56108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_socket_ssl 562f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_socketserver 563f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_sunaudiodev 564f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_unicode_file 565f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_winreg 566f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_winsound 567f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 56849a806edbb298f2a5be3598bd80c21392cb6968dJack Jansen 'mac': 569aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """ 570aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_al 571aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_bsddb 572aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_cd 573aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_cl 574aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_commands 575aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_crypt 576b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen test_curses 577aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dbm 578aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dl 579aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fcntl 580aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fork1 581aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_gl 582aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_grp 583aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_imgfile 584aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_largefile 585aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_linuxaudiodev 586aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_locale 587aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_mmap 588aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_nis 589aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_ntpath 590aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_openpty 591aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_poll 592aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_popen2 593aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pty 594aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pwd 595aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_signal 596aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_socket_ssl 597aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_socketserver 598aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_sunaudiodev 599aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_sundry 600aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_timing 601aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_unicode_file 602aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_winreg 603aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_winsound 604aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """, 6050ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis 'unixware5': 6060ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """ 6070ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_al 6080ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_bsddb 6090ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_cd 6100ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_cl 6110ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_dl 6120ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_gl 6130ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_imgfile 6140ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_largefile 6150ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_linuxaudiodev 6160ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_minidom 6170ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_nis 6180ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_ntpath 6190ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_openpty 6200ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_pyexpat 6210ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sax 6220ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_socketserver 6230ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sunaudiodev 6240ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sundry 6250ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_unicode_file 6260ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_winreg 6270ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_winsound 6280ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """, 629e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum 'riscos': 630e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """ 631e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_al 632e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_asynchat 633e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_bsddb 634e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_cd 635e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_cl 636e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_commands 637e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_crypt 638e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dbm 639e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dl 640e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fcntl 641e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fork1 642e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_gdbm 643e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_gl 644e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_grp 645e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_imgfile 646e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_largefile 647e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_linuxaudiodev 648e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_locale 649e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_mmap 650e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_nis 651e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_ntpath 652e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_openpty 653e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_poll 654e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_popen2 655e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pty 656e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pwd 657e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_socket_ssl 658e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_socketserver 659e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_strop 660e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_sunaudiodev 661e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_sundry 662e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_thread 663e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threaded_import 664e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threadedtempfile 665e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threading 666e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_timing 667e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_unicode_file 668e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_winreg 669e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_winsound 670e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """, 6718a97f4a380a7a356730e48406f8269c3efe5e6ebJack Jansen 'darwin': 672398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """ 673398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_al 674398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_cd 675398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_cl 676398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_curses 677398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_dl 678398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_gdbm 679398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_gl 680398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_imgfile 681398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_largefile 682398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_linuxaudiodev 683398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_minidom 684398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_nis 685398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_ntpath 686398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_poll 687398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_socket_ssl 688f839c27027ee0656319b7d7033d898e5b559c96bJack Jansen test_socketserver 689398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_sunaudiodev 690f839c27027ee0656319b7d7033d898e5b559c96bJack Jansen test_unicode_file 691398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_winreg 692398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_winsound 693398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """, 694b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro 'hp-ux11': 695b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """ 696b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_al 697b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_bsddb 698b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_cd 699b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_cl 700b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_curses 701b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_dl 702b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gdbm 703b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gl 704b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gzip 705b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_imgfile 706b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_largefile 707b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_linuxaudiodev 708b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_locale 709b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_minidom 710b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_nis 711b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_ntpath 712b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_openpty 713b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_pyexpat 714b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_sax 715b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_socket_ssl 716b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_socketserver 717b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_sunaudiodev 718b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_unicode_file 719b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_winreg 720b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_winsound 721b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zipfile 722b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zlib 723b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """, 724f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum} 725f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 726b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips: 727b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self): 728b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.valid = 0 729de14a30d1d70073d36f207fe432e4adad5178399Tim Peters if sys.platform in _expectations: 730f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum s = _expectations[sys.platform] 731b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.expected = _Set(s.split()) 732f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum self.valid = 1 733b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 734b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def isvalid(self): 735b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return true iff _ExpectedSkips knows about the current platform." 736b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.valid 737b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 738b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def getexpected(self): 739b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """Return set of test names we expect to skip on current platform. 740b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 741b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.isvalid() must be true. 742b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """ 743b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 744b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters assert self.isvalid() 745b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.expected 746b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 747152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumif __name__ == '__main__': 74808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw main() 749