regrtest.py revision 408b6d34de2b1a6ba690557def435adce9314184
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 6704f357cffef6d764f2f0ff2671dabde75ec250d1Barry Warsawfrom test import test_support 683a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 693a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred DrakeRESOURCE_NAMES = ('curses', 'largefile', 'network') 703a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 713a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 7208fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''): 7308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw print __doc__ 7408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if msg: print msg 7508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(code) 7608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 7708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 78ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanarodef main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, 79c5000dfc4098f8547461e790a91536a923124261Tim Peters exclude=0, single=0, randomize=0, fromfile=None, findleaks=0, 8008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources=None): 816fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Execute a test suite. 826fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 837e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters This also parses command-line options and modifies its behavior 84004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake accordingly. 856fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 866fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum tests -- a list of strings containing test names (optional) 876fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- the directory in which to look for tests (optional) 886fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 896fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum Users other than the Python test suite will certainly want to 906fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum specify testdir; if it's omitted, the directory containing the 91004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake Python test suite is searched for. 926fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 936fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum If the tests argument is omitted, the tests listed on the 946fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum command-line will be used. If that's empty, too, then all *.py 956fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum files beginning with test_ will be used. 96ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro 979e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum The other default arguments (verbose, quiet, generate, exclude, 989e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum single, randomize, findleaks, and use_resources) allow programmers 999e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum calling main() directly to set the values that would normally be 1009e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum set by flags on the command line. 101a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 1026fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 103004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake 1048dee809410e2d433bb0be5d8a1699736b90db0b5Tim Peters test_support.record_original_stdout(sys.stdout) 105152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 1069e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsrf:lu:t:', 10708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw ['help', 'verbose', 'quiet', 'generate', 108c5000dfc4098f8547461e790a91536a923124261Tim Peters 'exclude', 'single', 'random', 'fromfile', 1099e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum 'findleaks', 'use=', 'threshold=']) 110152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except getopt.error, msg: 11108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, msg) 11208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 11308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw # Defaults 11408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if use_resources is None: 11508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources = [] 116152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for o, a in opts: 11708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if o in ('-h', '--help'): 11808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(0) 11908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-v', '--verbose'): 12008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose += 1 12108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-q', '--quiet'): 12208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw quiet = 1; 12308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose = 0 12408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-g', '--generate'): 12508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw generate = 1 12608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-x', '--exclude'): 12708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw exclude = 1 12808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-s', '--single'): 12908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw single = 1 13008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-r', '--randomize'): 13108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw randomize = 1 132c5000dfc4098f8547461e790a91536a923124261Tim Peters elif o in ('-f', '--fromfile'): 133c5000dfc4098f8547461e790a91536a923124261Tim Peters fromfile = a 13408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-l', '--findleaks'): 13508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw findleaks = 1 1369e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum elif o in ('-t', '--threshold'): 1379e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum import gc 1389e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum gc.set_threshold(int(a)) 13908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-u', '--use'): 140fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum u = [x.lower() for x in a.split(',')] 141fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum for r in u: 1423a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r == 'all': 1433a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake use_resources = RESOURCE_NAMES 1443a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake break 1453a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r not in RESOURCE_NAMES: 1463a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake usage(1, 'Invalid -u/--use option: ' + a) 14704a8da5cdb185322ca519db1e731ba10d7646970Fred Drake if r not in use_resources: 148e41abab33b0b467acd6bdc7d73ce4b5cef4fd5bfAndrew MacIntyre use_resources.append(r) 149a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum if generate and verbose: 15008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, "-g and -v don't go together!") 151c5000dfc4098f8547461e790a91536a923124261Tim Peters if single and fromfile: 152c5000dfc4098f8547461e790a91536a923124261Tim Peters usage(2, "-s and -f don't go together!") 15308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 154152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum good = [] 155152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum bad = [] 156152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum skipped = [] 157e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 158d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 159a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw try: 160a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw import gc 161a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw except ImportError: 1628a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print 'No GC available, disabling findleaks.' 163d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer findleaks = 0 164a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw else: 1658a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # Uncomment the line below to report garbage that is not 1668a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # freeable by reference counting alone. By default only 1678a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # garbage that is not collectable by the GC is reported. 1688a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer #gc.set_debug(gc.DEBUG_SAVEALL) 169d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage = [] 170a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 171e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 172e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw from tempfile import gettempdir 173e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw filename = os.path.join(gettempdir(), 'pynexttest') 174e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw try: 175e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'r') 176fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond next = fp.read().strip() 177e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = [next] 178e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 179e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw except IOError: 180e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw pass 181c5000dfc4098f8547461e790a91536a923124261Tim Peters 182c5000dfc4098f8547461e790a91536a923124261Tim Peters if fromfile: 183c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = [] 184c5000dfc4098f8547461e790a91536a923124261Tim Peters fp = open(fromfile) 185c5000dfc4098f8547461e790a91536a923124261Tim Peters for line in fp: 186c5000dfc4098f8547461e790a91536a923124261Tim Peters guts = line.split() # assuming no test has whitespace in its name 187c5000dfc4098f8547461e790a91536a923124261Tim Peters if guts and not guts[0].startswith('#'): 188c5000dfc4098f8547461e790a91536a923124261Tim Peters tests.extend(guts) 189c5000dfc4098f8547461e790a91536a923124261Tim Peters fp.close() 190c5000dfc4098f8547461e790a91536a923124261Tim Peters 191c5000dfc4098f8547461e790a91536a923124261Tim Peters # Strip .py extensions. 192c5000dfc4098f8547461e790a91536a923124261Tim Peters if args: 193c5000dfc4098f8547461e790a91536a923124261Tim Peters args = map(removepy, args) 194c5000dfc4098f8547461e790a91536a923124261Tim Peters if tests: 195c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = map(removepy, tests) 196c5000dfc4098f8547461e790a91536a923124261Tim Peters 1976c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests = STDTESTS[:] 1986c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests = NOTTESTS[:] 199152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if exclude: 2006c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum for arg in args: 2016c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum if arg in stdtests: 2026c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests.remove(arg) 2036c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests[:0] = args 20441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum args = [] 205747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum tests = tests or args or findtests(testdir, stdtests, nottests) 206e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 207e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = tests[:1] 208ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro if randomize: 209ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro random.shuffle(tests) 21041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum test_support.verbose = verbose # Tell tests to be moderately quiet 21108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_support.use_resources = use_resources 2125796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum save_modules = sys.modules.keys() 213152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for test in tests: 21441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not quiet: 21541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test 216f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick ok = runtest(test, generate, verbose, quiet, testdir) 21741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if ok > 0: 21841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum good.append(test) 21941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum elif ok == 0: 22041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum bad.append(test) 22141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum else: 22241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum skipped.append(test) 223d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 224d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer gc.collect() 225d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if gc.garbage: 2268a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "Warning: test created", len(gc.garbage), 2278a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "uncollectable object(s)." 2288a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # move the uncollectable objects somewhere so we don't see 2298a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # them again 230d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage.extend(gc.garbage) 231d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer del gc.garbage[:] 2325796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum # Unload the newly imported modules (best effort finalization) 2335796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum for module in sys.modules.keys(): 23451931144427faa001a6db3cfc37380526be256b6Guido van Rossum if module not in save_modules and module.startswith("test."): 2355796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum test_support.unload(module) 2367a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton 2377a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton # The lists won't be sorted if running with -r 2387a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton good.sort() 2397a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton bad.sort() 2407a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton skipped.sort() 241e0c446bb4ad67294f42d4cb53b4ff28413bd8ddeTim Peters 242152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if good and not quiet: 24341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not bad and not skipped and len(good) > 1: 24441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "All", 24541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print count(len(good), "test"), "OK." 2461a4d77b2527ced1052b4faae3d176b125a764325Tim Peters if verbose: 247408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw print "CAUTION: stdout isn't compared in verbose mode:" 248408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw print "a test that passes in verbose mode may fail without it." 249152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if bad: 250a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(bad), "test"), "failed:" 251a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(bad) 252152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if skipped and not quiet: 253a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(skipped), "test"), "skipped:" 254a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(skipped) 255e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 256b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters e = _ExpectedSkips() 257a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters plat = sys.platform 258b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if e.isvalid(): 259b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters surprise = _Set(skipped) - e.getexpected() 260b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if surprise: 261b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print count(len(surprise), "skip"), \ 262a45da92484ceececf1cf32b4dfb16004945b001eTim Peters "unexpected on", plat + ":" 263a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(surprise) 264b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 265b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Those skips are all expected on", plat + "." 266b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 267b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Ask someone to teach regrtest.py about which tests are" 268b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "expected to get skipped on", plat + "." 269b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 270e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 271e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw alltests = findtests(testdir, stdtests, nottests) 272e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw for i in range(len(alltests)): 273e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if tests[0] == alltests[i]: 274e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if i == len(alltests) - 1: 275e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 276e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 277e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'w') 278e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.write(alltests[i+1] + '\n') 279e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 280e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw break 281e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 282e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 283e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 28408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(len(bad) > 0) 28508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 286152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 2876fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [ 288152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_grammar', 289152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_opcodes', 290152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_operations', 291152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_builtin', 292152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_exceptions', 293152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_types', 294152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 295152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 2966fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [ 297152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_support', 298152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_b1', 299152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_b2', 30062e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future1', 30162e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future2', 3028471a35febdbfbfab51b9d4b5fe51694fe6ca536Jeremy Hylton 'test_future3', 303152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 304152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 3056fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossumdef findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): 306152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum """Return a list of all applicable test modules.""" 3076fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 308152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum names = os.listdir(testdir) 309152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests = [] 310152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for name in names: 311e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum if name[:5] == "test_" and name[-3:] == os.extsep+"py": 31241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum modname = name[:-3] 31341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if modname not in stdtests and modname not in nottests: 31441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum tests.append(modname) 315152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests.sort() 316152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return stdtests + tests 317152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 318f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mickdef runtest(test, generate, verbose, quiet, testdir = None): 3196fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Run a single test. 3206fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum test -- the name of the test 3216fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum generate -- if true, generate output, instead of running the test 3226fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum and comparing it to a previously created output file 3236fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum verbose -- if true, print more messages 324f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick quiet -- if true, don't print 'skipped' messages (probably redundant) 3256fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- test directory 3266fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 327152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum test_support.unload(test) 3286fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 329152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum outputdir = os.path.join(testdir, "output") 330152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum outputfile = os.path.join(outputdir, test) 3319390cc15da5cd6920bd41bb4cd146d5d0601345fTim Peters if verbose: 33241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum cfp = None 3330fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 33488a56857f65d98e9d2b670eab6e048bda519340aFred Drake cfp = StringIO.StringIO() 335152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 336342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters save_stdout = sys.stdout 33741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum try: 33841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if cfp: 33941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum sys.stdout = cfp 34041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test # Output file starts with test name 341408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if test.startswith('test.'): 342408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw abstest = test 343408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw else: 344408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # Always import it from the test package 345408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw abstest = 'test.' + test 346408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw the_package = __import__(abstest, globals(), locals(), []) 347408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw the_module = getattr(the_package, test) 348d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # Most tests run to completion simply as a side-effect of 349d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # being imported. For the benefit of tests that can't run 350d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # that way (like test_threaded_import), explicitly invoke 351d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # their test_main() function (if it exists). 352d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test = getattr(the_module, "test_main", None) 353d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters if indirect_test is not None: 354d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test() 35541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum finally: 356342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters sys.stdout = save_stdout 3573af826ebca80f8a6c782fb590c77ac210ae9e22dThomas Wouters except (ImportError, test_support.TestSkipped), msg: 358f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick if not quiet: 359eb9490526508dc643c2329771f95a925e5412049Guido van Rossum print "test", test, "skipped --", msg 36041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return -1 361fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake except KeyboardInterrupt: 362fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake raise 363152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except test_support.TestFailed, msg: 36441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "test", test, "failed --", msg 36541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 3669e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum except: 36741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum type, value = sys.exc_info()[:2] 36827c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake print "test", test, "crashed --", str(type) + ":", value 36941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if verbose: 37041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum traceback.print_exc(file=sys.stdout) 37141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 372152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 3730fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if not cfp: 3740fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3750fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum output = cfp.getvalue() 376e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if generate: 377e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if output == test + "\n": 378e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if os.path.exists(outputfile): 379e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # Write it since it already exists (and the contents 380e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # may have changed), but let the user know it isn't 381e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # needed: 382e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake print "output file", outputfile, \ 383e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake "is no longer needed; consider removing it" 3840fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 3850fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum # We don't need it, so don't create it. 3860fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3870fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp = open(outputfile, "w") 3880fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.write(output) 3890fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.close() 3900fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3910fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if os.path.exists(outputfile): 3920fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp = open(outputfile, "r") 3930fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum expected = fp.read() 3940fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.close() 3950fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 3960fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum expected = test + "\n" 3970fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if output == expected: 3980fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3990fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "test", test, "produced unexpected output:" 4000fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum reportdiff(expected, output) 4010fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 0 4020fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum 4030fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossumdef reportdiff(expected, output): 4040fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum import difflib 405c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "*" * 70 406c377b16d12ba325bb108eca575447d66f19294c0Tim Peters a = expected.splitlines(1) 407c377b16d12ba325bb108eca575447d66f19294c0Tim Peters b = output.splitlines(1) 408cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum sm = difflib.SequenceMatcher(a=a, b=b) 409cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum tuples = sm.get_opcodes() 410c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 411cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum def pair(x0, x1): 412c377b16d12ba325bb108eca575447d66f19294c0Tim Peters # x0:x1 are 0-based slice indices; convert to 1-based line indices. 413cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum x0 += 1 414cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum if x0 >= x1: 415c377b16d12ba325bb108eca575447d66f19294c0Tim Peters return "line " + str(x0) 416cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum else: 417c377b16d12ba325bb108eca575447d66f19294c0Tim Peters return "lines %d-%d" % (x0, x1) 418c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 419cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for op, a0, a1, b0, b1 in tuples: 420cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum if op == 'equal': 421cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum pass 422c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 423cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'delete': 424c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "***", pair(a0, a1), "of expected output missing:" 425cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for line in a[a0:a1]: 426c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "-", line, 427c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 428cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'replace': 429c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "*** mismatch between", pair(a0, a1), "of expected", \ 430c377b16d12ba325bb108eca575447d66f19294c0Tim Peters "output and", pair(b0, b1), "of actual output:" 431c377b16d12ba325bb108eca575447d66f19294c0Tim Peters for line in difflib.ndiff(a[a0:a1], b[b0:b1]): 432c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print line, 433c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 434cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'insert': 435c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "***", pair(b0, b1), "of actual output doesn't appear", \ 436c377b16d12ba325bb108eca575447d66f19294c0Tim Peters "in expected output after line", str(a1)+":" 437cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for line in b[b0:b1]: 438c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "+", line, 439c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 440cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum else: 441cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1) 442c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 4430fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "*" * 70 444152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 445152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir(): 446152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if __name__ == '__main__': 44741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = sys.argv[0] 448152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 44941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = __file__ 450152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum testdir = os.path.dirname(file) or os.curdir 451152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return testdir 452152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 453c5000dfc4098f8547461e790a91536a923124261Tim Petersdef removepy(name): 454c5000dfc4098f8547461e790a91536a923124261Tim Peters if name.endswith(os.extsep + "py"): 455c5000dfc4098f8547461e790a91536a923124261Tim Peters name = name[:-3] 456c5000dfc4098f8547461e790a91536a923124261Tim Peters return name 457c5000dfc4098f8547461e790a91536a923124261Tim Peters 458152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word): 459152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if n == 1: 46041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %s" % (n, word) 461152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 46241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %ss" % (n, word) 463152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 464a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4): 465a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """Print the elements of a sequence to stdout. 466a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 467a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg width (default 70) is the maximum line length. 468a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg indent (default 4) is the number of blanks with which to 469a45da92484ceececf1cf32b4dfb16004945b001eTim Peters begin each line. 470a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """ 471a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 472ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters from textwrap import fill 473ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters blanks = ' ' * indent 474ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters print fill(' '.join(map(str, x)), width, 475ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters initial_indent=blanks, subsequent_indent=blanks) 476a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 477b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _Set: 478b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self, seq=[]): 479b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = self.data = {} 480b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters for x in seq: 481b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data[x] = 1 482b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 483b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __len__(self): 484b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return len(self.data) 485b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 486b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __sub__(self, other): 487b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return set of all elements in self not in other." 488b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters result = _Set() 489b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = result.data = self.data.copy() 490b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters for x in other.data: 491b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if x in data: 492b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters del data[x] 493b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return result 494b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 49539f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton def __iter__(self): 49639f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton return iter(self.data) 49739f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton 498b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def tolist(self, sorted=1): 499b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return _Set elements as a list." 500b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = self.data.keys() 501b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if sorted: 502b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data.sort() 503b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return data 504b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 505de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# Map sys.platform to a string containing the basenames of tests 506de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# expected to be skipped on that platform. 507de14a30d1d70073d36f207fe432e4adad5178399Tim Peters 508f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = { 509f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'win32': 510f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 511f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_al 512f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cd 513f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cl 514f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_commands 515f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_crypt 516d703057752d52cef6082a920879a0b62cdeffacaTim Peters test_curses 517f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dbm 518f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 519deb121aec7185f0d8034453203c6be436b2951f5Tim Peters test_email_codecs 520f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fcntl 521f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fork1 522f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gdbm 523f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gl 524f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_grp 525f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_imgfile 526f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 527f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_linuxaudiodev 528f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_mhlib 529de14a30d1d70073d36f207fe432e4adad5178399Tim Peters test_mpz 530f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_nis 531f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_openpty 532f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_poll 533f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pty 534f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pwd 5351e33ffa5c719ec611e182681c4a5f2ceb62a08f5Tim Peters test_resource 536f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_signal 53708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_socket_ssl 538a86f0c17a1385c07710d894b93a1c13159c0b57fTim Peters test_socketserver 539f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_sunaudiodev 540f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_timing 541f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 542f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'linux2': 543f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 544f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_al 545f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cd 546f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cl 547f66dacdb017c7481c3ba4f0743d5446146de33c8Guido van Rossum test_curses 548f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 5496184c117e9af1cf6178fd34bd7c576ce36107df2Guido van Rossum test_email_codecs 550f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gl 551f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_imgfile 552f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 553f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_nis 554f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_ntpath 55508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_socket_ssl 556f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_socketserver 557f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_sunaudiodev 558f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_unicode_file 559f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_winreg 560f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_winsound 561f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 56249a806edbb298f2a5be3598bd80c21392cb6968dJack Jansen 'mac': 563aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """ 564aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_al 565aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_bsddb 566aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_cd 567aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_cl 568aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_commands 569aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_crypt 570b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen test_curses 571aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dbm 572aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dl 573aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fcntl 574aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fork1 575aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_gl 576aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_grp 577aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_imgfile 578aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_largefile 579aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_linuxaudiodev 580aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_locale 581aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_mmap 582aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_nis 583aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_ntpath 584aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_openpty 585aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_poll 586aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_popen2 587aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pty 588aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pwd 589aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_signal 590aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_socket_ssl 591aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_socketserver 592aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_sunaudiodev 593aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_sundry 594aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_timing 595aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_unicode_file 596aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_winreg 597aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_winsound 598aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """, 5990ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis 'unixware5': 6000ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """ 6010ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_al 6020ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_bsddb 6030ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_cd 6040ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_cl 6050ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_dl 6060ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_gl 6070ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_imgfile 6080ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_largefile 6090ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_linuxaudiodev 6100ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_minidom 6110ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_nis 6120ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_ntpath 6130ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_openpty 6140ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_pyexpat 6150ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sax 6160ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_socketserver 6170ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sunaudiodev 6180ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sundry 6190ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_unicode_file 6200ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_winreg 6210ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_winsound 6220ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """, 623e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum 'riscos': 624e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """ 625e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_al 626e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_asynchat 627e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_bsddb 628e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_cd 629e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_cl 630e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_commands 631e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_crypt 632e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dbm 633e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dl 634e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fcntl 635e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fork1 636e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_gdbm 637e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_gl 638e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_grp 639e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_imgfile 640e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_largefile 641e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_linuxaudiodev 642e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_locale 643e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_mmap 644e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_nis 645e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_ntpath 646e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_openpty 647e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_poll 648e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_popen2 649e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pty 650e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pwd 651e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_socket_ssl 652e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_socketserver 653e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_strop 654e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_sunaudiodev 655e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_sundry 656e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_thread 657e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threaded_import 658e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threadedtempfile 659e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threading 660e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_timing 661e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_unicode_file 662e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_winreg 663e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_winsound 664e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """, 6658a97f4a380a7a356730e48406f8269c3efe5e6ebJack Jansen 'darwin': 666398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """ 667398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_al 668398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_cd 669398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_cl 670398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_curses 671398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_dl 672398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_gdbm 673398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_gl 674398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_imgfile 675398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_largefile 676398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_linuxaudiodev 677398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_minidom 678398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_nis 679398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_ntpath 680398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_poll 681398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_socket_ssl 682f839c27027ee0656319b7d7033d898e5b559c96bJack Jansen test_socketserver 683398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_sunaudiodev 684f839c27027ee0656319b7d7033d898e5b559c96bJack Jansen test_unicode_file 685398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_winreg 686398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_winsound 687398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """, 68811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum 'sunos5': 68911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum """ 69011c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_al 69111c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_bsddb 69211c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_cd 69311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_cl 69411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_curses 69511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_dbm 69611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_email_codecs 69711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gdbm 69811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gl 69911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gzip 70011c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_imgfile 70111c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_linuxaudiodev 70211c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_mpz 70311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_openpty 70411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_socket_ssl 70511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_socketserver 70611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_winreg 70711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_winsound 70811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_zipfile 70911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_zlib 710ed375e18d10d37bfea1769aa1fe69795df6cbc10Jeremy Hylton """, 711b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro 'hp-ux11': 712b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """ 713b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_al 714b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_bsddb 715b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_cd 716b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_cl 717b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_curses 718b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_dl 719b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gdbm 720b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gl 721b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gzip 722b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_imgfile 723b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_largefile 724b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_linuxaudiodev 725b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_locale 726b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_minidom 727b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_nis 728b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_ntpath 729b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_openpty 730b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_pyexpat 731b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_sax 732b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_socket_ssl 733b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_socketserver 734b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_sunaudiodev 735b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_unicode_file 736b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_winreg 737b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_winsound 738b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zipfile 739b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zlib 740b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """, 741f90ae20354ceb501f0ba0b6459df17f1a8005a47Martin v. Löwis 'atheos': 742c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters """ 743c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_al 744c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_cd 745c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_cl 746c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_curses 747c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_dl 748c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_email_codecs 749c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_gdbm 750c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_gl 751c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_imgfile 752c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_largefile 753c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_linuxaudiodev 754c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_locale 755c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mhlib 756c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mmap 757c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mpz 758c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_nis 759c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_poll 760c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_popen2 761c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_resource 762c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_socket_ssl 763c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_socketserver 764c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_sunaudiodev 765c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_unicode_file 766c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_winreg 767c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_winsound 768c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters """, 769f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum} 770f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 771b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips: 772b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self): 773b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.valid = 0 774de14a30d1d70073d36f207fe432e4adad5178399Tim Peters if sys.platform in _expectations: 775f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum s = _expectations[sys.platform] 776b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.expected = _Set(s.split()) 777f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum self.valid = 1 778b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 779b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def isvalid(self): 780b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return true iff _ExpectedSkips knows about the current platform." 781b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.valid 782b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 783b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def getexpected(self): 784b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """Return set of test names we expect to skip on current platform. 785b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 786b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.isvalid() must be true. 787b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """ 788b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 789b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters assert self.isvalid() 790b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.expected 791b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 792152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumif __name__ == '__main__': 793408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # Remove regrtest.py's own directory from the module search path. This 794408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # prevents relative imports from working, and relative imports will screw 795408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # up the testing framework. E.g. if both test.test_support and 796408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # test_support are imported, they will not contain the same globals, and 797408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # much of the testing framework relies on the globals in the 798408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # test.test_support module. 799408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0]))) 800408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw i = pathlen = len(sys.path) 801408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw while i >= 0: 802408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw i -= 1 803408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if os.path.abspath(os.path.normpath(sys.path[i])) == mydir: 804408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw del sys.path[i] 805408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if len(sys.path) == pathlen: 806408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw print 'Could not find %r in sys.path to remove it' % mydir 80708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw main() 808