regrtest.py revision f2715e076435b74638acb81512c2ee014f75aea2
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. 581c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis 591c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis bsddb - It is okay to run the bsddb testsuite, which takes 601c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis a long time to complete. 614dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake 624dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred DrakeTo enable all resources except one, use '-uall,-<resource>'. For 634dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeexample, to run all the tests except for the bsddb tests, give the 644dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeoption '-uall,-bsddb'. 65152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum""" 66152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 67152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport sys 68152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport os 69152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport getopt 709e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossumimport traceback 71ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaroimport random 72ae1bb176bea47b2123bba208733edb42692e9431Fred Drakeimport StringIO 73dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossumimport warnings 747c7efe90737d4636633127a95a6cab1a55d57cf4Tim Petersfrom sets import Set 75dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum 76dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# I see no other way to suppress these warnings; 77dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# putting them in test_grammar.py has no effect: 7888b1defb6f770c4f74788e8296b88fc31c3936ceGuido van Rossumwarnings.filterwarnings("ignore", "hex/oct constants", FutureWarning, 79dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum ".*test.test_grammar$") 80c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossumif sys.maxint > 0x7fffffff: 81c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum # Also suppress them in <string>, because for 64-bit platforms, 82c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum # that's where test_grammar.py hides them. 83c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning, 84c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum "<string>") 85152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 86bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# MacOSX (a.k.a. Darwin) has a default stack size that is too small 87bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# for deeply recursive regular expressions. We see this as crashes in 88bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# the Python test suite when running test_re.py and test_sre.py. The 89bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# fix is to set the stack limit to 2048. 90bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# This approach may also be useful for other Unixy platforms that 91bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# suffer from small default stack limits. 92bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossumif sys.platform == 'darwin': 93bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum try: 94bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum import resource 95bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum except ImportError: 96bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum pass 97bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum else: 98bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum soft, hard = resource.getrlimit(resource.RLIMIT_STACK) 99bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum newsoft = min(hard, max(soft, 1024*2048)) 100bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard)) 101bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum 10204f357cffef6d764f2f0ff2671dabde75ec250d1Barry Warsawfrom test import test_support 1033a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 1041c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. LöwisRESOURCE_NAMES = ('curses', 'largefile', 'network', 'bsddb') 1053a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 1063a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 10708fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''): 10808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw print __doc__ 10908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if msg: print msg 11008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(code) 11108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 11208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 113ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanarodef main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, 114c5000dfc4098f8547461e790a91536a923124261Tim Peters exclude=0, single=0, randomize=0, fromfile=None, findleaks=0, 11508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources=None): 1166fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Execute a test suite. 1176fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1187e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters This also parses command-line options and modifies its behavior 119004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake accordingly. 1206fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1216fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum tests -- a list of strings containing test names (optional) 1226fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- the directory in which to look for tests (optional) 1236fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1246fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum Users other than the Python test suite will certainly want to 1256fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum specify testdir; if it's omitted, the directory containing the 126004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake Python test suite is searched for. 1276fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1286fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum If the tests argument is omitted, the tests listed on the 1296fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum command-line will be used. If that's empty, too, then all *.py 1306fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum files beginning with test_ will be used. 131ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro 1329e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum The other default arguments (verbose, quiet, generate, exclude, 1339e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum single, randomize, findleaks, and use_resources) allow programmers 1349e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum calling main() directly to set the values that would normally be 1359e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum set by flags on the command line. 136a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 1376fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 138004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake 1398dee809410e2d433bb0be5d8a1699736b90db0b5Tim Peters test_support.record_original_stdout(sys.stdout) 140152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 1419e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsrf:lu:t:', 14208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw ['help', 'verbose', 'quiet', 'generate', 143c5000dfc4098f8547461e790a91536a923124261Tim Peters 'exclude', 'single', 'random', 'fromfile', 1449e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum 'findleaks', 'use=', 'threshold=']) 145152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except getopt.error, msg: 14608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, msg) 14708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 14808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw # Defaults 14908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if use_resources is None: 15008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources = [] 151152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for o, a in opts: 15208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if o in ('-h', '--help'): 15308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(0) 15408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-v', '--verbose'): 15508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose += 1 15608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-q', '--quiet'): 15708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw quiet = 1; 15808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose = 0 15908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-g', '--generate'): 16008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw generate = 1 16108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-x', '--exclude'): 16208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw exclude = 1 16308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-s', '--single'): 16408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw single = 1 16508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-r', '--randomize'): 16608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw randomize = 1 167c5000dfc4098f8547461e790a91536a923124261Tim Peters elif o in ('-f', '--fromfile'): 168c5000dfc4098f8547461e790a91536a923124261Tim Peters fromfile = a 16908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-l', '--findleaks'): 17008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw findleaks = 1 1719e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum elif o in ('-t', '--threshold'): 1729e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum import gc 1739e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum gc.set_threshold(int(a)) 17408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-u', '--use'): 175fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum u = [x.lower() for x in a.split(',')] 176fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum for r in u: 1773a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r == 'all': 1784dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake use_resources[:] = RESOURCE_NAMES 1794dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake continue 1804dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake remove = False 1814dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if r[0] == '-': 1824dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake remove = True 1834dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake r = r[1:] 1843a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r not in RESOURCE_NAMES: 1853a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake usage(1, 'Invalid -u/--use option: ' + a) 1864dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if remove: 1874dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if r in use_resources: 1884dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake use_resources.remove(r) 1894dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake elif r not in use_resources: 190e41abab33b0b467acd6bdc7d73ce4b5cef4fd5bfAndrew MacIntyre use_resources.append(r) 191a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum if generate and verbose: 19208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, "-g and -v don't go together!") 193c5000dfc4098f8547461e790a91536a923124261Tim Peters if single and fromfile: 194c5000dfc4098f8547461e790a91536a923124261Tim Peters usage(2, "-s and -f don't go together!") 19508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 196152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum good = [] 197152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum bad = [] 198152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum skipped = [] 1999a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake resource_denieds = [] 200e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 201d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 202a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw try: 203a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw import gc 204a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw except ImportError: 2058a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print 'No GC available, disabling findleaks.' 206d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer findleaks = 0 207a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw else: 2088a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # Uncomment the line below to report garbage that is not 2098a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # freeable by reference counting alone. By default only 2108a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # garbage that is not collectable by the GC is reported. 2118a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer #gc.set_debug(gc.DEBUG_SAVEALL) 212d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage = [] 213a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 214e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 215e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw from tempfile import gettempdir 216e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw filename = os.path.join(gettempdir(), 'pynexttest') 217e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw try: 218e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'r') 219fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond next = fp.read().strip() 220e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = [next] 221e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 222e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw except IOError: 223e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw pass 224c5000dfc4098f8547461e790a91536a923124261Tim Peters 225c5000dfc4098f8547461e790a91536a923124261Tim Peters if fromfile: 226c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = [] 227c5000dfc4098f8547461e790a91536a923124261Tim Peters fp = open(fromfile) 228c5000dfc4098f8547461e790a91536a923124261Tim Peters for line in fp: 229c5000dfc4098f8547461e790a91536a923124261Tim Peters guts = line.split() # assuming no test has whitespace in its name 230c5000dfc4098f8547461e790a91536a923124261Tim Peters if guts and not guts[0].startswith('#'): 231c5000dfc4098f8547461e790a91536a923124261Tim Peters tests.extend(guts) 232c5000dfc4098f8547461e790a91536a923124261Tim Peters fp.close() 233c5000dfc4098f8547461e790a91536a923124261Tim Peters 234c5000dfc4098f8547461e790a91536a923124261Tim Peters # Strip .py extensions. 235c5000dfc4098f8547461e790a91536a923124261Tim Peters if args: 236c5000dfc4098f8547461e790a91536a923124261Tim Peters args = map(removepy, args) 237c5000dfc4098f8547461e790a91536a923124261Tim Peters if tests: 238c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = map(removepy, tests) 239c5000dfc4098f8547461e790a91536a923124261Tim Peters 2406c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests = STDTESTS[:] 2416c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests = NOTTESTS[:] 242152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if exclude: 2436c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum for arg in args: 2446c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum if arg in stdtests: 2456c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests.remove(arg) 2466c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests[:0] = args 24741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum args = [] 248747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum tests = tests or args or findtests(testdir, stdtests, nottests) 249e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 250e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = tests[:1] 251ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro if randomize: 252ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro random.shuffle(tests) 25341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum test_support.verbose = verbose # Tell tests to be moderately quiet 25408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_support.use_resources = use_resources 2555796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum save_modules = sys.modules.keys() 256152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for test in tests: 25741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not quiet: 25841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test 2593cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 260f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick ok = runtest(test, generate, verbose, quiet, testdir) 26141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if ok > 0: 26241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum good.append(test) 26341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum elif ok == 0: 26441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum bad.append(test) 26541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum else: 26641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum skipped.append(test) 2679a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake if ok == -2: 2689a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake resource_denieds.append(test) 269d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 270d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer gc.collect() 271d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if gc.garbage: 2728a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "Warning: test created", len(gc.garbage), 2738a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "uncollectable object(s)." 2748a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # move the uncollectable objects somewhere so we don't see 2758a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # them again 276d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage.extend(gc.garbage) 277d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer del gc.garbage[:] 2785796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum # Unload the newly imported modules (best effort finalization) 2795796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum for module in sys.modules.keys(): 28051931144427faa001a6db3cfc37380526be256b6Guido van Rossum if module not in save_modules and module.startswith("test."): 2815796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum test_support.unload(module) 2827a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton 2837a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton # The lists won't be sorted if running with -r 2847a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton good.sort() 2857a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton bad.sort() 2867a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton skipped.sort() 287e0c446bb4ad67294f42d4cb53b4ff28413bd8ddeTim Peters 288152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if good and not quiet: 28941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not bad and not skipped and len(good) > 1: 29041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "All", 29141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print count(len(good), "test"), "OK." 2921a4d77b2527ced1052b4faae3d176b125a764325Tim Peters if verbose: 293408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw print "CAUTION: stdout isn't compared in verbose mode:" 294408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw print "a test that passes in verbose mode may fail without it." 295152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if bad: 296a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(bad), "test"), "failed:" 297a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(bad) 298152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if skipped and not quiet: 299a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(skipped), "test"), "skipped:" 300a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(skipped) 301e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 302b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters e = _ExpectedSkips() 303a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters plat = sys.platform 304b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if e.isvalid(): 3059a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake surprise = Set(skipped) - e.getexpected() - Set(resource_denieds) 306b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if surprise: 307b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print count(len(surprise), "skip"), \ 308a45da92484ceececf1cf32b4dfb16004945b001eTim Peters "unexpected on", plat + ":" 309a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(surprise) 310b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 311b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Those skips are all expected on", plat + "." 312b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 313b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Ask someone to teach regrtest.py about which tests are" 314b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "expected to get skipped on", plat + "." 315b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 316e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 317e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw alltests = findtests(testdir, stdtests, nottests) 318e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw for i in range(len(alltests)): 319e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if tests[0] == alltests[i]: 320e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if i == len(alltests) - 1: 321e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 322e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 323e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'w') 324e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.write(alltests[i+1] + '\n') 325e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 326e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw break 327e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 328e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 329e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 33008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(len(bad) > 0) 33108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 332152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 3336fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [ 334152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_grammar', 335152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_opcodes', 336152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_operations', 337152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_builtin', 338152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_exceptions', 339152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_types', 340152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 341152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 3426fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [ 343152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_support', 34462e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future1', 34562e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future2', 3468471a35febdbfbfab51b9d4b5fe51694fe6ca536Jeremy Hylton 'test_future3', 347152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 348152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 3496fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossumdef findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): 350152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum """Return a list of all applicable test modules.""" 3516fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 352152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum names = os.listdir(testdir) 353152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests = [] 354152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for name in names: 355e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum if name[:5] == "test_" and name[-3:] == os.extsep+"py": 35641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum modname = name[:-3] 35741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if modname not in stdtests and modname not in nottests: 35841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum tests.append(modname) 359152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests.sort() 360152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return stdtests + tests 361152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 362f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mickdef runtest(test, generate, verbose, quiet, testdir = None): 3636fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Run a single test. 3646fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum test -- the name of the test 3656fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum generate -- if true, generate output, instead of running the test 3666fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum and comparing it to a previously created output file 3676fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum verbose -- if true, print more messages 368f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick quiet -- if true, don't print 'skipped' messages (probably redundant) 3696fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- test directory 3706fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 371152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum test_support.unload(test) 3726fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 373152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum outputdir = os.path.join(testdir, "output") 374152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum outputfile = os.path.join(outputdir, test) 3759390cc15da5cd6920bd41bb4cd146d5d0601345fTim Peters if verbose: 37641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum cfp = None 3770fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 37888a56857f65d98e9d2b670eab6e048bda519340aFred Drake cfp = StringIO.StringIO() 379152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 380342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters save_stdout = sys.stdout 38141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum try: 38241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if cfp: 38341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum sys.stdout = cfp 38441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test # Output file starts with test name 385408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if test.startswith('test.'): 386408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw abstest = test 387408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw else: 388408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # Always import it from the test package 389408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw abstest = 'test.' + test 390408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw the_package = __import__(abstest, globals(), locals(), []) 391408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw the_module = getattr(the_package, test) 392d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # Most tests run to completion simply as a side-effect of 393d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # being imported. For the benefit of tests that can't run 394d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # that way (like test_threaded_import), explicitly invoke 395d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters # their test_main() function (if it exists). 396d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test = getattr(the_module, "test_main", None) 397d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters if indirect_test is not None: 398d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test() 39941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum finally: 400342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters sys.stdout = save_stdout 4019a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake except test_support.ResourceDenied, msg: 4029a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake if not quiet: 4039a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake print test, "skipped --", msg 4049a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake sys.stdout.flush() 4059a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake return -2 4063af826ebca80f8a6c782fb590c77ac210ae9e22dThomas Wouters except (ImportError, test_support.TestSkipped), msg: 407f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick if not quiet: 408de4742b87f7775fc3d9fa76cd640e7cdd5ef69a2Fred Drake print test, "skipped --", msg 4093cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 41041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return -1 411fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake except KeyboardInterrupt: 412fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake raise 413152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except test_support.TestFailed, msg: 41441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "test", test, "failed --", msg 4153cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 41641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 4179e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum except: 41841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum type, value = sys.exc_info()[:2] 41927c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake print "test", test, "crashed --", str(type) + ":", value 4203cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 42141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if verbose: 42241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum traceback.print_exc(file=sys.stdout) 4233cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 42441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 425152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 4260fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if not cfp: 4270fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 4280fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum output = cfp.getvalue() 429e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if generate: 430e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if output == test + "\n": 431e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake if os.path.exists(outputfile): 432e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # Write it since it already exists (and the contents 433e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # may have changed), but let the user know it isn't 434e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake # needed: 435e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake print "output file", outputfile, \ 436e51fe8d0a3d2a3fc83fd4f02521b0808c073bf50Fred Drake "is no longer needed; consider removing it" 4370fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 4380fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum # We don't need it, so don't create it. 4390fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 4400fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp = open(outputfile, "w") 4410fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.write(output) 4420fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.close() 4430fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 4440fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if os.path.exists(outputfile): 4450fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp = open(outputfile, "r") 4460fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum expected = fp.read() 4470fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum fp.close() 4480fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 4490fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum expected = test + "\n" 4500fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if output == expected: 4510fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 4520fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "test", test, "produced unexpected output:" 4533cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 4540fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum reportdiff(expected, output) 4553cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 4560fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 0 4570fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum 4580fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossumdef reportdiff(expected, output): 4590fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum import difflib 460c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "*" * 70 461c377b16d12ba325bb108eca575447d66f19294c0Tim Peters a = expected.splitlines(1) 462c377b16d12ba325bb108eca575447d66f19294c0Tim Peters b = output.splitlines(1) 463cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum sm = difflib.SequenceMatcher(a=a, b=b) 464cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum tuples = sm.get_opcodes() 465c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 466cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum def pair(x0, x1): 467c377b16d12ba325bb108eca575447d66f19294c0Tim Peters # x0:x1 are 0-based slice indices; convert to 1-based line indices. 468cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum x0 += 1 469cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum if x0 >= x1: 470c377b16d12ba325bb108eca575447d66f19294c0Tim Peters return "line " + str(x0) 471cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum else: 472c377b16d12ba325bb108eca575447d66f19294c0Tim Peters return "lines %d-%d" % (x0, x1) 473c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 474cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for op, a0, a1, b0, b1 in tuples: 475cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum if op == 'equal': 476cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum pass 477c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 478cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'delete': 479c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "***", pair(a0, a1), "of expected output missing:" 480cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for line in a[a0:a1]: 481c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "-", line, 482c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 483cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'replace': 484c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "*** mismatch between", pair(a0, a1), "of expected", \ 485c377b16d12ba325bb108eca575447d66f19294c0Tim Peters "output and", pair(b0, b1), "of actual output:" 486c377b16d12ba325bb108eca575447d66f19294c0Tim Peters for line in difflib.ndiff(a[a0:a1], b[b0:b1]): 487c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print line, 488c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 489cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'insert': 490c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "***", pair(b0, b1), "of actual output doesn't appear", \ 491c377b16d12ba325bb108eca575447d66f19294c0Tim Peters "in expected output after line", str(a1)+":" 492cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for line in b[b0:b1]: 493c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "+", line, 494c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 495cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum else: 496cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1) 497c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 4980fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "*" * 70 499152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 500152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir(): 501152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if __name__ == '__main__': 50241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = sys.argv[0] 503152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 50441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = __file__ 505152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum testdir = os.path.dirname(file) or os.curdir 506152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return testdir 507152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 508c5000dfc4098f8547461e790a91536a923124261Tim Petersdef removepy(name): 509c5000dfc4098f8547461e790a91536a923124261Tim Peters if name.endswith(os.extsep + "py"): 510c5000dfc4098f8547461e790a91536a923124261Tim Peters name = name[:-3] 511c5000dfc4098f8547461e790a91536a923124261Tim Peters return name 512c5000dfc4098f8547461e790a91536a923124261Tim Peters 513152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word): 514152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if n == 1: 51541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %s" % (n, word) 516152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 51741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %ss" % (n, word) 518152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 519a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4): 5207c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters """Print the elements of iterable x to stdout. 521a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 522a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg width (default 70) is the maximum line length. 523a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg indent (default 4) is the number of blanks with which to 524a45da92484ceececf1cf32b4dfb16004945b001eTim Peters begin each line. 525a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """ 526a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 527ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters from textwrap import fill 528ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters blanks = ' ' * indent 529ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters print fill(' '.join(map(str, x)), width, 530ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters initial_indent=blanks, subsequent_indent=blanks) 531a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 532de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# Map sys.platform to a string containing the basenames of tests 533de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# expected to be skipped on that platform. 5342a182dbf3f2520ad753792068391775d102b13dfTim Peters# 5352a182dbf3f2520ad753792068391775d102b13dfTim Peters# Special cases: 5362a182dbf3f2520ad753792068391775d102b13dfTim Peters# test_pep277 5372a182dbf3f2520ad753792068391775d102b13dfTim Peters# The _ExpectedSkips constructor adds this to the set of expected 5382a182dbf3f2520ad753792068391775d102b13dfTim Peters# skips if not os.path.supports_unicode_filenames. 5391b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters# test_normalization 5401b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters# Whether a skip is expected here depends on whether a large test 5411b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters# input file has been downloaded. test_normalization.skip_expected 5421babdfc48afc60afe5ae708f77dad8a641bf36ecTim Peters# controls that. 543b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters# test_socket_ssl 544b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters# Controlled by test_socket_ssl.skip_expected. Requires the network 545b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters# resource, and a socket module with ssl support. 546de14a30d1d70073d36f207fe432e4adad5178399Tim Peters 547f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = { 548f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'win32': 549f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 550f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_al 55178e35f931128d017d5955841eac8c397ff32595cTim Peters test_bsddb3 552f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cd 553f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cl 554f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_commands 555f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_crypt 556d703057752d52cef6082a920879a0b62cdeffacaTim Peters test_curses 557f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dbm 558f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 559deb121aec7185f0d8034453203c6be436b2951f5Tim Peters test_email_codecs 560f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fcntl 561f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fork1 562f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gdbm 563f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gl 564f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_grp 56540e1ce4d73f8843b937465e93f639c00b0a73597Tim Peters test_iconv_codecs 566f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_imgfile 567f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 568f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_linuxaudiodev 569f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_mhlib 570de14a30d1d70073d36f207fe432e4adad5178399Tim Peters test_mpz 571f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_nis 572f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_openpty 573efc4b121694888e00072f5a079de5496afecb05aTim Peters test_ossaudiodev 574f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_poll 575003eb3088283927e3155f2e2317d3d516edd9645Tim Peters test_posix 576f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pty 577f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pwd 5781e33ffa5c719ec611e182681c4a5f2ceb62a08f5Tim Peters test_resource 579f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_signal 580a86f0c17a1385c07710d894b93a1c13159c0b57fTim Peters test_socketserver 581f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_sunaudiodev 582f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_timing 583f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 584f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'linux2': 585f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 586f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_al 587f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cd 588f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_cl 589f66dacdb017c7481c3ba4f0743d5446146de33c8Guido van Rossum test_curses 590f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 5916184c117e9af1cf6178fd34bd7c576ce36107df2Guido van Rossum test_email_codecs 592f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gl 593f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_imgfile 594f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 5954507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum test_linuxaudiodev 596f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_nis 597f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_ntpath 5984507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum test_ossaudiodev 599f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_socketserver 600f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_sunaudiodev 601f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_unicode_file 602f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 60349a806edbb298f2a5be3598bd80c21392cb6968dJack Jansen 'mac': 604aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """ 605aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_al 606679751455798fab6425fda749a19e783e58b210eJack Jansen test_atexit 607aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_bsddb 608679751455798fab6425fda749a19e783e58b210eJack Jansen test_bsddb3 609679751455798fab6425fda749a19e783e58b210eJack Jansen test_bz2 610aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_cd 611aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_cl 612aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_commands 613aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_crypt 614b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen test_curses 615aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dbm 616aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dl 617679751455798fab6425fda749a19e783e58b210eJack Jansen test_email_codecs 618aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fcntl 619aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fork1 620aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_gl 621aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_grp 62240e1ce4d73f8843b937465e93f639c00b0a73597Tim Peters test_iconv_codecs 623aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_imgfile 624aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_largefile 625aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_linuxaudiodev 626aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_locale 627aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_mmap 628679751455798fab6425fda749a19e783e58b210eJack Jansen test_mpz 629aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_nis 630aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_ntpath 631aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_openpty 632679751455798fab6425fda749a19e783e58b210eJack Jansen test_ossaudiodev 633aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_poll 634679751455798fab6425fda749a19e783e58b210eJack Jansen test_popen 635aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_popen2 636aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pty 637aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pwd 638679751455798fab6425fda749a19e783e58b210eJack Jansen test_resource 639aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_signal 640aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_socketserver 641aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_sunaudiodev 642aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_sundry 643aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_timing 644aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_unicode_file 645aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """, 64621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'unixware7': 6470ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """ 6480ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_al 6490ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_bsddb 6500ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_cd 6510ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_cl 6520ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_dl 6530ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_gl 6540ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_imgfile 6550ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_largefile 6560ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_linuxaudiodev 6570ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_minidom 6580ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_nis 6590ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_ntpath 6600ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_openpty 6610ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_pyexpat 6620ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sax 6630ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_socketserver 6640ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sunaudiodev 6650ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sundry 6660ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_unicode_file 6670ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """, 66821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'openunix8': 66921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """ 67021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_al 67121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_bsddb 67221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_cd 67321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_cl 67421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_dl 67521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_gl 67621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_imgfile 67721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_largefile 67821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_linuxaudiodev 67921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_minidom 68021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_nis 68121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_ntpath 68221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_openpty 68321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_pyexpat 68421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sax 68521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_socketserver 68621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sunaudiodev 68721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sundry 68821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_unicode_file 68921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """, 69021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'sco_sv3': 69121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """ 69221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_al 69321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_asynchat 69421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_bsddb 69521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_cd 69621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_cl 69721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_dl 69821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_fork1 69921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_gettext 70021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_gl 70121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_imgfile 70221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_largefile 70321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_linuxaudiodev 70421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_locale 70521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_minidom 70621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_nis 70721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_ntpath 70821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_openpty 70921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_pyexpat 71021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_queue 71121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sax 71221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_socketserver 71321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sunaudiodev 71421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sundry 71521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_thread 71621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threaded_import 71721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threadedtempfile 71821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threading 71921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_unicode_file 72021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """, 721e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum 'riscos': 722e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """ 723e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_al 724e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_asynchat 725e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_bsddb 726e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_cd 727e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_cl 728e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_commands 729e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_crypt 730e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dbm 731e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dl 732e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fcntl 733e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fork1 734e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_gdbm 735e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_gl 736e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_grp 737e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_imgfile 738e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_largefile 739e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_linuxaudiodev 740e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_locale 741e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_mmap 742e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_nis 743e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_ntpath 744e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_openpty 745e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_poll 746e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_popen2 747e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pty 748e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pwd 749e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_socketserver 750e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_strop 751e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_sunaudiodev 752e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_sundry 753e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_thread 754e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threaded_import 755e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threadedtempfile 756e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threading 757e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_timing 758e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_unicode_file 759e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """, 7608a97f4a380a7a356730e48406f8269c3efe5e6ebJack Jansen 'darwin': 761398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """ 762398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_al 763acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_bsddb 7649d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum test_bsddb3 765398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_cd 766398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_cl 767398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_curses 768398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_dl 7699d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum test_email_codecs 770398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_gdbm 771398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_gl 772398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_imgfile 773398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_largefile 774398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_linuxaudiodev 775acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_locale 776398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_minidom 7779d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum test_mpz 778398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_nis 779398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_ntpath 780acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_ossaudiodev 781398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_poll 782f839c27027ee0656319b7d7033d898e5b559c96bJack Jansen test_socketserver 783398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_sunaudiodev 784f839c27027ee0656319b7d7033d898e5b559c96bJack Jansen test_unicode_file 785398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """, 78611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum 'sunos5': 78711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum """ 78811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_al 78911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_bsddb 79011c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_cd 79111c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_cl 79211c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_curses 79311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_dbm 79411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_email_codecs 79511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gdbm 79611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gl 79711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gzip 79811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_imgfile 79911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_linuxaudiodev 80011c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_mpz 80111c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_openpty 80211c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_socketserver 80311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_zipfile 80411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_zlib 805ed375e18d10d37bfea1769aa1fe69795df6cbc10Jeremy Hylton """, 806b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro 'hp-ux11': 807b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """ 808b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_al 809b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_bsddb 810b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_cd 811b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_cl 812b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_curses 813b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_dl 814b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gdbm 815b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gl 816b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gzip 817b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_imgfile 818b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_largefile 819b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_linuxaudiodev 820b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_locale 821b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_minidom 822b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_nis 823b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_ntpath 824b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_openpty 825b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_pyexpat 826b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_sax 827b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_socketserver 828b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_sunaudiodev 829b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_unicode_file 830b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zipfile 831b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zlib 832b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """, 833f90ae20354ceb501f0ba0b6459df17f1a8005a47Martin v. Löwis 'atheos': 834c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters """ 835c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_al 836c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_cd 837c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_cl 838c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_curses 839c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_dl 840c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_email_codecs 841c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_gdbm 842c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_gl 843c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_imgfile 844c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_largefile 845c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_linuxaudiodev 846c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_locale 847c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mhlib 848c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mmap 849c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mpz 850c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_nis 851c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_poll 852c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_popen2 853c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_resource 854c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_socketserver 855c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_sunaudiodev 856c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_unicode_file 857c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters """, 85825115940604e6051aa2fb16be88c6b8f64577251Jason Tishler 'cygwin': 85925115940604e6051aa2fb16be88c6b8f64577251Jason Tishler """ 86025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_al 861b0f89e05ad9aaf229033bbc81be43c1f826e3930Tim Peters test_bsddb3 86225115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_cd 86325115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_cl 86425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_curses 86525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_dbm 86625115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_email_codecs 86725115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_gl 86825115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_imgfile 86925115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_largefile 87025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_linuxaudiodev 87125115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_locale 87225115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_mpz 87325115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_nis 8745c4ded2c3b59aa134b82ab17cdfe7ab633194ca6Jason Tishler test_ossaudiodev 87525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_socketserver 87625115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_sunaudiodev 87725115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_unicode_file 87825115940604e6051aa2fb16be88c6b8f64577251Jason Tishler """, 879fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre 'os2emx': 880fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre """ 881fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_al 882fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_audioop 883fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_bsddb3 884fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_cd 885fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_cl 886fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_commands 887fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_curses 888fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_dl 889fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_email_codecs 890fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_gl 89140e1ce4d73f8843b937465e93f639c00b0a73597Tim Peters test_iconv_codecs 892fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_imgfile 893fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_largefile 894fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_linuxaudiodev 895fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_mhlib 896fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_mmap 897fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_nis 898fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_openpty 899fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_ossaudiodev 900fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_pty 901fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_resource 902fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_signal 903fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_sunaudiodev 904fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_unicode_file 905fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre """, 906f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum} 907f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 908b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips: 909b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self): 9102a182dbf3f2520ad753792068391775d102b13dfTim Peters import os.path 9111b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters from test import test_normalization 912b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters from test import test_socket_ssl 9131b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 9147c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters self.valid = False 915de14a30d1d70073d36f207fe432e4adad5178399Tim Peters if sys.platform in _expectations: 916f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum s = _expectations[sys.platform] 9177c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters self.expected = Set(s.split()) 9181b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 9192a182dbf3f2520ad753792068391775d102b13dfTim Peters if not os.path.supports_unicode_filenames: 9202a182dbf3f2520ad753792068391775d102b13dfTim Peters self.expected.add('test_pep277') 9211b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 9221b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters if test_normalization.skip_expected: 9231b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters self.expected.add('test_normalization') 9241b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 925b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters if test_socket_ssl.skip_expected: 926b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters self.expected.add('test_socket_ssl') 927b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters 9286afc5e02fa775517fa0b6455906a8c203baf9cd2Jack Jansen if not sys.platform in ("mac", "darwin"): 929ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters self.expected.add("test_macostools") 930ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters self.expected.add("test_macfs") 9316afc5e02fa775517fa0b6455906a8c203baf9cd2Jack Jansen self.expected.add("test_aepack") 932ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters 933ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters if sys.platform != "win32": 934ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters self.expected.add("test_winreg") 935ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters self.expected.add("test_winsound") 936f2715e076435b74638acb81512c2ee014f75aea2Tim Peters 9377c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters self.valid = True 938b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 939b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def isvalid(self): 940b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return true iff _ExpectedSkips knows about the current platform." 941b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.valid 942b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 943b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def getexpected(self): 944b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """Return set of test names we expect to skip on current platform. 945b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 946b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.isvalid() must be true. 947b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """ 948b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 949b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters assert self.isvalid() 950b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.expected 951b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 952152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumif __name__ == '__main__': 953408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # Remove regrtest.py's own directory from the module search path. This 954408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # prevents relative imports from working, and relative imports will screw 955408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # up the testing framework. E.g. if both test.test_support and 956408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # test_support are imported, they will not contain the same globals, and 957408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # much of the testing framework relies on the globals in the 958408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # test.test_support module. 959408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0]))) 960408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw i = pathlen = len(sys.path) 961408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw while i >= 0: 962408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw i -= 1 963408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if os.path.abspath(os.path.normpath(sys.path[i])) == mydir: 964408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw del sys.path[i] 965408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if len(sys.path) == pathlen: 966408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw print 'Could not find %r in sys.path to remove it' % mydir 96708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw main() 968