regrtest.py revision d703057752d52cef6082a920879a0b62cdeffaca
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 178a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer-l: findleaks -- if GC is available detect tests that leak memory 1808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw-u: use -- specify which special resource intensive tests to run 1908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw-h: help -- print this text and exit 20152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 21152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf non-option arguments are present, they are names for tests to run, 22152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumunless -x is given, in which case they are names for tests not to run. 23152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf no test names are given, all tests are run. 24f58ed2596706b97c16174a839c1ed6f6b1f87fa6Guido van Rossum 25a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum-v is incompatible with -g and does not compare test output files. 26e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 2722e4182d6065b63532e7af8b14485ce0ab0075dbBarry Warsaw-s means to run only a single test and exit. This is useful when doing memory 2822e4182d6065b63532e7af8b14485ce0ab0075dbBarry Warsawanalysis on the Python interpreter (which tend to consume to many resources to 2922e4182d6065b63532e7af8b14485ce0ab0075dbBarry Warsawrun the full regression test non-stop). The file /tmp/pynexttest is read to 3022e4182d6065b63532e7af8b14485ce0ab0075dbBarry Warsawfind the next test to run. If this file is missing, the first test_*.py file 3122e4182d6065b63532e7af8b14485ce0ab0075dbBarry Warsawin testdir or on the command line is used. (actually tempfile.gettempdir() is 3222e4182d6065b63532e7af8b14485ce0ab0075dbBarry Warsawused instead of /tmp). 33e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 3408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw-u is used to specify which special resource intensive tests to run, such as 3508fca5212528e073600c27c70a34eeef445f393bBarry Warsawthose requiring large file support or network connectivity. The argument is a 3608fca5212528e073600c27c70a34eeef445f393bBarry Warsawcomma-separated list of words indicating the resources to test. Currently 3708fca5212528e073600c27c70a34eeef445f393bBarry Warsawonly the following are defined: 3808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 392158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling curses - Tests that use curses and will modify the terminal's 402158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling state and output modes. 412158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling 4208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw largefile - It is okay to run some test that may create huge files. These 4308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw tests can take a long time and may consume >2GB of disk space 4408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw temporarily. 4508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 4608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw network - It is okay to run tests that use external network resource, 4708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw e.g. testing SSL support for sockets. 48152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum""" 49152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 50152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport sys 51152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport os 52152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport getopt 539e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossumimport traceback 54ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaroimport random 55ae1bb176bea47b2123bba208733edb42692e9431Fred Drakeimport StringIO 56152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 57152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport test_support 58152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 5908fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''): 6008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw print __doc__ 6108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if msg: print msg 6208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(code) 6308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 6408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 65ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanarodef main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, 66d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer exclude=0, single=0, randomize=0, findleaks=0, 6708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources=None): 686fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Execute a test suite. 696fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 707e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters This also parses command-line options and modifies its behavior 71004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake accordingly. 726fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 736fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum tests -- a list of strings containing test names (optional) 746fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- the directory in which to look for tests (optional) 756fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 766fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum Users other than the Python test suite will certainly want to 776fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum specify testdir; if it's omitted, the directory containing the 78004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake Python test suite is searched for. 796fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 806fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum If the tests argument is omitted, the tests listed on the 816fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum command-line will be used. If that's empty, too, then all *.py 826fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum files beginning with test_ will be used. 83ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro 8408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw The other default arguments (verbose, quiet, generate, exclude, single, 8508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw randomize, findleaks, and use_resources) allow programmers calling main() 86a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw directly to set the values that would normally be set by flags on the 87a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw command line. 88a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 896fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 90004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake 918dee809410e2d433bb0be5d8a1699736b90db0b5Tim Peters test_support.record_original_stdout(sys.stdout) 92152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 9308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsrlu:', 9408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw ['help', 'verbose', 'quiet', 'generate', 9508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 'exclude', 'single', 'random', 9608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 'findleaks', 'use=']) 97152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except getopt.error, msg: 9808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, msg) 9908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 10008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw # Defaults 10108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if use_resources is None: 10208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources = [] 103152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for o, a in opts: 10408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if o in ('-h', '--help'): 10508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(0) 10608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-v', '--verbose'): 10708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose += 1 10808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-q', '--quiet'): 10908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw quiet = 1; 11008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose = 0 11108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-g', '--generate'): 11208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw generate = 1 11308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-x', '--exclude'): 11408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw exclude = 1 11508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-s', '--single'): 11608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw single = 1 11708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-r', '--randomize'): 11808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw randomize = 1 11908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-l', '--findleaks'): 12008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw findleaks = 1 12108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-u', '--use'): 122fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum u = [x.lower() for x in a.split(',')] 123fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum for r in u: 1242158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling if r not in ('curses', 'largefile', 'network'): 12508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(1, 'Invalid -u/--use option: %s' % a) 126fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum use_resources.extend(u) 127a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum if generate and verbose: 12808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, "-g and -v don't go together!") 12908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 130152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum good = [] 131152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum bad = [] 132152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum skipped = [] 133e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 134d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 135a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw try: 136a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw import gc 137a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw except ImportError: 1388a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print 'No GC available, disabling findleaks.' 139d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer findleaks = 0 140a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw else: 1418a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # Uncomment the line below to report garbage that is not 1428a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # freeable by reference counting alone. By default only 1438a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # garbage that is not collectable by the GC is reported. 1448a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer #gc.set_debug(gc.DEBUG_SAVEALL) 145d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage = [] 146a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 147e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 148e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw from tempfile import gettempdir 149e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw filename = os.path.join(gettempdir(), 'pynexttest') 150e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw try: 151e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'r') 152fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond next = fp.read().strip() 153e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = [next] 154e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 155e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw except IOError: 156e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw pass 157a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum for i in range(len(args)): 15841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum # Strip trailing ".py" from arguments 15941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if args[i][-3:] == '.py': 16041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum args[i] = args[i][:-3] 1616c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests = STDTESTS[:] 1626c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests = NOTTESTS[:] 163152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if exclude: 1646c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum for arg in args: 1656c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum if arg in stdtests: 1666c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests.remove(arg) 1676c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests[:0] = args 16841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum args = [] 169747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum tests = tests or args or findtests(testdir, stdtests, nottests) 170e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 171e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = tests[:1] 172ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro if randomize: 173ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro random.shuffle(tests) 17441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum test_support.verbose = verbose # Tell tests to be moderately quiet 17508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_support.use_resources = use_resources 1765796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum save_modules = sys.modules.keys() 177152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for test in tests: 17841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not quiet: 17941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test 180f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick ok = runtest(test, generate, verbose, quiet, testdir) 18141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if ok > 0: 18241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum good.append(test) 18341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum elif ok == 0: 18441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum bad.append(test) 18541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum else: 18641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum skipped.append(test) 187d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 188d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer gc.collect() 189d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if gc.garbage: 1908a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "Warning: test created", len(gc.garbage), 1918a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "uncollectable object(s)." 1928a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # move the uncollectable objects somewhere so we don't see 1938a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # them again 194d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage.extend(gc.garbage) 195d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer del gc.garbage[:] 1965796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum # Unload the newly imported modules (best effort finalization) 1975796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum for module in sys.modules.keys(): 19851931144427faa001a6db3cfc37380526be256b6Guido van Rossum if module not in save_modules and module.startswith("test."): 1995796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum test_support.unload(module) 2007a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton 2017a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton # The lists won't be sorted if running with -r 2027a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton good.sort() 2037a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton bad.sort() 2047a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton skipped.sort() 205e0c446bb4ad67294f42d4cb53b4ff28413bd8ddeTim Peters 206152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if good and not quiet: 20741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not bad and not skipped and len(good) > 1: 20841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "All", 20941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print count(len(good), "test"), "OK." 2101a4d77b2527ced1052b4faae3d176b125a764325Tim Peters if verbose: 2111a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print "CAUTION: stdout isn't compared in verbose mode: a test" 2121a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print "that passes in verbose mode may fail without it." 213152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if bad: 214a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(bad), "test"), "failed:" 215a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(bad) 216152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if skipped and not quiet: 217a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(skipped), "test"), "skipped:" 218a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(skipped) 219e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 220b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters e = _ExpectedSkips() 221a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters plat = sys.platform 222b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if e.isvalid(): 223b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters surprise = _Set(skipped) - e.getexpected() 224b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if surprise: 225b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print count(len(surprise), "skip"), \ 226a45da92484ceececf1cf32b4dfb16004945b001eTim Peters "unexpected on", plat + ":" 227a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(surprise) 228b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 229b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Those skips are all expected on", plat + "." 230b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 231b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Ask someone to teach regrtest.py about which tests are" 232b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "expected to get skipped on", plat + "." 233b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 234e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 235e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw alltests = findtests(testdir, stdtests, nottests) 236e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw for i in range(len(alltests)): 237e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if tests[0] == alltests[i]: 238e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if i == len(alltests) - 1: 239e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 240e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 241e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'w') 242e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.write(alltests[i+1] + '\n') 243e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 244e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw break 245e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 246e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 247e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 24808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(len(bad) > 0) 24908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 250152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 2516fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [ 252152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_grammar', 253152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_opcodes', 254152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_operations', 255152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_builtin', 256152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_exceptions', 257152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_types', 258152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 259152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 2606fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [ 261152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_support', 262152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_b1', 263152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_b2', 26462e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future1', 26562e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future2', 2668471a35febdbfbfab51b9d4b5fe51694fe6ca536Jeremy Hylton 'test_future3', 267152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 268152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 2696fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossumdef findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): 270152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum """Return a list of all applicable test modules.""" 2716fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 272152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum names = os.listdir(testdir) 273152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests = [] 274152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for name in names: 27541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if name[:5] == "test_" and name[-3:] == ".py": 27641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum modname = name[:-3] 27741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if modname not in stdtests and modname not in nottests: 27841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum tests.append(modname) 279152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests.sort() 280152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return stdtests + tests 281152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 282f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mickdef runtest(test, generate, verbose, quiet, testdir = None): 2836fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Run a single test. 2846fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum test -- the name of the test 2856fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum generate -- if true, generate output, instead of running the test 2866fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum and comparing it to a previously created output file 2876fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum verbose -- if true, print more messages 288f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick quiet -- if true, don't print 'skipped' messages (probably redundant) 2896fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- test directory 2906fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 291152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum test_support.unload(test) 2926fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 293152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum outputdir = os.path.join(testdir, "output") 294152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum outputfile = os.path.join(outputdir, test) 2959390cc15da5cd6920bd41bb4cd146d5d0601345fTim Peters if verbose: 29641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum cfp = None 2970fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 29888a56857f65d98e9d2b670eab6e048bda519340aFred Drake cfp = StringIO.StringIO() 299152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 300342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters save_stdout = sys.stdout 30141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum try: 30241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if cfp: 30341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum sys.stdout = cfp 30441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test # Output file starts with test name 305d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters the_module = __import__(test, globals(), locals(), []) 306d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # Most tests run to completion simply as a side-effect of 307d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # being imported. For the benefit of tests that can't run 308d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # that way (like test_threaded_import), explicitly invoke 309d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # their test_main() function (if it exists). 310d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test = getattr(the_module, "test_main", None) 311d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters if indirect_test is not None: 312d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test() 31341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum finally: 314342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters sys.stdout = save_stdout 3153af826ebca80f8a6c782fb590c77ac210ae9e22dThomas Wouters except (ImportError, test_support.TestSkipped), msg: 316f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick if not quiet: 317eb9490526508dc643c2329771f95a925e5412049Guido van Rossum print "test", test, "skipped --", msg 31841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return -1 319fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake except KeyboardInterrupt: 320fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake raise 321152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except test_support.TestFailed, msg: 32241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "test", test, "failed --", msg 32341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 3249e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum except: 32541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum type, value = sys.exc_info()[:2] 32627c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake print "test", test, "crashed --", str(type) + ":", value 32741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if verbose: 32841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum traceback.print_exc(file=sys.stdout) 32941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 330152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 3310fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if not cfp: 3320fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3330fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum output = cfp.getvalue() 334e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if generate: 335e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if output == test + "\n": 336e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if os.path.exists(outputfile): 337e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # Write it since it already exists (and the contents 338e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # may have changed), but let the user know it isn't 339e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # needed: 340e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake print "output file", outputfile, \ 341e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake "is no longer needed; consider removing it" 3420fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 3430fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum # We don't need it, so don't create it. 3440fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3450fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp = open(outputfile, "w") 3460fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.write(output) 3470fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.close() 3480fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3490fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if os.path.exists(outputfile): 3500fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp = open(outputfile, "r") 3510fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum expected = fp.read() 3520fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.close() 3530fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 3540fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum expected = test + "\n" 3550fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if output == expected: 3560fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 3570fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "test", test, "produced unexpected output:" 3580fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum reportdiff(expected, output) 3590fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 0 3600fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum 3610fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossumdef reportdiff(expected, output): 3620fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum import difflib 363c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "*" * 70 364c377b16d12ba325bb108eca575447d66f19294c0Tim Peters a = expected.splitlines(1) 365c377b16d12ba325bb108eca575447d66f19294c0Tim Peters b = output.splitlines(1) 366cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum sm = difflib.SequenceMatcher(a=a, b=b) 367cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum tuples = sm.get_opcodes() 368c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 369cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum def pair(x0, x1): 370c377b16d12ba325bb108eca575447d66f19294c0Tim Peters # x0:x1 are 0-based slice indices; convert to 1-based line indices. 371cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum x0 += 1 372cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum if x0 >= x1: 373c377b16d12ba325bb108eca575447d66f19294c0Tim Peters return "line " + str(x0) 374cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum else: 375c377b16d12ba325bb108eca575447d66f19294c0Tim Peters return "lines %d-%d" % (x0, x1) 376c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 377cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for op, a0, a1, b0, b1 in tuples: 378cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum if op == 'equal': 379cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum pass 380c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 381cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'delete': 382c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "***", pair(a0, a1), "of expected output missing:" 383cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for line in a[a0:a1]: 384c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "-", line, 385c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 386cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'replace': 387c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "*** mismatch between", pair(a0, a1), "of expected", \ 388c377b16d12ba325bb108eca575447d66f19294c0Tim Peters "output and", pair(b0, b1), "of actual output:" 389c377b16d12ba325bb108eca575447d66f19294c0Tim Peters for line in difflib.ndiff(a[a0:a1], b[b0:b1]): 390c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print line, 391c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 392cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'insert': 393c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "***", pair(b0, b1), "of actual output doesn't appear", \ 394c377b16d12ba325bb108eca575447d66f19294c0Tim Peters "in expected output after line", str(a1)+":" 395cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for line in b[b0:b1]: 396c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "+", line, 397c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 398cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum else: 399cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1) 400c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 4010fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "*" * 70 402152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 403152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir(): 404152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if __name__ == '__main__': 40541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = sys.argv[0] 406152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 40741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = __file__ 408152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum testdir = os.path.dirname(file) or os.curdir 409152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return testdir 410152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 411152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word): 412152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if n == 1: 41341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %s" % (n, word) 414152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 41541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %ss" % (n, word) 416152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 417a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4): 418a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """Print the elements of a sequence to stdout. 419a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 420a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg width (default 70) is the maximum line length. 421a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg indent (default 4) is the number of blanks with which to 422a45da92484ceececf1cf32b4dfb16004945b001eTim Peters begin each line. 423a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """ 424a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 425a45da92484ceececf1cf32b4dfb16004945b001eTim Peters line = ' ' * indent 426a45da92484ceececf1cf32b4dfb16004945b001eTim Peters for one in map(str, x): 427a45da92484ceececf1cf32b4dfb16004945b001eTim Peters w = len(line) + len(one) 428a45da92484ceececf1cf32b4dfb16004945b001eTim Peters if line[-1:] == ' ': 429a45da92484ceececf1cf32b4dfb16004945b001eTim Peters pad = '' 430a45da92484ceececf1cf32b4dfb16004945b001eTim Peters else: 431a45da92484ceececf1cf32b4dfb16004945b001eTim Peters pad = ' ' 432a45da92484ceececf1cf32b4dfb16004945b001eTim Peters w += 1 433a45da92484ceececf1cf32b4dfb16004945b001eTim Peters if w > width: 434a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print line 435a45da92484ceececf1cf32b4dfb16004945b001eTim Peters line = ' ' * indent + one 436a45da92484ceececf1cf32b4dfb16004945b001eTim Peters else: 437a45da92484ceececf1cf32b4dfb16004945b001eTim Peters line += pad + one 438a45da92484ceececf1cf32b4dfb16004945b001eTim Peters if len(line) > indent: 439a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print line 440a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 441b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _Set: 442b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self, seq=[]): 443b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = self.data = {} 444b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters for x in seq: 445b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data[x] = 1 446b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 447b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __len__(self): 448b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return len(self.data) 449b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 450b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __sub__(self, other): 451b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return set of all elements in self not in other." 452b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters result = _Set() 453b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = result.data = self.data.copy() 454b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters for x in other.data: 455b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if x in data: 456b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters del data[x] 457b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return result 458b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 45939f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton def __iter__(self): 46039f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton return iter(self.data) 46139f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton 462b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def tolist(self, sorted=1): 463b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return _Set elements as a list." 464b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = self.data.keys() 465b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if sorted: 466b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data.sort() 467b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return data 468b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 469f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = { 470f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'win32': 471f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 472f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_al 473f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cd 474f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cl 475f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_commands 476f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_crypt 477d703057752d52cef6082a920879a0b62cdeffacaTim Peters test_curses 478f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dbm 479f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 480f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fcntl 481f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fork1 482f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gdbm 483f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gl 484f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_grp 485f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_imgfile 486f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 487f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_linuxaudiodev 488f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_mhlib 489f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_nis 490f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_openpty 491f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_poll 492f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pty 493f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pwd 494f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_signal 49508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_socket_ssl 496a86f0c17a1385c07710d894b93a1c13159c0b57fTim Peters test_socketserver 497f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_sunaudiodev 498f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_timing 499f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 500f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'linux2': 501f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 502f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_al 503f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cd 504f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cl 505f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 506f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gl 507f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_imgfile 508f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 509f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_nis 510f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_ntpath 51108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_socket_ssl 512f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_socketserver 513f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_sunaudiodev 514f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_unicode_file 515f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_winreg 516f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_winsound 517f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 51849a806edbb298f2a5be3598bd80c21392cb6968dJack Jansen 'mac': 519aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """ 520aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_al 521aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_bsddb 522aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_cd 523aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_cl 524aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_commands 525aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_crypt 526aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dbm 527aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dl 528aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fcntl 529aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fork1 530aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_gl 531aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_grp 532aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_imgfile 533aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_largefile 534aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_linuxaudiodev 535aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_locale 536aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_mmap 537aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_nis 538aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_ntpath 539aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_openpty 540aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_poll 541aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_popen2 542aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pty 543aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pwd 544aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_signal 545aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_socket_ssl 546aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_socketserver 547aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_sunaudiodev 548aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_sundry 549aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_timing 550aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_unicode_file 551aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_winreg 552aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_winsound 553aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """, 5540ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis 'unixware5': 5550ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """ 5560ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_al 5570ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_bsddb 5580ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_cd 5590ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_cl 5600ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_dl 5610ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_gl 5620ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_imgfile 5630ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_largefile 5640ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_linuxaudiodev 5650ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_minidom 5660ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_nis 5670ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_ntpath 5680ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_openpty 5690ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_pyexpat 5700ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sax 5710ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_socketserver 5720ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sunaudiodev 5730ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sundry 5740ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_unicode_file 5750ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_winreg 5760ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_winsound 5770ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """, 578f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum} 579f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 580b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips: 581b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self): 582b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.valid = 0 583f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum if _expectations.has_key(sys.platform): 584f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum s = _expectations[sys.platform] 585b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.expected = _Set(s.split()) 586f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum self.valid = 1 587b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 588b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def isvalid(self): 589b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return true iff _ExpectedSkips knows about the current platform." 590b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.valid 591b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 592b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def getexpected(self): 593b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """Return set of test names we expect to skip on current platform. 594b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 595b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.isvalid() must be true. 596b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """ 597b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 598b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters assert self.isvalid() 599b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.expected 600b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 601152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumif __name__ == '__main__': 60208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw main() 603