regrtest.py revision 36dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8
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 1161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-v: verbose -- run tests in verbose mode with output to stdout 1204824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis-w: verbose2 -- re-run failed tests in verbose mode 1361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-q: quiet -- don't print anything except if a test fails 1461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-x: exclude -- arguments are tests to *exclude* 1561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-s: single -- run only a single test (see below) 1636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin-S: slow -- print the slowest 10 tests 1761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-r: random -- randomize test execution order 1861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-f: fromfile -- read names of tests to run from a file (see below) 1961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-l: findleaks -- if GC is available detect tests that leak memory 2061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-u: use -- specify which special resource intensive tests to run 2161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-h: help -- print this text and exit 2261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-t: threshold -- call gc.set_threshold(N) 2361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-T: coverage -- turn on code coverage using the trace module 24aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-D: coverdir -- Directory where coverage files are put 25aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-N: nocoverdir -- Put coverage files alongside modules 2661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-L: runleaks -- run the leaks(1) command just before exit 2761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-R: huntrleaks -- search for reference leaks (needs debug build, v. slow) 28abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters-M: memlimit -- run very large memory-consuming tests 29152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 30152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf non-option arguments are present, they are names for tests to run, 31152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumunless -x is given, in which case they are names for tests not to run. 32152494aea24669a3d74460fa460a4ed45696bc75Guido van RossumIf no test names are given, all tests are run. 33f58ed2596706b97c16174a839c1ed6f6b1f87fa6Guido van Rossum 34a412220bbf8ef8391eb38b35d62520cfbc2fc039Guido van Rossum-v is incompatible with -g and does not compare test output files. 35e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 363b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw-T turns on code coverage tracing with the trace module. 373b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw 38aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-D specifies the directory where coverage files are put. 39aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald 40aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald-N Put coverage files alongside modules. 41aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald 429e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-s means to run only a single test and exit. This is useful when 439e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumdoing memory analysis on the Python interpreter (which tend to consume 449e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumtoo many resources to run the full regression test non-stop). The 459e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile /tmp/pynexttest is read to find the next test to run. If this 469e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumfile is missing, the first test_*.py file in testdir or on the command 479e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumline is used. (actually tempfile.gettempdir() is used instead of 489e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum/tmp). 49e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 509e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-f reads the names of tests from the file given as f's argument, one 519e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumor more test names per line. Whitespace is ignored. Blank lines and 529e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumlines beginning with '#' are ignored. This is especially useful for 539e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumwhittling down failures involving interactions among tests. 54c5000dfc4098f8547461e790a91536a923124261Tim Peters 550179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro-L causes the leaks(1) command to be run just before exit if it exists. 560179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaroleaks(1) is available on Mac OS X and presumably on some other 570179a18034b2316a70655d0f05bfbb20a0881f17Skip MontanaroFreeBSD-derived systems. 580179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro 5961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson-R runs each test several times and examines sys.gettotalrefcount() to 6061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonsee if the test appears to be leaking references. The argument should 6161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonbe of the form stab:run:fname where 'stab' is the number of times the 6261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsontest is run to let gettotalrefcount settle down, 'run' is the number 6361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonof times further it is run and 'fname' is the name of the file the 6461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudsonreports are written to. These parameters all have defaults (5, 4 and 6561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson"reflog.txt" respectively), so the minimal invocation is '-R ::'. 6661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson 67abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters-M runs tests that require an exorbitant amount of memory. These tests 68abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstypically try to ascertain containers keep working when containing more than 6997ff04789de3e37af585648de70260a54a29bd47Armin Rigo2 billion objects, which only works on 64-bit systems. There are also some 7097ff04789de3e37af585648de70260a54a29bd47Armin Rigotests that try to exhaust the address space of the process, which only makes 7197ff04789de3e37af585648de70260a54a29bd47Armin Rigosense on 32-bit systems with at least 2Gb of memory. The passed-in memlimit, 72abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterswhich is a string in the form of '2.5Gb', determines howmuch memory the 73abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstests will limit themselves to (but they may go slightly over.) The number 74abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersshouldn't be more memory than the machine has (including swap memory). You 75abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersshould also keep in mind that swap memory is generally much, much slower 76abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersthan RAM, and setting memlimit to all available RAM or higher will heavily 77abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterstax the machine. On the other hand, it is no use running these tests with a 78abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouterslimit of less than 2.5Gb, and many require more than 20Gb. Tests that expect 79abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersto use more than memlimit memory will be skipped. The big-memory tests 80abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Woutersgenerally run very, very long. 81abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters 829e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum-u is used to specify which special resource intensive tests to run, 839e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumsuch as those requiring large file support or network connectivity. 849e9d4f8ed8d467d0558251f43c5decc754712d53Guido van RossumThe argument is a comma-separated list of words indicating the 859e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossumresources to test. Currently only the following are defined: 8608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 873a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake all - Enable all special resources. 883a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 89315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum audio - Tests that use the audio device. (There are known 90315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum cases of broken audio drivers that can crash Python or 91315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum even the Linux kernel.) 92315aa361fc60d3328aad3a5dcfd42f08213c25fbGuido van Rossum 932158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling curses - Tests that use curses and will modify the terminal's 942158df0b4d8358b5efdcac3024e8cc6d6c92d981Andrew M. Kuchling state and output modes. 951633a2e3452b40d0e9bb1f15ab16cd6b90f15a19Tim Peters 969e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum largefile - It is okay to run some test that may create huge 979e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum files. These tests can take a long time and may 989e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum consume >2GB of disk space temporarily. 9908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 1009e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum network - It is okay to run tests that use external network 1019e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum resource, e.g. testing SSL support for sockets. 1021c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis 1031c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis bsddb - It is okay to run the bsddb testsuite, which takes 1041c6b1a2b4ea38955a3f0514f4709bafd0be96c5eMartin v. Löwis a long time to complete. 1054dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake 1067c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger decimal - Test the decimal module against a large suite that 1077c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger verifies compliance with standards. 1087c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond Hettinger 1094336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton compiler - Test the compiler package by compiling all the source 1104336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton in the standard library and test suite. This takes 11168c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger a long time. Enabling this resource also allows 11268c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger test_tokenize to verify round-trip lexing on every 11368c04534182f2c09783b6506701a8bc25c98b4a9Raymond Hettinger file in the test library. 1144336eda88640695b23790e4f52de9ee92c7fee73Jeremy Hylton 115eba28bea9b8ef7df010e65c630b8c0f7009c6005Tim Peters subprocess Run all tests for the subprocess module. 116f7f1bb7ff5039626c856efafb68a4d338ab96642Peter Astrand 117aaa2f1dea706daf2a5f431d97a3e3120dba652d2Hye-Shik Chang urlfetch - It is okay to download files required on testing. 118aaa2f1dea706daf2a5f431d97a3e3120dba652d2Hye-Shik Chang 1194dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred DrakeTo enable all resources except one, use '-uall,-<resource>'. For 1204dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeexample, to run all the tests except for the bsddb tests, give the 1214dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drakeoption '-uall,-bsddb'. 122152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum""" 123152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 12436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport cStringIO 125152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumimport getopt 12636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport os 127ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaroimport random 12894a9c09e109706af64ae8796882baab2af25be2fNeal Norwitzimport re 12936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport sys 13036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport time 1313b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawimport traceback 13236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskinimport warnings 133608c1d8e87b20116011fe8fce634e980e115d514Christian Heimesfrom inspect import isabstract 134dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum 135dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# I see no other way to suppress these warnings; 136dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum# putting them in test_grammar.py has no effect: 13788b1defb6f770c4f74788e8296b88fc31c3936ceGuido van Rossumwarnings.filterwarnings("ignore", "hex/oct constants", FutureWarning, 138dc15c27f505930a69c73f8c2baf1f9caff9252efGuido van Rossum ".*test.test_grammar$") 139c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossumif sys.maxint > 0x7fffffff: 140c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum # Also suppress them in <string>, because for 64-bit platforms, 141c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum # that's where test_grammar.py hides them. 142c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning, 143c34c4fc3ab497ec1dd4f8c921798927d1b6d13e2Guido van Rossum "<string>") 144152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 1459df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters# Ignore ImportWarnings that only occur in the source tree, 1469df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters# (because of modules with the same name as source-directories in Modules/) 147076ba2129bb08f56c3af9397748ae1df41daba06Thomas Woutersfor mod in ("ctypes", "gzip", "zipfile", "tarfile", "encodings.zlib_codec", 148076ba2129bb08f56c3af9397748ae1df41daba06Thomas Wouters "test.test_zipimport", "test.test_zlib", "test.test_zipfile", 149076ba2129bb08f56c3af9397748ae1df41daba06Thomas Wouters "test.test_codecs", "test.string_tests"): 1509df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters warnings.filterwarnings(module=".*%s$" % (mod,), 1519df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters action="ignore", category=ImportWarning) 1529df4e6f6735af274813cf1b611ee1a342955ad63Thomas Wouters 153bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# MacOSX (a.k.a. Darwin) has a default stack size that is too small 154bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# for deeply recursive regular expressions. We see this as crashes in 155bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# the Python test suite when running test_re.py and test_sre.py. The 156bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# fix is to set the stack limit to 2048. 157bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# This approach may also be useful for other Unixy platforms that 158bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum# suffer from small default stack limits. 159bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossumif sys.platform == 'darwin': 160bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum try: 161bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum import resource 162bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum except ImportError: 163bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum pass 164bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum else: 165bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum soft, hard = resource.getrlimit(resource.RLIMIT_STACK) 166bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum newsoft = min(hard, max(soft, 1024*2048)) 167bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard)) 168bb48465273d2aa98fc7669e99b0d5fb1c57962deGuido van Rossum 16904f357cffef6d764f2f0ff2671dabde75ec250d1Barry Warsawfrom test import test_support 1703a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 1717c85fa4a5203912aca564ce719a0fdd0fd5411e5Raymond HettingerRESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb', 172aaa2f1dea706daf2a5f431d97a3e3120dba652d2Hye-Shik Chang 'decimal', 'compiler', 'subprocess', 'urlfetch') 1733a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 1743a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake 17508fca5212528e073600c27c70a34eeef445f393bBarry Warsawdef usage(code, msg=''): 17608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw print __doc__ 17708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if msg: print msg 17808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw sys.exit(code) 17908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 18008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 1813b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsawdef main(tests=None, testdir=None, verbose=0, quiet=False, generate=False, 1823b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw exclude=False, single=False, randomize=False, fromfile=None, 183aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald findleaks=False, use_resources=None, trace=False, coverdir='coverage', 18436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin runleaks=False, huntrleaks=False, verbose2=False, print_slow=False): 1856fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Execute a test suite. 1866fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1877e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters This also parses command-line options and modifies its behavior 188004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake accordingly. 1896fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1906fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum tests -- a list of strings containing test names (optional) 1916fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- the directory in which to look for tests (optional) 1926fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1936fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum Users other than the Python test suite will certainly want to 1946fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum specify testdir; if it's omitted, the directory containing the 195004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake Python test suite is searched for. 1966fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum 1976fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum If the tests argument is omitted, the tests listed on the 1986fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum command-line will be used. If that's empty, too, then all *.py 1996fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum files beginning with test_ will be used. 200ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro 20136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin The other default arguments (verbose, quiet, generate, exclude, 20236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin single, randomize, findleaks, use_resources, trace, coverdir, and 20336dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin print_slow) allow programmers calling main() directly to set the 20436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin values that would normally be set by flags on the command line. 2056fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 206004d5e6880940ddbb38460986ac62ee0f1bae97dFred Drake 2078dee809410e2d433bb0be5d8a1699736b90db0b5Tim Peters test_support.record_original_stdout(sys.stdout) 208152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 20936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsSrf:lu:t:TD:NLR:wM:', 210a5573b31532f59a63d9ff24e415592f60f974da4Brett Cannon ['help', 'verbose', 'quiet', 'exclude', 21136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin 'single', 'slow', 'random', 'fromfile', 2123b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw 'findleaks', 'use=', 'threshold=', 'trace', 213aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald 'coverdir=', 'nocoverdir', 'runleaks', 214abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters 'huntrleaks=', 'verbose2', 'memlimit=', 2153b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw ]) 216152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except getopt.error, msg: 21708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(2, msg) 21808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 21908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw # Defaults 22008fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if use_resources is None: 22108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw use_resources = [] 222152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for o, a in opts: 22308fca5212528e073600c27c70a34eeef445f393bBarry Warsaw if o in ('-h', '--help'): 22408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw usage(0) 22508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-v', '--verbose'): 22608fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose += 1 22704824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis elif o in ('-w', '--verbose2'): 22804824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis verbose2 = True 22908fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-q', '--quiet'): 2303b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw quiet = True; 23108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw verbose = 0 23208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-x', '--exclude'): 2333b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw exclude = True 23408fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-s', '--single'): 2353b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw single = True 23636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin elif o in ('-S', '--slow'): 23736dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin print_slow = True 23808fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-r', '--randomize'): 2393b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw randomize = True 240c5000dfc4098f8547461e790a91536a923124261Tim Peters elif o in ('-f', '--fromfile'): 241c5000dfc4098f8547461e790a91536a923124261Tim Peters fromfile = a 24208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-l', '--findleaks'): 2433b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw findleaks = True 2440179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro elif o in ('-L', '--runleaks'): 2450179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro runleaks = True 2469e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum elif o in ('-t', '--threshold'): 2479e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum import gc 2489e9d4f8ed8d467d0558251f43c5decc754712d53Guido van Rossum gc.set_threshold(int(a)) 2493b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw elif o in ('-T', '--coverage'): 2503b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw trace = True 251aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald elif o in ('-D', '--coverdir'): 252aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald coverdir = os.path.join(os.getcwd(), a) 253aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald elif o in ('-N', '--nocoverdir'): 254aee4da6b83e49de68fed0c6b999aa109eab98f0dWalter Dörwald coverdir = None 25561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson elif o in ('-R', '--huntrleaks'): 25661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks = a.split(':') 25761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks) != 3: 25861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson print a, huntrleaks 25961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson usage(2, '-R takes three colon-separated arguments') 26061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks[0]) == 0: 26161147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[0] = 5 26261147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson else: 26361147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[0] = int(huntrleaks[0]) 26461147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks[1]) == 0: 26561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[1] = 4 26661147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson else: 26761147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[1] = int(huntrleaks[1]) 26861147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if len(huntrleaks[2]) == 0: 26961147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson huntrleaks[2] = "reflog.txt" 270abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters elif o in ('-M', '--memlimit'): 271abd08884a685d3724798664f7c2f0aab7a6640c8Thomas Wouters test_support.set_memlimit(a) 27208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw elif o in ('-u', '--use'): 273fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum u = [x.lower() for x in a.split(',')] 274fe3f6969f54cfd3df24f54572a809e0deb47064fGuido van Rossum for r in u: 2753a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r == 'all': 2764dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake use_resources[:] = RESOURCE_NAMES 2774dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake continue 2784dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake remove = False 2794dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if r[0] == '-': 2804dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake remove = True 2814dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake r = r[1:] 2823a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake if r not in RESOURCE_NAMES: 2833a15dace3606d6ea9d59486c5d080a1cb4192ff4Fred Drake usage(1, 'Invalid -u/--use option: ' + a) 2844dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if remove: 2854dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake if r in use_resources: 2864dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake use_resources.remove(r) 2874dd0f7ef7a0a7e7abe2043bbf8804fde962a8de3Fred Drake elif r not in use_resources: 288e41abab33b0b467acd6bdc7d73ce4b5cef4fd5bfAndrew MacIntyre use_resources.append(r) 289c5000dfc4098f8547461e790a91536a923124261Tim Peters if single and fromfile: 290c5000dfc4098f8547461e790a91536a923124261Tim Peters usage(2, "-s and -f don't go together!") 29108fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 292152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum good = [] 293152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum bad = [] 294152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum skipped = [] 2959a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake resource_denieds = [] 296e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 297d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 298a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw try: 299a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw import gc 300a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw except ImportError: 3018a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print 'No GC available, disabling findleaks.' 3023b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw findleaks = False 303a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw else: 3048a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # Uncomment the line below to report garbage that is not 3058a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # freeable by reference counting alone. By default only 3068a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # garbage that is not collectable by the GC is reported. 3078a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer #gc.set_debug(gc.DEBUG_SAVEALL) 308d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage = [] 309a873b03ebb24076b3664ba694eeed4ab07d176d9Barry Warsaw 310e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 311e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw from tempfile import gettempdir 312e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw filename = os.path.join(gettempdir(), 'pynexttest') 313e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw try: 314e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'r') 315fc170b1fd5db978f4e8d4c23c138a7b59df681ecEric S. Raymond next = fp.read().strip() 316e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = [next] 317e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 318e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw except IOError: 319e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw pass 320c5000dfc4098f8547461e790a91536a923124261Tim Peters 321c5000dfc4098f8547461e790a91536a923124261Tim Peters if fromfile: 322c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = [] 323c5000dfc4098f8547461e790a91536a923124261Tim Peters fp = open(fromfile) 324c5000dfc4098f8547461e790a91536a923124261Tim Peters for line in fp: 325c5000dfc4098f8547461e790a91536a923124261Tim Peters guts = line.split() # assuming no test has whitespace in its name 326c5000dfc4098f8547461e790a91536a923124261Tim Peters if guts and not guts[0].startswith('#'): 327c5000dfc4098f8547461e790a91536a923124261Tim Peters tests.extend(guts) 328c5000dfc4098f8547461e790a91536a923124261Tim Peters fp.close() 329c5000dfc4098f8547461e790a91536a923124261Tim Peters 330c5000dfc4098f8547461e790a91536a923124261Tim Peters # Strip .py extensions. 331c5000dfc4098f8547461e790a91536a923124261Tim Peters if args: 332c5000dfc4098f8547461e790a91536a923124261Tim Peters args = map(removepy, args) 333c5000dfc4098f8547461e790a91536a923124261Tim Peters if tests: 334c5000dfc4098f8547461e790a91536a923124261Tim Peters tests = map(removepy, tests) 335c5000dfc4098f8547461e790a91536a923124261Tim Peters 3366c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests = STDTESTS[:] 3376c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests = NOTTESTS[:] 338152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if exclude: 3396c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum for arg in args: 3406c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum if arg in stdtests: 3416c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum stdtests.remove(arg) 3426c74fea07d42ac6bc3bc078fb13f903f6cdbbcb9Guido van Rossum nottests[:0] = args 34341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum args = [] 344747e1cade657e1e15c0f51d898de901da723e6a2Guido van Rossum tests = tests or args or findtests(testdir, stdtests, nottests) 345e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 346e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw tests = tests[:1] 347ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro if randomize: 348ab1c7918f683e540ae5651c1b585ecda16ae352dSkip Montanaro random.shuffle(tests) 3493b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if trace: 3503b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw import trace 3513b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix], 3523b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw trace=False, count=True) 35336dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_times = [] 35441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum test_support.verbose = verbose # Tell tests to be moderately quiet 35508fca5212528e073600c27c70a34eeef445f393bBarry Warsaw test_support.use_resources = use_resources 3565796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum save_modules = sys.modules.keys() 357152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for test in tests: 35841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not quiet: 35941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test 3603cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 3613b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if trace: 3623b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw # If we're tracing code coverage, then we don't exit with status 3633b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw # if on a false return value from main. 36436dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin tracer.runctx('runtest(test, generate, verbose, quiet,' 36536dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin ' test_times, testdir)', 3663b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw globals=globals(), locals=vars()) 36741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum else: 36814ca327f998511da5e89f819204c54fa582dd696Neal Norwitz try: 36936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin ok = runtest(test, generate, verbose, quiet, test_times, 37036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin testdir, huntrleaks) 37114ca327f998511da5e89f819204c54fa582dd696Neal Norwitz except KeyboardInterrupt: 37214ca327f998511da5e89f819204c54fa582dd696Neal Norwitz # print a newline separate from the ^C 37314ca327f998511da5e89f819204c54fa582dd696Neal Norwitz print 37414ca327f998511da5e89f819204c54fa582dd696Neal Norwitz break 37514ca327f998511da5e89f819204c54fa582dd696Neal Norwitz except: 37614ca327f998511da5e89f819204c54fa582dd696Neal Norwitz raise 3773b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if ok > 0: 3783b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw good.append(test) 3793b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw elif ok == 0: 3803b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw bad.append(test) 3813b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw else: 3823b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw skipped.append(test) 3833b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if ok == -2: 3843b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw resource_denieds.append(test) 385d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if findleaks: 386d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer gc.collect() 387d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer if gc.garbage: 3888a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "Warning: test created", len(gc.garbage), 3898a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer print "uncollectable object(s)." 3908a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # move the uncollectable objects somewhere so we don't see 3918a00abc0ff6544a7004a86b4c96e23ca23ac66dcNeil Schemenauer # them again 392d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer found_garbage.extend(gc.garbage) 393d569f23da94babd616751cd46eea38963e4edfa1Neil Schemenauer del gc.garbage[:] 3945796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum # Unload the newly imported modules (best effort finalization) 3955796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum for module in sys.modules.keys(): 39651931144427faa001a6db3cfc37380526be256b6Guido van Rossum if module not in save_modules and module.startswith("test."): 3975796d26794eee634a4a06637d99d8d5c58da2bdbGuido van Rossum test_support.unload(module) 3987a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton 3997a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton # The lists won't be sorted if running with -r 4007a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton good.sort() 4017a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton bad.sort() 4027a1ea0e88034cdc03d546f0947fc8ecb30f4435fJeremy Hylton skipped.sort() 403e0c446bb4ad67294f42d4cb53b4ff28413bd8ddeTim Peters 404152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if good and not quiet: 40541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if not bad and not skipped and len(good) > 1: 40641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "All", 40741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print count(len(good), "test"), "OK." 40836dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin if print_slow: 40936dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_times.sort(reverse=True) 41036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin print "10 slowest tests:" 41136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin for time, test in test_times[:10]: 41236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin print "%s: %.1fs" % (test, time) 413152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if bad: 414a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(bad), "test"), "failed:" 415a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(bad) 416152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if skipped and not quiet: 417a45da92484ceececf1cf32b4dfb16004945b001eTim Peters print count(len(skipped), "test"), "skipped:" 418a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(skipped) 419e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 420b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters e = _ExpectedSkips() 421a2be2d624a47e420266606f0cb2a2e030797f650Tim Peters plat = sys.platform 422b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if e.isvalid(): 423a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger surprise = set(skipped) - e.getexpected() - set(resource_denieds) 424b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters if surprise: 425b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print count(len(surprise), "skip"), \ 426a45da92484ceececf1cf32b4dfb16004945b001eTim Peters "unexpected on", plat + ":" 427a45da92484ceececf1cf32b4dfb16004945b001eTim Peters printlist(surprise) 428b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 429b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Those skips are all expected on", plat + "." 430b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters else: 431b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "Ask someone to teach regrtest.py about which tests are" 432b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters print "expected to get skipped on", plat + "." 433b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 43404824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis if verbose2 and bad: 43504824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis print "Re-running failed tests in verbose mode" 43604824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis for test in bad: 437922dd7d49da75b07e27f917db0166f67bdbef3d3Tim Peters print "Re-running test %r in verbose mode" % test 438922dd7d49da75b07e27f917db0166f67bdbef3d3Tim Peters sys.stdout.flush() 43904824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis try: 44004824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis test_support.verbose = 1 44104824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis ok = runtest(test, generate, 1, quiet, testdir, 44204824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis huntrleaks) 44304824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis except KeyboardInterrupt: 44404824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis # print a newline separate from the ^C 44504824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis print 44604824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis break 44704824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis except: 44804824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis raise 44904824ce8ed3e4e936487758ca6672b6dec75a8a7Martin v. Löwis 450e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if single: 451e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw alltests = findtests(testdir, stdtests, nottests) 452e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw for i in range(len(alltests)): 453e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if tests[0] == alltests[i]: 454e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw if i == len(alltests) - 1: 455e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 456e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 457e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp = open(filename, 'w') 458e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.write(alltests[i+1] + '\n') 459e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw fp.close() 460e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw break 461e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw else: 462e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw os.unlink(filename) 463e11e3dee3e4f467d51c9d36e24b0b09e64eab295Barry Warsaw 4643b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if trace: 4653b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw r = tracer.results() 4663b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw r.write_results(show_missing=True, summary=True, coverdir=coverdir) 4673b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw 4680179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro if runleaks: 4690179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro os.system("leaks %d" % os.getpid()) 4700179a18034b2316a70655d0f05bfbb20a0881f17Skip Montanaro 4715943b4ac1067e5011b66697396d5df93b5ef9af0Tim Peters sys.exit(len(bad) > 0) 47208fca5212528e073600c27c70a34eeef445f393bBarry Warsaw 473152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 4746fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumSTDTESTS = [ 475152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_grammar', 476152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_opcodes', 477f567ca3e1ae851ea6e7418da3df47e034841a08dCollin Winter 'test_dict', 478152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_builtin', 479152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_exceptions', 480152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_types', 4815545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter 'test_unittest', 4825545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter 'test_doctest', 4835545314ba7d14abda0a5f6bc50cbef122167f205Collin Winter 'test_doctest2', 484152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 485152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 4866fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van RossumNOTTESTS = [ 487152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 'test_support', 48862e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future1', 48962e2c7e3dfffd8465a54b99fc6d3c2a60acab350Jeremy Hylton 'test_future2', 4908471a35febdbfbfab51b9d4b5fe51694fe6ca536Jeremy Hylton 'test_future3', 491152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum ] 492152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 4936fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossumdef findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): 494152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum """Return a list of all applicable test modules.""" 4956fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum if not testdir: testdir = findtestdir() 496152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum names = os.listdir(testdir) 497152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests = [] 498152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum for name in names: 499e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum if name[:5] == "test_" and name[-3:] == os.extsep+"py": 50041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum modname = name[:-3] 50141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if modname not in stdtests and modname not in nottests: 50241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum tests.append(modname) 503152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum tests.sort() 504152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return stdtests + tests 505152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 50636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskindef runtest(test, generate, verbose, quiet, test_times, 50736dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin testdir=None, huntrleaks=False): 5086fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """Run a single test. 509e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 5106fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum test -- the name of the test 5116fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum verbose -- if true, print more messages 512f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick quiet -- if true, don't print 'skipped' messages (probably redundant) 51336dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_times -- a list of (time, test_name) pairs 5146fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum testdir -- test directory 515e55848695347c67effeb08aedcf2ce3d256524cdTim Peters huntrleaks -- run multiple times to test for leaks; requires a debug 516e55848695347c67effeb08aedcf2ce3d256524cdTim Peters build; a triple corresponding to -R's three arguments 517e55848695347c67effeb08aedcf2ce3d256524cdTim Peters Return: 518e55848695347c67effeb08aedcf2ce3d256524cdTim Peters -2 test skipped because resource denied 519e55848695347c67effeb08aedcf2ce3d256524cdTim Peters -1 test skipped for some other reason 520e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 0 test failed 521e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 1 test passed 5226fd83b7b38d0b2a8c9ff5e5b553a1ea6f7306ef4Guido van Rossum """ 52306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 524e55848695347c67effeb08aedcf2ce3d256524cdTim Peters try: 52536dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin return runtest_inner(test, generate, verbose, quiet, test_times, 52636dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin testdir, huntrleaks) 527e55848695347c67effeb08aedcf2ce3d256524cdTim Peters finally: 528e55848695347c67effeb08aedcf2ce3d256524cdTim Peters cleanup_test_droppings(test, verbose) 529e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 53036dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskindef runtest_inner(test, generate, verbose, quiet, test_times, 53136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin testdir=None, huntrleaks=False): 532152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum test_support.unload(test) 5333b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw if not testdir: 5343b6d025d9bc6a0109e9a2ebd28a4864e8007193aBarry Warsaw testdir = findtestdir() 5359390cc15da5cd6920bd41bb4cd146d5d0601345fTim Peters if verbose: 53641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum cfp = None 5370fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum else: 53874e67661a69ddb43a21a486c66965a052540cdd0Raymond Hettinger cfp = cStringIO.StringIO() 53906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 540152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum try: 541342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters save_stdout = sys.stdout 54241360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum try: 54341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if cfp: 54441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum sys.stdout = cfp 54541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print test # Output file starts with test name 546408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if test.startswith('test.'): 547408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw abstest = test 548408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw else: 549408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # Always import it from the test package 550408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw abstest = 'test.' + test 55136dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin start_time = time.time() 552408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw the_package = __import__(abstest, globals(), locals(), []) 553408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw the_module = getattr(the_package, test) 554980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl # Old tests run to completion simply as a side-effect of 555980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl # being imported. For tests based on unittest or doctest, 556980c4fc04d82e650810a3111eea5c5b32f5883a6Georg Brandl # explicitly invoke their test_main() function (if it exists). 557d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test = getattr(the_module, "test_main", None) 558d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters if indirect_test is not None: 559d97422115e9ed6498bc7a6f792a0bf8f278f9097Tim Peters indirect_test() 56061147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if huntrleaks: 56106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters dash_R(the_module, test, indirect_test, huntrleaks) 56236dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_time = time.time() - start_time 56336dbcb9e98ef9f3fdc731f42670b7dfd1154c6d8Jeffrey Yasskin test_times.append((test_time, test)) 56441360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum finally: 565342ca75d9552ff5c606c465d1392a32e44257fe5Tim Peters sys.stdout = save_stdout 5669a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake except test_support.ResourceDenied, msg: 5679a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake if not quiet: 5689a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake print test, "skipped --", msg 5699a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake sys.stdout.flush() 5709a0db07c2ffd4e4b3ae75d5820dc6b4152b3582bFred Drake return -2 5713af826ebca80f8a6c782fb590c77ac210ae9e22dThomas Wouters except (ImportError, test_support.TestSkipped), msg: 572f29f47b38beae54db959d0dd2f0800d5dd3fc174Trent Mick if not quiet: 573de4742b87f7775fc3d9fa76cd640e7cdd5ef69a2Fred Drake print test, "skipped --", msg 5743cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 57541360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return -1 576fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake except KeyboardInterrupt: 577fe5c22a85e6740012143cdbdc384bd2ebc788c27Fred Drake raise 578152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum except test_support.TestFailed, msg: 57941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum print "test", test, "failed --", msg 5803cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 58141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 5829e48b272b96aabf597b7aedd358ab890ddbf4c98Guido van Rossum except: 58341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum type, value = sys.exc_info()[:2] 58427c4b39025eb9e20f9d7a36b6aa0bb9c97f9bba5Fred Drake print "test", test, "crashed --", str(type) + ":", value 5853cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 58641360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum if verbose: 58741360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum traceback.print_exc(file=sys.stdout) 5883cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 58941360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return 0 590152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 5910fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum if not cfp: 5920fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 5930fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum output = cfp.getvalue() 594a5573b31532f59a63d9ff24e415592f60f974da4Brett Cannon expected = test + "\n" 59561147f63d9eb20bdd34d5f7549f8379155aefd60Michael W. Hudson if output == expected or huntrleaks: 5960fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 1 5970fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "test", test, "produced unexpected output:" 5983cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 5990fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum reportdiff(expected, output) 6003cda93ebf60e501350f42fdab72c18eab54718fcGuido van Rossum sys.stdout.flush() 6010fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum return 0 6020fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum 603e55848695347c67effeb08aedcf2ce3d256524cdTim Petersdef cleanup_test_droppings(testname, verbose): 604e55848695347c67effeb08aedcf2ce3d256524cdTim Peters import shutil 605e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 606e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # Try to clean up junk commonly left behind. While tests shouldn't leave 607e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # any files or directories behind, when a test fails that can be tedious 608e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # for it to arrange. The consequences can be especially nasty on Windows, 609e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # since if a test leaves a file open, it cannot be deleted by name (while 610e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # there's nothing we can do about that here either, we can display the 611e55848695347c67effeb08aedcf2ce3d256524cdTim Peters # name of the offending test, which is a real help). 612e55848695347c67effeb08aedcf2ce3d256524cdTim Peters for name in (test_support.TESTFN, 613e55848695347c67effeb08aedcf2ce3d256524cdTim Peters "db_home", 614e55848695347c67effeb08aedcf2ce3d256524cdTim Peters ): 615e55848695347c67effeb08aedcf2ce3d256524cdTim Peters if not os.path.exists(name): 616e55848695347c67effeb08aedcf2ce3d256524cdTim Peters continue 617e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 618e55848695347c67effeb08aedcf2ce3d256524cdTim Peters if os.path.isdir(name): 619e55848695347c67effeb08aedcf2ce3d256524cdTim Peters kind, nuker = "directory", shutil.rmtree 620e55848695347c67effeb08aedcf2ce3d256524cdTim Peters elif os.path.isfile(name): 621e55848695347c67effeb08aedcf2ce3d256524cdTim Peters kind, nuker = "file", os.unlink 622e55848695347c67effeb08aedcf2ce3d256524cdTim Peters else: 623e55848695347c67effeb08aedcf2ce3d256524cdTim Peters raise SystemError("os.path says %r exists but is neither " 624e55848695347c67effeb08aedcf2ce3d256524cdTim Peters "directory nor file" % name) 625e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 626e55848695347c67effeb08aedcf2ce3d256524cdTim Peters if verbose: 627e55848695347c67effeb08aedcf2ce3d256524cdTim Peters print "%r left behind %s %r" % (testname, kind, name) 628e55848695347c67effeb08aedcf2ce3d256524cdTim Peters try: 629e55848695347c67effeb08aedcf2ce3d256524cdTim Peters nuker(name) 630e55848695347c67effeb08aedcf2ce3d256524cdTim Peters except Exception, msg: 631e55848695347c67effeb08aedcf2ce3d256524cdTim Peters print >> sys.stderr, ("%r left behind %s %r and it couldn't be " 632e55848695347c67effeb08aedcf2ce3d256524cdTim Peters "removed: %s" % (testname, kind, name, msg)) 633e55848695347c67effeb08aedcf2ce3d256524cdTim Peters 63406c5c008193164f04ebcc14ca5176080cf303c54Tim Petersdef dash_R(the_module, test, indirect_test, huntrleaks): 63506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # This code is hackish and inelegant, but it seems to do the job. 63664c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum import copy_reg, _abcoll 63706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 63806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if not hasattr(sys, 'gettotalrefcount'): 63906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters raise Exception("Tracking reference leaks requires a debug build " 64006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters "of Python") 64106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 64206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Save current values for dash_R_cleanup() to restore. 64306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters fs = warnings.filters[:] 64406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters ps = copy_reg.dispatch_table.copy() 64506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters pic = sys.path_importer_cache.copy() 64664c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum abcs = {} 64764c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum for abc in [getattr(_abcoll, a) for a in _abcoll.__all__]: 648608c1d8e87b20116011fe8fce634e980e115d514Christian Heimes if not isabstract(abc): 6496b29dd05c8fff4fc69ab4d68baef86fb7e91548cChristian Heimes continue 65064c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum for obj in abc.__subclasses__() + [abc]: 65164c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum abcs[obj] = obj._abc_registry.copy() 65264c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum 65306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if indirect_test: 65406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters def run_the_test(): 65506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters indirect_test() 65606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters else: 65706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters def run_the_test(): 65806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters reload(the_module) 65906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 66006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters deltas = [] 66106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters nwarmup, ntracked, fname = huntrleaks 66206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters repcount = nwarmup + ntracked 66306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters print >> sys.stderr, "beginning", repcount, "repetitions" 66406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters print >> sys.stderr, ("1234567890"*(repcount//10 + 1))[:repcount] 66564c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum dash_R_cleanup(fs, ps, pic, abcs) 66606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters for i in range(repcount): 66706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters rc = sys.gettotalrefcount() 66806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters run_the_test() 66906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters sys.stderr.write('.') 67064c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum dash_R_cleanup(fs, ps, pic, abcs) 67106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if i >= nwarmup: 67206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters deltas.append(sys.gettotalrefcount() - rc - 2) 67306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters print >> sys.stderr 67406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters if any(deltas): 675d9841039dbd0e37746d46f6e46ce1d82b85a21b3Neal Norwitz msg = '%s leaked %s references, sum=%s' % (test, deltas, sum(deltas)) 676d9841039dbd0e37746d46f6e46ce1d82b85a21b3Neal Norwitz print >> sys.stderr, msg 67706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters refrep = open(fname, "a") 678d9841039dbd0e37746d46f6e46ce1d82b85a21b3Neal Norwitz print >> refrep, msg 67906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters refrep.close() 68006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 68164c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossumdef dash_R_cleanup(fs, ps, pic, abcs): 68206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters import gc, copy_reg 683d3c52de557546cf2381e27b7fc9b86676fec9a9dNeal Norwitz import _strptime, linecache, dircache 68406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters import urlparse, urllib, urllib2, mimetypes, doctest 68564c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum import struct, filecmp, _abcoll 68606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters from distutils.dir_util import _path_created 68706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 68806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Restore some original values. 68906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters warnings.filters[:] = fs 69006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters copy_reg.dispatch_table.clear() 69106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters copy_reg.dispatch_table.update(ps) 69206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters sys.path_importer_cache.clear() 69306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters sys.path_importer_cache.update(pic) 69406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 695908caac52e8e62baa1ee54e4e650e1cd3ac37907Christian Heimes # clear type cache 696422051a3675271e179995ad4a0f056ff94395d55Christian Heimes sys._clear_type_cache() 697908caac52e8e62baa1ee54e4e650e1cd3ac37907Christian Heimes 69864c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum # Clear ABC registries, restoring previously saved ABC registries. 69964c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum for abc in [getattr(_abcoll, a) for a in _abcoll.__all__]: 700608c1d8e87b20116011fe8fce634e980e115d514Christian Heimes if not isabstract(abc): 7016b29dd05c8fff4fc69ab4d68baef86fb7e91548cChristian Heimes continue 70264c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum for obj in abc.__subclasses__() + [abc]: 70364c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum obj._abc_registry = abcs.get(obj, {}).copy() 70464c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum obj._abc_cache.clear() 70564c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum obj._abc_negative_cache.clear() 70664c06e327d48150fc548cf18a4a7ae0b890e69faGuido van Rossum 70706c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Clear assorted module caches. 70806c5c008193164f04ebcc14ca5176080cf303c54Tim Peters _path_created.clear() 70906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters re.purge() 71006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters _strptime._regex_cache.clear() 71106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters urlparse.clear_cache() 71206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters urllib.urlcleanup() 71306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters urllib2.install_opener(None) 71406c5c008193164f04ebcc14ca5176080cf303c54Tim Peters dircache.reset() 71506c5c008193164f04ebcc14ca5176080cf303c54Tim Peters linecache.clearcache() 71606c5c008193164f04ebcc14ca5176080cf303c54Tim Peters mimetypes._default_mime_types() 717c27d655c00ec08f44abea646ae06456cbcca84b6Tim Peters filecmp._cache.clear() 71876d19f68e4c824bbcba890d924f20a6133ee0326Christian Heimes struct._clearcache() 71906c5c008193164f04ebcc14ca5176080cf303c54Tim Peters doctest.master = None 72006c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 72106c5c008193164f04ebcc14ca5176080cf303c54Tim Peters # Collect cyclic trash. 72206c5c008193164f04ebcc14ca5176080cf303c54Tim Peters gc.collect() 72306c5c008193164f04ebcc14ca5176080cf303c54Tim Peters 7240fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossumdef reportdiff(expected, output): 7250fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum import difflib 726c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "*" * 70 727c377b16d12ba325bb108eca575447d66f19294c0Tim Peters a = expected.splitlines(1) 728c377b16d12ba325bb108eca575447d66f19294c0Tim Peters b = output.splitlines(1) 729cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum sm = difflib.SequenceMatcher(a=a, b=b) 730cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum tuples = sm.get_opcodes() 731c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 732cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum def pair(x0, x1): 733c377b16d12ba325bb108eca575447d66f19294c0Tim Peters # x0:x1 are 0-based slice indices; convert to 1-based line indices. 734cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum x0 += 1 735cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum if x0 >= x1: 736c377b16d12ba325bb108eca575447d66f19294c0Tim Peters return "line " + str(x0) 737cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum else: 738c377b16d12ba325bb108eca575447d66f19294c0Tim Peters return "lines %d-%d" % (x0, x1) 739c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 740cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for op, a0, a1, b0, b1 in tuples: 741cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum if op == 'equal': 742cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum pass 743c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 744cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'delete': 745c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "***", pair(a0, a1), "of expected output missing:" 746cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for line in a[a0:a1]: 747c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "-", line, 748c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 749cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'replace': 750c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "*** mismatch between", pair(a0, a1), "of expected", \ 751c377b16d12ba325bb108eca575447d66f19294c0Tim Peters "output and", pair(b0, b1), "of actual output:" 752c377b16d12ba325bb108eca575447d66f19294c0Tim Peters for line in difflib.ndiff(a[a0:a1], b[b0:b1]): 753c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print line, 754c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 755cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum elif op == 'insert': 756c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "***", pair(b0, b1), "of actual output doesn't appear", \ 757c377b16d12ba325bb108eca575447d66f19294c0Tim Peters "in expected output after line", str(a1)+":" 758cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum for line in b[b0:b1]: 759c377b16d12ba325bb108eca575447d66f19294c0Tim Peters print "+", line, 760c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 761cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum else: 762cf691935bb1a59bd7ff680b26b0b0040b7e25449Guido van Rossum print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1) 763c377b16d12ba325bb108eca575447d66f19294c0Tim Peters 7640fcca4e815e3dbb28c73108376079a94ad6ee8deGuido van Rossum print "*" * 70 765152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 766152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef findtestdir(): 767152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if __name__ == '__main__': 76841360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = sys.argv[0] 769152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 77041360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum file = __file__ 771152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum testdir = os.path.dirname(file) or os.curdir 772152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum return testdir 773152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 774c5000dfc4098f8547461e790a91536a923124261Tim Petersdef removepy(name): 775c5000dfc4098f8547461e790a91536a923124261Tim Peters if name.endswith(os.extsep + "py"): 776c5000dfc4098f8547461e790a91536a923124261Tim Peters name = name[:-3] 777c5000dfc4098f8547461e790a91536a923124261Tim Peters return name 778c5000dfc4098f8547461e790a91536a923124261Tim Peters 779152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumdef count(n, word): 780152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum if n == 1: 78141360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %s" % (n, word) 782152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum else: 78341360a4696f488e49e5409b3b1baf1fff6ae0044Guido van Rossum return "%d %ss" % (n, word) 784152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossum 785a45da92484ceececf1cf32b4dfb16004945b001eTim Petersdef printlist(x, width=70, indent=4): 7867c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters """Print the elements of iterable x to stdout. 787a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 788a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg width (default 70) is the maximum line length. 789a45da92484ceececf1cf32b4dfb16004945b001eTim Peters Optional arg indent (default 4) is the number of blanks with which to 790a45da92484ceececf1cf32b4dfb16004945b001eTim Peters begin each line. 791a45da92484ceececf1cf32b4dfb16004945b001eTim Peters """ 792a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 793ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters from textwrap import fill 794ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters blanks = ' ' * indent 795ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters print fill(' '.join(map(str, x)), width, 796ba78bc4a3216b51398bab59157572a51c38b9ef4Tim Peters initial_indent=blanks, subsequent_indent=blanks) 797a45da92484ceececf1cf32b4dfb16004945b001eTim Peters 798de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# Map sys.platform to a string containing the basenames of tests 799de14a30d1d70073d36f207fe432e4adad5178399Tim Peters# expected to be skipped on that platform. 8002a182dbf3f2520ad753792068391775d102b13dfTim Peters# 8012a182dbf3f2520ad753792068391775d102b13dfTim Peters# Special cases: 8022a182dbf3f2520ad753792068391775d102b13dfTim Peters# test_pep277 8032a182dbf3f2520ad753792068391775d102b13dfTim Peters# The _ExpectedSkips constructor adds this to the set of expected 8042a182dbf3f2520ad753792068391775d102b13dfTim Peters# skips if not os.path.supports_unicode_filenames. 805b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters# test_socket_ssl 806b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters# Controlled by test_socket_ssl.skip_expected. Requires the network 807b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters# resource, and a socket module with ssl support. 80855b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz# test_timeout 80955b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz# Controlled by test_timeout.skip_expected. Requires the network 81055b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz# resource and a socket module. 811b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl# 812b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl# Tests that are expected to be skipped everywhere except on one platform 813b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl# are also handled separately. 814de14a30d1d70073d36f207fe432e4adad5178399Tim Peters 815f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum_expectations = { 816f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'win32': 817f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 818c7c516aa5140d255f18ffd2e8569434f0904f5dbTim Peters test__locale 819823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 82078e35f931128d017d5955841eac8c397ff32595cTim Peters test_bsddb3 821f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_commands 822f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_crypt 823d703057752d52cef6082a920879a0b62cdeffacaTim Peters test_curses 824f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dbm 825f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 826f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fcntl 827f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_fork1 828f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_gdbm 829f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_grp 830fd8e6e599051de07cdb8e9abc9dbadf37c5fca0cTim Peters test_ioctl 831f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 832f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_mhlib 833f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_openpty 834efc4b121694888e00072f5a079de5496afecb05aTim Peters test_ossaudiodev 83527d9ee32abac7a580b1ffc980522535bdd20f09bGeorg Brandl test_pipes 836f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_poll 837003eb3088283927e3155f2e2317d3d516edd9645Tim Peters test_posix 838f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pty 839f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_pwd 8401e33ffa5c719ec611e182681c4a5f2ceb62a08f5Tim Peters test_resource 841f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_signal 842cea2cc4a21e7e2ba84f6dc11682821e502bd1f5fTim Peters test_threadsignals 843f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_timing 844b84de02f75c906fbcf519b4c89b9dbdd18837276Tim Peters test_wait3 845b84de02f75c906fbcf519b4c89b9dbdd18837276Tim Peters test_wait4 846f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 847f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 'linux2': 848f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """ 849823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 850f66dacdb017c7481c3ba4f0743d5446146de33c8Guido van Rossum test_curses 851f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_dl 852f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum test_largefile 8534507ec70cff35468f4b1767382f38ecebd4a29a2Guido van Rossum test_ossaudiodev 854f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum """, 85549a806edbb298f2a5be3598bd80c21392cb6968dJack Jansen 'mac': 856aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """ 857679751455798fab6425fda749a19e783e58b210eJack Jansen test_atexit 858aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_bsddb 859823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 860679751455798fab6425fda749a19e783e58b210eJack Jansen test_bsddb3 861679751455798fab6425fda749a19e783e58b210eJack Jansen test_bz2 862aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_commands 863aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_crypt 864b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen test_curses 865aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dbm 866aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_dl 867aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fcntl 868aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_fork1 869aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_grp 870c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen test_ioctl 871aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_largefile 872aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_locale 873aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_mmap 874aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_openpty 875679751455798fab6425fda749a19e783e58b210eJack Jansen test_ossaudiodev 876aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_poll 877679751455798fab6425fda749a19e783e58b210eJack Jansen test_popen 878aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_popen2 8795bb97e66dcbb110877ac17209c7d2641db6f6006Jack Jansen test_posix 880aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pty 881aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_pwd 882679751455798fab6425fda749a19e783e58b210eJack Jansen test_resource 883aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_signal 884aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_sundry 885c4d6bdd58a58b365556abfe60c9f5b5f73c555f8Jack Jansen test_tarfile 886aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum test_timing 887aa78236636d62a07af4759b64ea89452c6690c7eGuido van Rossum """, 88821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'unixware7': 8890ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """ 8900ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_bsddb 891823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 8920ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_dl 8930ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_largefile 8940ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_minidom 8950ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_openpty 8960ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_pyexpat 8970ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sax 8980ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis test_sundry 8990ace326ed2ec73dfa515c89ad06fcddd6fafa4ceMartin v. Löwis """, 90021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'openunix8': 90121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """ 90221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_bsddb 903823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 90421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_dl 90521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_largefile 90621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_minidom 90721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_openpty 90821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_pyexpat 90921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sax 91021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sundry 91121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """, 91221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis 'sco_sv3': 91321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """ 91421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_asynchat 91521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_bsddb 916823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 91721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_dl 91821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_fork1 91921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_gettext 92021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_largefile 92121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_locale 92221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_minidom 92321ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_openpty 92421ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_pyexpat 92521ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_queue 92621ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sax 92721ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_sundry 92821ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_thread 92921ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threaded_import 93021ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threadedtempfile 93121ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis test_threading 93221ee4091e10c6f05360bbb60e49aa3639408a612Martin v. Löwis """, 933e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum 'riscos': 934e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """ 935e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_asynchat 936a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis test_atexit 937e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_bsddb 938823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 939a94568a7535de60f1144e4eea0d027b87017a4b4Martin v. Löwis test_bsddb3 940e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_commands 941e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_crypt 942e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dbm 943e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_dl 944e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fcntl 945e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_fork1 946e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_gdbm 947e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_grp 948e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_largefile 949e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_locale 950e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_mmap 951e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_openpty 952e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_poll 953e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_popen2 954e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pty 955e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_pwd 956e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_strop 957e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_sundry 958e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_thread 959e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threaded_import 960e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threadedtempfile 961e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_threading 962e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum test_timing 963e2ae77b8b8a62e648bb1864a9b36ef3280984404Guido van Rossum """, 9648a97f4a380a7a356730e48406f8269c3efe5e6ebJack Jansen 'darwin': 965398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """ 9662bfb94c871caeae622174485264f407d9df354b9Brett Cannon test__locale 967acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_bsddb 9689d4270070a5d0c3bcd381d52024d811f3b0a0e39Guido van Rossum test_bsddb3 969398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_curses 970398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_gdbm 971398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_largefile 972acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_locale 973398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_minidom 974acda3394bbfb1db3b22673a80cb2d7e3c68b3da9Jack Jansen test_ossaudiodev 975398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen test_poll 976398c236c1ba358a43a34137dc9ca670d76f7eb84Jack Jansen """, 97711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum 'sunos5': 97811c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum """ 97911c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_bsddb 980823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 98111c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_curses 98211c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_dbm 98311c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gdbm 98411c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_gzip 98511c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_openpty 98611c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_zipfile 98711c3f0999f932e3697347dde15f99a8ad9f9216dGuido van Rossum test_zlib 988ed375e18d10d37bfea1769aa1fe69795df6cbc10Jeremy Hylton """, 989b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro 'hp-ux11': 990b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """ 991b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_bsddb 992823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 993b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_curses 994b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_dl 995b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gdbm 996b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_gzip 997b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_largefile 998b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_locale 999b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_minidom 1000b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_openpty 1001b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_pyexpat 1002b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_sax 1003b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zipfile 1004b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro test_zlib 1005b32302176e127a94b714f90c858b6e9c476fc7feSkip Montanaro """, 1006f90ae20354ceb501f0ba0b6459df17f1a8005a47Martin v. Löwis 'atheos': 1007c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters """ 1008823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 1009c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_curses 1010c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_dl 1011c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_gdbm 1012c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_largefile 1013c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_locale 1014c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mhlib 1015c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_mmap 1016c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_poll 1017c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_popen2 1018c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters test_resource 1019c411dbaeee29dba87d5432a92fe76ea65d8e25f0Tim Peters """, 102025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler 'cygwin': 102125115940604e6051aa2fb16be88c6b8f64577251Jason Tishler """ 1022823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 1023b0f89e05ad9aaf229033bbc81be43c1f826e3930Tim Peters test_bsddb3 102425115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_curses 102525115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_dbm 1026c23f39ca9dc540ace879fcf9746254d94293b86fJason Tishler test_ioctl 102725115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_largefile 102825115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_locale 10295c4ded2c3b59aa134b82ab17cdfe7ab633194ca6Jason Tishler test_ossaudiodev 103025115940604e6051aa2fb16be88c6b8f64577251Jason Tishler test_socketserver 103125115940604e6051aa2fb16be88c6b8f64577251Jason Tishler """, 1032fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre 'os2emx': 1033fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre """ 1034fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_audioop 1035823ba28b0d436f83ebfc5b9df0d475e60e8ae5eeSkip Montanaro test_bsddb185 1036fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_bsddb3 1037fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_commands 1038fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_curses 1039fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_dl 1040fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_largefile 1041fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_mhlib 1042fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_mmap 1043fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_openpty 1044fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_ossaudiodev 1045fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_pty 1046fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_resource 1047fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre test_signal 1048fd07e7dda709edacc16a851da981a628d61ffd72Andrew MacIntyre """, 1049944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum 'freebsd4': 1050944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum """ 1051944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_bsddb 1052944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_bsddb3 1053f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang test_gdbm 1054944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_locale 1055944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_ossaudiodev 1056944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_pep277 1057f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang test_pty 1058944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_socket_ssl 1059944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_socketserver 1060f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang test_tcl 1061944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_timeout 1062944a6c32d7f78445e3516636d9fcf1c62e1663ffGuido van Rossum test_urllibnet 106356f88113b7272be8403f9b722c943e679e23d362Martin v. Löwis """, 10648ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum 'aix5': 10658ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum """ 10668ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bsddb 10678ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bsddb185 10688ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bsddb3 10698ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_bz2 10708ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_dl 10718ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_gdbm 10728ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_gzip 10738ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_ossaudiodev 10748ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_tcl 10758ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_zipimport 10768ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum test_zlib 10778ee3e5aa9306a00573817e237bed4a482473e818Guido van Rossum """, 10786da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis 'openbsd3': 10796da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis """ 10806da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_bsddb 10816da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_bsddb3 10826da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_ctypes 10836da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_dl 10846da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_gdbm 10856da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_locale 10866da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_normalization 10876da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_ossaudiodev 10886da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_pep277 10896da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis test_tcl 10906da56f9428896f635a794ad523bd88190758e6abMartin v. Löwis """, 10910870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl 'netbsd3': 10920870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl """ 10930870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_bsddb 10940870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_bsddb185 10950870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_bsddb3 10960870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_ctypes 10970870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_curses 10980870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_dl 10990870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_gdbm 11000870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_locale 11010870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_ossaudiodev 11020870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_pep277 11030870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl test_tcl 11040870687f449140ad2620af5b6f5f44896e8c1cd5Georg Brandl """, 1105f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum} 110632d0c1b458bbdda8d8895f5b5bedfb4644f839e7Martin v. Löwis_expectations['freebsd5'] = _expectations['freebsd4'] 1107f64700a512e89c322f46f3cabda3bf58573eda54Hye-Shik Chang_expectations['freebsd6'] = _expectations['freebsd4'] 11084e422817eb1bc5a6a42365001ad45683ae07e559Hye-Shik Chang_expectations['freebsd7'] = _expectations['freebsd4'] 1109ea684743daa0c198ab327d07832eca48a9578c68Hye-Shik Chang_expectations['freebsd8'] = _expectations['freebsd4'] 1110f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum 1111b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Petersclass _ExpectedSkips: 1112b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def __init__(self): 11132a182dbf3f2520ad753792068391775d102b13dfTim Peters import os.path 111455b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz from test import test_timeout 11151b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 11167c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters self.valid = False 1117de14a30d1d70073d36f207fe432e4adad5178399Tim Peters if sys.platform in _expectations: 1118f73e30c3e3ba6f2779eadf6bf4c21c6bf3e4c075Guido van Rossum s = _expectations[sys.platform] 1119a690a9967e715663b7a421c9ebdad91381cdf1e4Raymond Hettinger self.expected = set(s.split()) 11201b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 1121b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl # expected to be skipped on every platform, even Linux 1122b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl self.expected.add('test_linuxaudiodev') 1123b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl 11242a182dbf3f2520ad753792068391775d102b13dfTim Peters if not os.path.supports_unicode_filenames: 11252a182dbf3f2520ad753792068391775d102b13dfTim Peters self.expected.add('test_pep277') 11261b445d3fcfcc06e5360e83b978efdb9b1c980278Tim Peters 112798d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen try: 112898d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen from test import test_socket_ssl 112998d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen except ImportError: 113098d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen pass 113198d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen else: 113298d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen if test_socket_ssl.skip_expected: 113398d19dafd9c9d95338887b9e53c77ec6960918e0Bill Janssen self.expected.add('test_socket_ssl') 1134b4ee4eb3b308d55bd0d8d5a1abb2015950934c77Tim Peters 113555b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz if test_timeout.skip_expected: 113655b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz self.expected.add('test_timeout') 113755b61d21d8e8409fbb6ca23421f8a3a5c23f5513Neal Norwitz 1138fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis if sys.maxint == 9223372036854775807L: 1139fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis self.expected.add('test_imageop') 1140fba73698240660d9154b6917b87dd333d6fb8284Martin v. Löwis 11416afc5e02fa775517fa0b6455906a8c203baf9cd2Jack Jansen if not sys.platform in ("mac", "darwin"): 11425e2635103c34ca1d4226f64c84c6bdf54d528d75Brett Cannon MAC_ONLY = ["test_macostools", "test_aepack", 1143b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_plistlib", "test_scriptpackages", 1144b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_applesingle"] 11457035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz for skip in MAC_ONLY: 11467035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz self.expected.add(skip) 1147ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters 1148ecd79eb7dbde19ea2adbf2a912caa5b284b477b9Tim Peters if sys.platform != "win32": 1149b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl # test_sqlite is only reliable on Windows where the library 1150b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl # is distributed with Python 11517035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz WIN_ONLY = ["test_unicode_file", "test_winreg", 1152b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_winsound", "test_startfile", 1153b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_sqlite"] 11547035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz for skip in WIN_ONLY: 11557035c98c5c0eec7f88fab146e72b2a7e4aaf64a5Neal Norwitz self.expected.add(skip) 1156f2715e076435b74638acb81512c2ee014f75aea2Tim Peters 1157dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon if sys.platform != 'irix': 1158b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl IRIX_ONLY = ["test_imageop", "test_al", "test_cd", "test_cl", 1159b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl "test_gl", "test_imgfile"] 1160dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon for skip in IRIX_ONLY: 1161dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon self.expected.add(skip) 1162dc48b74497b67a449dd622fdaa7d69e7bff65a5eBrett Cannon 1163b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl if sys.platform != 'sunos5': 1164b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl self.expected.add('test_sunaudiodev') 1165b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl self.expected.add('test_nis') 1166b2e208f9010e4b1abbbd560d3d4a8f66fa5861d6Georg Brandl 11677c7efe90737d4636633127a95a6cab1a55d57cf4Tim Peters self.valid = True 1168b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1169b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def isvalid(self): 1170b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters "Return true iff _ExpectedSkips knows about the current platform." 1171b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.valid 1172b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1173b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters def getexpected(self): 1174b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """Return set of test names we expect to skip on current platform. 1175b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1176b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters self.isvalid() must be true. 1177b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters """ 1178b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1179b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters assert self.isvalid() 1180b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters return self.expected 1181b5b7b78414e5f1a42ab4205c110626c9cd7a79b9Tim Peters 1182152494aea24669a3d74460fa460a4ed45696bc75Guido van Rossumif __name__ == '__main__': 1183408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # Remove regrtest.py's own directory from the module search path. This 1184408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # prevents relative imports from working, and relative imports will screw 1185408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # up the testing framework. E.g. if both test.test_support and 1186408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # test_support are imported, they will not contain the same globals, and 1187408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # much of the testing framework relies on the globals in the 1188408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw # test.test_support module. 1189408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0]))) 1190408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw i = pathlen = len(sys.path) 1191408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw while i >= 0: 1192408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw i -= 1 1193408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if os.path.abspath(os.path.normpath(sys.path[i])) == mydir: 1194408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw del sys.path[i] 1195408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw if len(sys.path) == pathlen: 1196408b6d34de2b1a6ba690557def435adce9314184Barry Warsaw print 'Could not find %r in sys.path to remove it' % mydir 119708fca5212528e073600c27c70a34eeef445f393bBarry Warsaw main() 1198