regrtest.py revision 08fca5212528e073600c27c70a34eeef445f393b
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 3908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw largefile - It is okay to run some test that may create huge files. These 4008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw tests can take a long time and may consume >2GB of disk space 4108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw temporarily. 4208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 4308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw network - It is okay to run tests that use external network resource, 4408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw e.g. testing SSL support for sockets. 45152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum""" 46152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 47152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport sys 48152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport os 49152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport getopt 509e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossumimport traceback 51ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaroimport random 52ae1bb176bea47b2123bba208733edb42692e9431Fred Drakeimport StringIO 53152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 54152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport test_support 55152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 5608fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''): 5708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw print __doc__ 5808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if msg: print msg 5908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(code) 6008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 6108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 62ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanarodef main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, 63d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer exclude=0, single=0, randomize=0, findleaks=0, 6408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources=None): 656fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Execute a test suite. 666fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 677e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters This also parses command-line options and modifies its behavior 68004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake accordingly. 696fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 706fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum tests -- a list of strings containing test names (optional) 716fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- the directory in which to look for tests (optional) 726fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 736fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum Users other than the Python test suite will certainly want to 746fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum specify testdir; if it's omitted, the directory containing the 75004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake Python test suite is searched for. 766fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 776fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum If the tests argument is omitted, the tests listed on the 786fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum command-line will be used. If that's empty, too, then all *.py 796fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum files beginning with test_ will be used. 80ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro 8108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw The other default arguments (verbose, quiet, generate, exclude, single, 8208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw randomize, findleaks, and use_resources) allow programmers calling main() 83a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw directly to set the values that would normally be set by flags on the 84a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw command line. 85a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 866fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 87004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake 88152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 8908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsrlu:', 9008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw ['help', 'verbose', 'quiet', 'generate', 9108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 'exclude', 'single', 'random', 9208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 'findleaks', 'use=']) 93152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except getopt.error, msg: 9408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, msg) 9508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 9608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw # Defaults 9708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if use_resources is None: 9808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources = [] 99152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for o, a in opts: 10008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if o in ('-h', '--help'): 10108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(0) 10208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-v', '--verbose'): 10308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose += 1 10408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-q', '--quiet'): 10508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw quiet = 1; 10608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose = 0 10708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-g', '--generate'): 10808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw generate = 1 10908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-x', '--exclude'): 11008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw exclude = 1 11108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-s', '--single'): 11208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw single = 1 11308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-r', '--randomize'): 11408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw randomize = 1 11508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-l', '--findleaks'): 11608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw findleaks = 1 11708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-u', '--use'): 11808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources = [x.lower() for x in a.split(',')] 11908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw for r in use_resources: 12008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if r not in ('largefile', 'network'): 12108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(1, 'Invalid -u/--use option: %s' % a) 122a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum if generate and verbose: 12308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, "-g and -v don't go together!") 12408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 125152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum good = [] 126152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum bad = [] 127152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum skipped = [] 128e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 129d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 130a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw try: 131a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw import gc 132a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw except ImportError: 1338a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print 'No GC available, disabling findleaks.' 134d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer findleaks = 0 135a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw else: 1368a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # Uncomment the line below to report garbage that is not 1378a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # freeable by reference counting alone. By default only 1388a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # garbage that is not collectable by the GC is reported. 1398a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer #gc.set_debug(gc.DEBUG_SAVEALL) 140d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage = [] 141a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 142e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 143e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw from tempfile import gettempdir 144e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw filename = os.path.join(gettempdir(), 'pynexttest') 145e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw try: 146e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'r') 147fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond next = fp.read().strip() 148e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = [next] 149e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 150e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw except IOError: 151e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw pass 152a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum for i in range(len(args)): 15341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum # Strip trailing ".py" from arguments 15441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if args[i][-3:] == '.py': 15541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum args[i] = args[i][:-3] 1566c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests = STDTESTS[:] 1576c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests = NOTTESTS[:] 158152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if exclude: 1596c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum for arg in args: 1606c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum if arg in stdtests: 1616c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests.remove(arg) 1626c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests[:0] = args 16341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum args = [] 164747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum tests = tests or args or findtests(testdir, stdtests, nottests) 165e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 166e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = tests[:1] 167ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro if randomize: 168ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro random.shuffle(tests) 16941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum test_support.verbose = verbose # Tell tests to be moderately quiet 17008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_support.use_resources = use_resources 1715796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum save_modules = sys.modules.keys() 172152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for test in tests: 17341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not quiet: 17441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test 175f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick ok = runtest(test, generate, verbose, quiet, testdir) 17641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if ok > 0: 17741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum good.append(test) 17841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum elif ok == 0: 17941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum bad.append(test) 18041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum else: 18141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum skipped.append(test) 182d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 183d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer gc.collect() 184d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if gc.garbage: 1858a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "Warning: test created", len(gc.garbage), 1868a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "uncollectable object(s)." 1878a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # move the uncollectable objects somewhere so we don't see 1888a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # them again 189d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage.extend(gc.garbage) 190d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer del gc.garbage[:] 1915796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum # Unload the newly imported modules (best effort finalization) 1925796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum for module in sys.modules.keys(): 19351931144427faa001a6db3cfc37380526be256b6Guido van Rossum if module not in save_modules and module.startswith("test."): 1945796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum test_support.unload(module) 195152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if good and not quiet: 19641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not bad and not skipped and len(good) > 1: 19741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "All", 19841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print count(len(good), "test"), "OK." 1991a4d77b2527ced1052b4faae3d176b125a764325Tim Peters if verbose: 2001a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print "CAUTION: stdout isn't compared in verbose mode: a test" 2011a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print "that passes in verbose mode may fail without it." 202152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if bad: 203a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(bad), "test"), "failed:" 204a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(bad) 205152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if skipped and not quiet: 206a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(skipped), "test"), "skipped:" 207a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(skipped) 208e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 209b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters e = _ExpectedSkips() 210a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters plat = sys.platform 211b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if e.isvalid(): 212b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters surprise = _Set(skipped) - e.getexpected() 213b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if surprise: 214b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print count(len(surprise), "skip"), \ 215a45da92484ceececf1cf32b4dfb16004945b001eTim Peters "unexpected on", plat + ":" 216a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(surprise) 217b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 218b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Those skips are all expected on", plat + "." 219b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 220b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Ask someone to teach regrtest.py about which tests are" 221b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "expected to get skipped on", plat + "." 222b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 223e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 224e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw alltests = findtests(testdir, stdtests, nottests) 225e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw for i in range(len(alltests)): 226e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if tests[0] == alltests[i]: 227e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if i == len(alltests) - 1: 228e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 229e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 230e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'w') 231e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.write(alltests[i+1] + '\n') 232e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 233e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw break 234e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 235e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 236e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 23708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(len(bad) > 0) 23808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 239152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 2406fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [ 241152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_grammar', 242152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_opcodes', 243152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_operations', 244152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_builtin', 245152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_exceptions', 246152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_types', 247152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 248152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 2496fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [ 250152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_support', 251152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_b1', 252152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_b2', 25362e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future1', 25462e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future2', 2558471a35febdbfbfab51b9d4b5fe51694fe6ca536Jeremy Hylton 'test_future3', 256152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 257152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 2586fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossumdef findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): 259152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum """Return a list of all applicable test modules.""" 2606fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 261152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum names = os.listdir(testdir) 262152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests = [] 263152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for name in names: 26441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if name[:5] == "test_" and name[-3:] == ".py": 26541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum modname = name[:-3] 26641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if modname not in stdtests and modname not in nottests: 26741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum tests.append(modname) 268152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests.sort() 269152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return stdtests + tests 270152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 271f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mickdef runtest(test, generate, verbose, quiet, testdir = None): 2726fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Run a single test. 2736fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum test -- the name of the test 2746fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum generate -- if true, generate output, instead of running the test 2756fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum and comparing it to a previously created output file 2766fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum verbose -- if true, print more messages 277f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick quiet -- if true, don't print 'skipped' messages (probably redundant) 2786fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- test directory 2796fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 280152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum test_support.unload(test) 2816fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 282152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum outputdir = os.path.join(testdir, "output") 283152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum outputfile = os.path.join(outputdir, test) 284152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 28541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if generate: 286e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake cfp = StringIO.StringIO() 28741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum elif verbose: 28841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum cfp = sys.stdout 28941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum else: 29041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum cfp = Compare(outputfile) 291152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except IOError: 29241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum cfp = None 29341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "Warning: can't open", outputfile 294152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 29541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum save_stdout = sys.stdout 29641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum try: 29741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if cfp: 29841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum sys.stdout = cfp 29941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test # Output file starts with test name 300d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters the_module = __import__(test, globals(), locals(), []) 301d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # Most tests run to completion simply as a side-effect of 302d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # being imported. For the benefit of tests that can't run 303d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # that way (like test_threaded_import), explicitly invoke 304d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # their test_main() function (if it exists). 305d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test = getattr(the_module, "test_main", None) 306d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters if indirect_test is not None: 307d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test() 308fff9e2094393dffe89720d59aba9427ca3b18d0bJeremy Hylton if cfp and not (generate or verbose): 309fff9e2094393dffe89720d59aba9427ca3b18d0bJeremy Hylton cfp.close() 31041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum finally: 31141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum sys.stdout = save_stdout 3123af826ebca80f8a6c782fb590c77ac210ae9e22dThomas Wouters except (ImportError, test_support.TestSkipped), msg: 313f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick if not quiet: 314f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick print "test", test, 315f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick print "skipped -- ", msg 31641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return -1 317fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake except KeyboardInterrupt: 318fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake raise 319152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except test_support.TestFailed, msg: 32041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "test", test, "failed --", msg 32141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 3229e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum except: 32341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum type, value = sys.exc_info()[:2] 32427c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake print "test", test, "crashed --", str(type) + ":", value 32541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if verbose: 32641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum traceback.print_exc(file=sys.stdout) 32741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 328152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 329e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if generate: 330e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake output = cfp.getvalue() 331e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if output == test + "\n": 332e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if os.path.exists(outputfile): 333e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # Write it since it already exists (and the contents 334e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # may have changed), but let the user know it isn't 335e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # needed: 336e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake fp = open(outputfile, "w") 337e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake fp.write(output) 338e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake fp.close() 339e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake print "output file", outputfile, \ 340e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake "is no longer needed; consider removing it" 341e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # else: 342e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # We don't need it, so don't create it. 343e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake else: 344e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake fp = open(outputfile, "w") 345e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake fp.write(output) 346e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake fp.close() 34741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 1 348152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 349152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir(): 350152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if __name__ == '__main__': 35141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = sys.argv[0] 352152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 35341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = __file__ 354152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum testdir = os.path.dirname(file) or os.curdir 355152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return testdir 356152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 357152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word): 358152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if n == 1: 35941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %s" % (n, word) 360152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 36141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %ss" % (n, word) 362152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 363a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4): 364a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """Print the elements of a sequence to stdout. 365a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 366a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg width (default 70) is the maximum line length. 367a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg indent (default 4) is the number of blanks with which to 368a45da92484ceececf1cf32b4dfb16004945b001eTim Peters begin each line. 369a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """ 370a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 371a45da92484ceececf1cf32b4dfb16004945b001eTim Peters line = ' ' * indent 372a45da92484ceececf1cf32b4dfb16004945b001eTim Peters for one in map(str, x): 373a45da92484ceececf1cf32b4dfb16004945b001eTim Peters w = len(line) + len(one) 374a45da92484ceececf1cf32b4dfb16004945b001eTim Peters if line[-1:] == ' ': 375a45da92484ceececf1cf32b4dfb16004945b001eTim Peters pad = '' 376a45da92484ceececf1cf32b4dfb16004945b001eTim Peters else: 377a45da92484ceececf1cf32b4dfb16004945b001eTim Peters pad = ' ' 378a45da92484ceececf1cf32b4dfb16004945b001eTim Peters w += 1 379a45da92484ceececf1cf32b4dfb16004945b001eTim Peters if w > width: 380a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print line 381a45da92484ceececf1cf32b4dfb16004945b001eTim Peters line = ' ' * indent + one 382a45da92484ceececf1cf32b4dfb16004945b001eTim Peters else: 383a45da92484ceececf1cf32b4dfb16004945b001eTim Peters line += pad + one 384a45da92484ceececf1cf32b4dfb16004945b001eTim Peters if len(line) > indent: 385a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print line 386a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 387152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumclass Compare: 388152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum def __init__(self, filename): 389ae1bb176bea47b2123bba208733edb42692e9431Fred Drake if os.path.exists(filename): 390ae1bb176bea47b2123bba208733edb42692e9431Fred Drake self.fp = open(filename, 'r') 391ae1bb176bea47b2123bba208733edb42692e9431Fred Drake else: 392ae1bb176bea47b2123bba208733edb42692e9431Fred Drake self.fp = StringIO.StringIO( 393ae1bb176bea47b2123bba208733edb42692e9431Fred Drake os.path.basename(filename) + "\n") 3941a4d77b2527ced1052b4faae3d176b125a764325Tim Peters self.stuffthatmatched = [] 395152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 396152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum def write(self, data): 39741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum expected = self.fp.read(len(data)) 3981a4d77b2527ced1052b4faae3d176b125a764325Tim Peters if data == expected: 3991a4d77b2527ced1052b4faae3d176b125a764325Tim Peters self.stuffthatmatched.append(expected) 4001a4d77b2527ced1052b4faae3d176b125a764325Tim Peters else: 4011a4d77b2527ced1052b4faae3d176b125a764325Tim Peters # This Compare instance is spoofing stdout, so we need to write 4021a4d77b2527ced1052b4faae3d176b125a764325Tim Peters # to stderr instead. 4031a4d77b2527ced1052b4faae3d176b125a764325Tim Peters from sys import stderr as e 4041a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print >> e, "The actual stdout doesn't match the expected stdout." 4051a4d77b2527ced1052b4faae3d176b125a764325Tim Peters if self.stuffthatmatched: 4061a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print >> e, "This much did match (between asterisk lines):" 4071a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print >> e, "*" * 70 4081a4d77b2527ced1052b4faae3d176b125a764325Tim Peters good = "".join(self.stuffthatmatched) 4091a4d77b2527ced1052b4faae3d176b125a764325Tim Peters e.write(good) 4101a4d77b2527ced1052b4faae3d176b125a764325Tim Peters if not good.endswith("\n"): 4111a4d77b2527ced1052b4faae3d176b125a764325Tim Peters e.write("\n") 4121a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print >> e, "*" * 70 4131a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print >> e, "Then ..." 4141a4d77b2527ced1052b4faae3d176b125a764325Tim Peters else: 4151a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print >> e, "The first write to stdout clashed:" 4161a4d77b2527ced1052b4faae3d176b125a764325Tim Peters # Note that the prompts are the same length in next two lines. 4171a4d77b2527ced1052b4faae3d176b125a764325Tim Peters # This is so what we expected and what we got line up. 4181a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print >> e, "We expected (repr):", `expected` 4191a4d77b2527ced1052b4faae3d176b125a764325Tim Peters print >> e, "But instead we got:", `data` 4201a4d77b2527ced1052b4faae3d176b125a764325Tim Peters raise test_support.TestFailed('Writing: ' + `data`+ 4211a4d77b2527ced1052b4faae3d176b125a764325Tim Peters ', expected: ' + `expected`) 422152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 423e87ed5f6d4ba0d468e1b8620c9b8e785ed1f31a2Guido van Rossum def writelines(self, listoflines): 424e87ed5f6d4ba0d468e1b8620c9b8e785ed1f31a2Guido van Rossum map(self.write, listoflines) 425e87ed5f6d4ba0d468e1b8620c9b8e785ed1f31a2Guido van Rossum 42675fce308bc79ab1f0774e9b3f61031121994e5dfGuido van Rossum def flush(self): 42741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum pass 42875fce308bc79ab1f0774e9b3f61031121994e5dfGuido van Rossum 429152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum def close(self): 43041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum leftover = self.fp.read() 43141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if leftover: 4321a4d77b2527ced1052b4faae3d176b125a764325Tim Peters raise test_support.TestFailed('Tail of expected stdout unseen: ' + 4331a4d77b2527ced1052b4faae3d176b125a764325Tim Peters `leftover`) 43441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum self.fp.close() 435152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 436152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum def isatty(self): 43741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 438152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 439b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _Set: 440b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self, seq=[]): 441b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = self.data = {} 442b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters for x in seq: 443b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data[x] = 1 444b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 445b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __len__(self): 446b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return len(self.data) 447b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 448b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __sub__(self, other): 449b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return set of all elements in self not in other." 450b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters result = _Set() 451b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = result.data = self.data.copy() 452b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters for x in other.data: 453b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if x in data: 454b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters del data[x] 455b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return result 456b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 45739f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton def __iter__(self): 45839f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton return iter(self.data) 45939f77bc90e16a6f3fffc7f770bc7bc6bd2c7a0a8Jeremy Hylton 460b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def tolist(self, sorted=1): 461b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return _Set elements as a list." 462b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data = self.data.keys() 463b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if sorted: 464b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters data.sort() 465b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return data 466b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 467f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = { 468f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'win32': 469f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 470f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_al 471f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cd 472f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cl 473f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_commands 474f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_crypt 475f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dbm 476f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 477f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fcntl 478f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fork1 479f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gdbm 480f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gl 481f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_grp 482f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_imgfile 483f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 484f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_linuxaudiodev 485f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_mhlib 486f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_nis 487f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_openpty 488f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_poll 489f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pty 490f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pwd 491f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_signal 49208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_socket_ssl 493f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_socketserver 494f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_sunaudiodev 495f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_timing 496f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 497f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'linux2': 498f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 499f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_al 500f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cd 501f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cl 502f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 503f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gl 504f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_imgfile 505f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 506f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_nis 507f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_ntpath 50808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_socket_ssl 509f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_socketserver 510f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_sunaudiodev 511f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_unicode_file 512f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_winreg 513f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_winsound 514f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 515f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum} 516f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 517b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips: 518b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self): 519b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.valid = 0 520f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum if _expectations.has_key(sys.platform): 521f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum s = _expectations[sys.platform] 522b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.expected = _Set(s.split()) 523f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum self.valid = 1 524b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 525b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def isvalid(self): 526b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return true iff _ExpectedSkips knows about the current platform." 527b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.valid 528b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 529b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def getexpected(self): 530b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """Return set of test names we expect to skip on current platform. 531b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 532b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.isvalid() must be true. 533b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """ 534b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 535b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters assert self.isvalid() 536b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.expected 537b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 538152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumif __name__ == '__main__': 53908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw main() 540