blob: 6e866050fd9fdbaf9e17b1a9e7b5573bc34c8bc1 [file] [log] [blame]
Guido van Rossum152494a1996-12-20 03:12:20 +00001#! /usr/bin/env python
2
3"""Regression test.
4
5This will find all modules whose name is "test_*" in the test
6directory, and run them. Various command line options provide
7additional facilities.
8
9Command line options:
10
Barry Warsawa873b032000-08-03 15:50:37 +000011-v: verbose -- run tests in verbose mode with output to stdout
12-q: quiet -- don't print anything except if a test fails
13-g: generate -- write the output file for a test instead of comparing it
14-x: exclude -- arguments are tests to *exclude*
15-s: single -- run only a single test (see below)
16-r: random -- randomize test execution order
Tim Petersc5000df2002-06-02 21:42:01 +000017-f: fromfile -- read names of tests to run from a file (see below)
Neil Schemenauer8a00abc2000-10-13 01:32:42 +000018-l: findleaks -- if GC is available detect tests that leak memory
Barry Warsaw08fca522001-08-20 22:33:46 +000019-u: use -- specify which special resource intensive tests to run
20-h: help -- print this text and exit
Guido van Rossum9e9d4f82002-06-07 15:17:03 +000021-t: threshold -- call gc.set_threshold(N)
Guido van Rossum152494a1996-12-20 03:12:20 +000022
23If non-option arguments are present, they are names for tests to run,
24unless -x is given, in which case they are names for tests not to run.
25If no test names are given, all tests are run.
Guido van Rossumf58ed251997-03-07 21:04:33 +000026
Guido van Rossuma4122201997-08-18 20:08:24 +000027-v is incompatible with -g and does not compare test output files.
Barry Warsawe11e3de1999-01-28 19:51:51 +000028
Guido van Rossum9e9d4f82002-06-07 15:17:03 +000029-s means to run only a single test and exit. This is useful when
30doing memory analysis on the Python interpreter (which tend to consume
31too many resources to run the full regression test non-stop). The
32file /tmp/pynexttest is read to find the next test to run. If this
33file is missing, the first test_*.py file in testdir or on the command
34line is used. (actually tempfile.gettempdir() is used instead of
35/tmp).
Barry Warsawe11e3de1999-01-28 19:51:51 +000036
Guido van Rossum9e9d4f82002-06-07 15:17:03 +000037-f reads the names of tests from the file given as f's argument, one
38or more test names per line. Whitespace is ignored. Blank lines and
39lines beginning with '#' are ignored. This is especially useful for
40whittling down failures involving interactions among tests.
Tim Petersc5000df2002-06-02 21:42:01 +000041
Guido van Rossum9e9d4f82002-06-07 15:17:03 +000042-u is used to specify which special resource intensive tests to run,
43such as those requiring large file support or network connectivity.
44The argument is a comma-separated list of words indicating the
45resources to test. Currently only the following are defined:
Barry Warsaw08fca522001-08-20 22:33:46 +000046
Fred Drake3a15dac2002-04-11 16:39:16 +000047 all - Enable all special resources.
48
Guido van Rossum315aa362003-03-11 14:46:48 +000049 audio - Tests that use the audio device. (There are known
50 cases of broken audio drivers that can crash Python or
51 even the Linux kernel.)
52
Andrew M. Kuchling2158df02001-10-22 15:26:09 +000053 curses - Tests that use curses and will modify the terminal's
54 state and output modes.
Tim Peters1633a2e2001-10-30 05:56:40 +000055
Guido van Rossum9e9d4f82002-06-07 15:17:03 +000056 largefile - It is okay to run some test that may create huge
57 files. These tests can take a long time and may
58 consume >2GB of disk space temporarily.
Barry Warsaw08fca522001-08-20 22:33:46 +000059
Guido van Rossum9e9d4f82002-06-07 15:17:03 +000060 network - It is okay to run tests that use external network
61 resource, e.g. testing SSL support for sockets.
Martin v. Löwis1c6b1a22002-11-19 17:47:07 +000062
63 bsddb - It is okay to run the bsddb testsuite, which takes
64 a long time to complete.
Fred Drake4dd0f7e2002-11-26 21:44:56 +000065
66To enable all resources except one, use '-uall,-<resource>'. For
67example, to run all the tests except for the bsddb tests, give the
68option '-uall,-bsddb'.
Guido van Rossum152494a1996-12-20 03:12:20 +000069"""
70
71import sys
Guido van Rossum152494a1996-12-20 03:12:20 +000072import os
73import getopt
Guido van Rossum9e48b271997-07-16 01:56:13 +000074import traceback
Skip Montanaroab1c7912000-06-30 16:39:27 +000075import random
Fred Drakeae1bb172001-05-21 21:08:12 +000076import StringIO
Guido van Rossumdc15c272002-08-12 21:55:51 +000077import warnings
Tim Peters7c7efe92002-08-23 17:55:54 +000078from sets import Set
Guido van Rossumdc15c272002-08-12 21:55:51 +000079
80# I see no other way to suppress these warnings;
81# putting them in test_grammar.py has no effect:
Guido van Rossum88b1def2002-08-14 17:54:48 +000082warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
Guido van Rossumdc15c272002-08-12 21:55:51 +000083 ".*test.test_grammar$")
Guido van Rossumc34c4fc2002-09-19 00:42:16 +000084if sys.maxint > 0x7fffffff:
85 # Also suppress them in <string>, because for 64-bit platforms,
86 # that's where test_grammar.py hides them.
87 warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
88 "<string>")
Guido van Rossum152494a1996-12-20 03:12:20 +000089
Guido van Rossumbb484652002-12-02 09:56:21 +000090# MacOSX (a.k.a. Darwin) has a default stack size that is too small
91# for deeply recursive regular expressions. We see this as crashes in
92# the Python test suite when running test_re.py and test_sre.py. The
93# fix is to set the stack limit to 2048.
94# This approach may also be useful for other Unixy platforms that
95# suffer from small default stack limits.
96if sys.platform == 'darwin':
97 try:
98 import resource
99 except ImportError:
100 pass
101 else:
102 soft, hard = resource.getrlimit(resource.RLIMIT_STACK)
103 newsoft = min(hard, max(soft, 1024*2048))
104 resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard))
105
Barry Warsaw04f357c2002-07-23 19:04:11 +0000106from test import test_support
Fred Drake3a15dac2002-04-11 16:39:16 +0000107
Guido van Rossum315aa362003-03-11 14:46:48 +0000108RESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb')
Fred Drake3a15dac2002-04-11 16:39:16 +0000109
110
Barry Warsaw08fca522001-08-20 22:33:46 +0000111def usage(code, msg=''):
112 print __doc__
113 if msg: print msg
114 sys.exit(code)
115
116
Skip Montanaroab1c7912000-06-30 16:39:27 +0000117def main(tests=None, testdir=None, verbose=0, quiet=0, generate=0,
Tim Petersc5000df2002-06-02 21:42:01 +0000118 exclude=0, single=0, randomize=0, fromfile=None, findleaks=0,
Barry Warsaw08fca522001-08-20 22:33:46 +0000119 use_resources=None):
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000120 """Execute a test suite.
121
Thomas Wouters7e474022000-07-16 12:04:32 +0000122 This also parses command-line options and modifies its behavior
Fred Drake004d5e62000-10-23 17:22:08 +0000123 accordingly.
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000124
125 tests -- a list of strings containing test names (optional)
126 testdir -- the directory in which to look for tests (optional)
127
128 Users other than the Python test suite will certainly want to
129 specify testdir; if it's omitted, the directory containing the
Fred Drake004d5e62000-10-23 17:22:08 +0000130 Python test suite is searched for.
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000131
132 If the tests argument is omitted, the tests listed on the
133 command-line will be used. If that's empty, too, then all *.py
134 files beginning with test_ will be used.
Skip Montanaroab1c7912000-06-30 16:39:27 +0000135
Guido van Rossum9e9d4f82002-06-07 15:17:03 +0000136 The other default arguments (verbose, quiet, generate, exclude,
137 single, randomize, findleaks, and use_resources) allow programmers
138 calling main() directly to set the values that would normally be
139 set by flags on the command line.
Barry Warsawa873b032000-08-03 15:50:37 +0000140
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000141 """
Fred Drake004d5e62000-10-23 17:22:08 +0000142
Tim Peters8dee8092001-09-25 20:05:11 +0000143 test_support.record_original_stdout(sys.stdout)
Guido van Rossum152494a1996-12-20 03:12:20 +0000144 try:
Guido van Rossum9e9d4f82002-06-07 15:17:03 +0000145 opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsrf:lu:t:',
Barry Warsaw08fca522001-08-20 22:33:46 +0000146 ['help', 'verbose', 'quiet', 'generate',
Tim Petersc5000df2002-06-02 21:42:01 +0000147 'exclude', 'single', 'random', 'fromfile',
Guido van Rossum9e9d4f82002-06-07 15:17:03 +0000148 'findleaks', 'use=', 'threshold='])
Guido van Rossum152494a1996-12-20 03:12:20 +0000149 except getopt.error, msg:
Barry Warsaw08fca522001-08-20 22:33:46 +0000150 usage(2, msg)
151
152 # Defaults
153 if use_resources is None:
154 use_resources = []
Guido van Rossum152494a1996-12-20 03:12:20 +0000155 for o, a in opts:
Barry Warsaw08fca522001-08-20 22:33:46 +0000156 if o in ('-h', '--help'):
157 usage(0)
158 elif o in ('-v', '--verbose'):
159 verbose += 1
160 elif o in ('-q', '--quiet'):
161 quiet = 1;
162 verbose = 0
163 elif o in ('-g', '--generate'):
164 generate = 1
165 elif o in ('-x', '--exclude'):
166 exclude = 1
167 elif o in ('-s', '--single'):
168 single = 1
169 elif o in ('-r', '--randomize'):
170 randomize = 1
Tim Petersc5000df2002-06-02 21:42:01 +0000171 elif o in ('-f', '--fromfile'):
172 fromfile = a
Barry Warsaw08fca522001-08-20 22:33:46 +0000173 elif o in ('-l', '--findleaks'):
174 findleaks = 1
Guido van Rossum9e9d4f82002-06-07 15:17:03 +0000175 elif o in ('-t', '--threshold'):
176 import gc
177 gc.set_threshold(int(a))
Barry Warsaw08fca522001-08-20 22:33:46 +0000178 elif o in ('-u', '--use'):
Guido van Rossumfe3f6962001-09-06 16:09:41 +0000179 u = [x.lower() for x in a.split(',')]
180 for r in u:
Fred Drake3a15dac2002-04-11 16:39:16 +0000181 if r == 'all':
Fred Drake4dd0f7e2002-11-26 21:44:56 +0000182 use_resources[:] = RESOURCE_NAMES
183 continue
184 remove = False
185 if r[0] == '-':
186 remove = True
187 r = r[1:]
Fred Drake3a15dac2002-04-11 16:39:16 +0000188 if r not in RESOURCE_NAMES:
189 usage(1, 'Invalid -u/--use option: ' + a)
Fred Drake4dd0f7e2002-11-26 21:44:56 +0000190 if remove:
191 if r in use_resources:
192 use_resources.remove(r)
193 elif r not in use_resources:
Andrew MacIntyree41abab2002-04-30 12:11:04 +0000194 use_resources.append(r)
Guido van Rossuma4122201997-08-18 20:08:24 +0000195 if generate and verbose:
Barry Warsaw08fca522001-08-20 22:33:46 +0000196 usage(2, "-g and -v don't go together!")
Tim Petersc5000df2002-06-02 21:42:01 +0000197 if single and fromfile:
198 usage(2, "-s and -f don't go together!")
Barry Warsaw08fca522001-08-20 22:33:46 +0000199
Guido van Rossum152494a1996-12-20 03:12:20 +0000200 good = []
201 bad = []
202 skipped = []
Fred Drake9a0db072003-02-03 15:19:30 +0000203 resource_denieds = []
Barry Warsawe11e3de1999-01-28 19:51:51 +0000204
Neil Schemenauerd569f232000-09-22 15:29:28 +0000205 if findleaks:
Barry Warsawa873b032000-08-03 15:50:37 +0000206 try:
207 import gc
208 except ImportError:
Neil Schemenauer8a00abc2000-10-13 01:32:42 +0000209 print 'No GC available, disabling findleaks.'
Neil Schemenauerd569f232000-09-22 15:29:28 +0000210 findleaks = 0
Barry Warsawa873b032000-08-03 15:50:37 +0000211 else:
Neil Schemenauer8a00abc2000-10-13 01:32:42 +0000212 # Uncomment the line below to report garbage that is not
213 # freeable by reference counting alone. By default only
214 # garbage that is not collectable by the GC is reported.
215 #gc.set_debug(gc.DEBUG_SAVEALL)
Neil Schemenauerd569f232000-09-22 15:29:28 +0000216 found_garbage = []
Barry Warsawa873b032000-08-03 15:50:37 +0000217
Barry Warsawe11e3de1999-01-28 19:51:51 +0000218 if single:
219 from tempfile import gettempdir
220 filename = os.path.join(gettempdir(), 'pynexttest')
221 try:
222 fp = open(filename, 'r')
Eric S. Raymondfc170b12001-02-09 11:51:27 +0000223 next = fp.read().strip()
Barry Warsawe11e3de1999-01-28 19:51:51 +0000224 tests = [next]
225 fp.close()
226 except IOError:
227 pass
Tim Petersc5000df2002-06-02 21:42:01 +0000228
229 if fromfile:
230 tests = []
231 fp = open(fromfile)
232 for line in fp:
233 guts = line.split() # assuming no test has whitespace in its name
234 if guts and not guts[0].startswith('#'):
235 tests.extend(guts)
236 fp.close()
237
238 # Strip .py extensions.
239 if args:
240 args = map(removepy, args)
241 if tests:
242 tests = map(removepy, tests)
243
Guido van Rossum6c74fea1998-08-25 12:29:08 +0000244 stdtests = STDTESTS[:]
245 nottests = NOTTESTS[:]
Guido van Rossum152494a1996-12-20 03:12:20 +0000246 if exclude:
Guido van Rossum6c74fea1998-08-25 12:29:08 +0000247 for arg in args:
248 if arg in stdtests:
249 stdtests.remove(arg)
250 nottests[:0] = args
Guido van Rossum41360a41998-03-26 19:42:58 +0000251 args = []
Guido van Rossum747e1ca1998-08-24 13:48:36 +0000252 tests = tests or args or findtests(testdir, stdtests, nottests)
Barry Warsawe11e3de1999-01-28 19:51:51 +0000253 if single:
254 tests = tests[:1]
Skip Montanaroab1c7912000-06-30 16:39:27 +0000255 if randomize:
256 random.shuffle(tests)
Guido van Rossum41360a41998-03-26 19:42:58 +0000257 test_support.verbose = verbose # Tell tests to be moderately quiet
Barry Warsaw08fca522001-08-20 22:33:46 +0000258 test_support.use_resources = use_resources
Guido van Rossum5796d262000-04-21 21:35:06 +0000259 save_modules = sys.modules.keys()
Guido van Rossum152494a1996-12-20 03:12:20 +0000260 for test in tests:
Guido van Rossum41360a41998-03-26 19:42:58 +0000261 if not quiet:
262 print test
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000263 sys.stdout.flush()
Trent Mickf29f47b2000-08-11 19:02:59 +0000264 ok = runtest(test, generate, verbose, quiet, testdir)
Guido van Rossum41360a41998-03-26 19:42:58 +0000265 if ok > 0:
266 good.append(test)
267 elif ok == 0:
268 bad.append(test)
269 else:
Guido van Rossum41360a41998-03-26 19:42:58 +0000270 skipped.append(test)
Fred Drake9a0db072003-02-03 15:19:30 +0000271 if ok == -2:
272 resource_denieds.append(test)
Neil Schemenauerd569f232000-09-22 15:29:28 +0000273 if findleaks:
274 gc.collect()
275 if gc.garbage:
Neil Schemenauer8a00abc2000-10-13 01:32:42 +0000276 print "Warning: test created", len(gc.garbage),
277 print "uncollectable object(s)."
278 # move the uncollectable objects somewhere so we don't see
279 # them again
Neil Schemenauerd569f232000-09-22 15:29:28 +0000280 found_garbage.extend(gc.garbage)
281 del gc.garbage[:]
Guido van Rossum5796d262000-04-21 21:35:06 +0000282 # Unload the newly imported modules (best effort finalization)
283 for module in sys.modules.keys():
Guido van Rossum51931142000-05-05 14:27:39 +0000284 if module not in save_modules and module.startswith("test."):
Guido van Rossum5796d262000-04-21 21:35:06 +0000285 test_support.unload(module)
Jeremy Hylton7a1ea0e2001-10-17 13:45:28 +0000286
287 # The lists won't be sorted if running with -r
288 good.sort()
289 bad.sort()
290 skipped.sort()
Tim Peterse0c446b2001-10-18 21:57:37 +0000291
Guido van Rossum152494a1996-12-20 03:12:20 +0000292 if good and not quiet:
Guido van Rossum41360a41998-03-26 19:42:58 +0000293 if not bad and not skipped and len(good) > 1:
294 print "All",
295 print count(len(good), "test"), "OK."
Tim Peters1a4d77b2000-12-30 22:21:22 +0000296 if verbose:
Barry Warsaw408b6d32002-07-30 23:27:12 +0000297 print "CAUTION: stdout isn't compared in verbose mode:"
298 print "a test that passes in verbose mode may fail without it."
Guido van Rossum152494a1996-12-20 03:12:20 +0000299 if bad:
Tim Petersa45da922001-08-12 03:45:50 +0000300 print count(len(bad), "test"), "failed:"
301 printlist(bad)
Guido van Rossum152494a1996-12-20 03:12:20 +0000302 if skipped and not quiet:
Tim Petersa45da922001-08-12 03:45:50 +0000303 print count(len(skipped), "test"), "skipped:"
304 printlist(skipped)
Barry Warsawe11e3de1999-01-28 19:51:51 +0000305
Tim Petersb5b7b782001-08-12 01:20:39 +0000306 e = _ExpectedSkips()
Tim Petersa2be2d62001-08-12 02:01:09 +0000307 plat = sys.platform
Tim Petersb5b7b782001-08-12 01:20:39 +0000308 if e.isvalid():
Fred Drake9a0db072003-02-03 15:19:30 +0000309 surprise = Set(skipped) - e.getexpected() - Set(resource_denieds)
Tim Petersb5b7b782001-08-12 01:20:39 +0000310 if surprise:
311 print count(len(surprise), "skip"), \
Tim Petersa45da922001-08-12 03:45:50 +0000312 "unexpected on", plat + ":"
313 printlist(surprise)
Tim Petersb5b7b782001-08-12 01:20:39 +0000314 else:
315 print "Those skips are all expected on", plat + "."
316 else:
317 print "Ask someone to teach regrtest.py about which tests are"
318 print "expected to get skipped on", plat + "."
319
Barry Warsawe11e3de1999-01-28 19:51:51 +0000320 if single:
321 alltests = findtests(testdir, stdtests, nottests)
322 for i in range(len(alltests)):
323 if tests[0] == alltests[i]:
324 if i == len(alltests) - 1:
325 os.unlink(filename)
326 else:
327 fp = open(filename, 'w')
328 fp.write(alltests[i+1] + '\n')
329 fp.close()
330 break
331 else:
332 os.unlink(filename)
333
Barry Warsaw08fca522001-08-20 22:33:46 +0000334 sys.exit(len(bad) > 0)
335
Guido van Rossum152494a1996-12-20 03:12:20 +0000336
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000337STDTESTS = [
Guido van Rossum152494a1996-12-20 03:12:20 +0000338 'test_grammar',
339 'test_opcodes',
340 'test_operations',
341 'test_builtin',
342 'test_exceptions',
343 'test_types',
344 ]
345
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000346NOTTESTS = [
Guido van Rossum152494a1996-12-20 03:12:20 +0000347 'test_support',
Jeremy Hylton62e2c7e2001-02-28 17:48:06 +0000348 'test_future1',
349 'test_future2',
Jeremy Hylton8471a352001-08-20 20:33:42 +0000350 'test_future3',
Guido van Rossum152494a1996-12-20 03:12:20 +0000351 ]
352
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000353def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
Guido van Rossum152494a1996-12-20 03:12:20 +0000354 """Return a list of all applicable test modules."""
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000355 if not testdir: testdir = findtestdir()
Guido van Rossum152494a1996-12-20 03:12:20 +0000356 names = os.listdir(testdir)
357 tests = []
358 for name in names:
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000359 if name[:5] == "test_" and name[-3:] == os.extsep+"py":
Guido van Rossum41360a41998-03-26 19:42:58 +0000360 modname = name[:-3]
361 if modname not in stdtests and modname not in nottests:
362 tests.append(modname)
Guido van Rossum152494a1996-12-20 03:12:20 +0000363 tests.sort()
364 return stdtests + tests
365
Trent Mickf29f47b2000-08-11 19:02:59 +0000366def runtest(test, generate, verbose, quiet, testdir = None):
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000367 """Run a single test.
368 test -- the name of the test
369 generate -- if true, generate output, instead of running the test
370 and comparing it to a previously created output file
371 verbose -- if true, print more messages
Trent Mickf29f47b2000-08-11 19:02:59 +0000372 quiet -- if true, don't print 'skipped' messages (probably redundant)
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000373 testdir -- test directory
374 """
Guido van Rossum152494a1996-12-20 03:12:20 +0000375 test_support.unload(test)
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000376 if not testdir: testdir = findtestdir()
Guido van Rossum152494a1996-12-20 03:12:20 +0000377 outputdir = os.path.join(testdir, "output")
378 outputfile = os.path.join(outputdir, test)
Tim Peters9390cc12001-09-28 20:14:46 +0000379 if verbose:
Guido van Rossum41360a41998-03-26 19:42:58 +0000380 cfp = None
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000381 else:
Fred Drake88a56852001-09-28 20:16:30 +0000382 cfp = StringIO.StringIO()
Guido van Rossum152494a1996-12-20 03:12:20 +0000383 try:
Tim Peters342ca752001-09-25 19:13:20 +0000384 save_stdout = sys.stdout
Guido van Rossum41360a41998-03-26 19:42:58 +0000385 try:
386 if cfp:
387 sys.stdout = cfp
388 print test # Output file starts with test name
Barry Warsaw408b6d32002-07-30 23:27:12 +0000389 if test.startswith('test.'):
390 abstest = test
391 else:
392 # Always import it from the test package
393 abstest = 'test.' + test
394 the_package = __import__(abstest, globals(), locals(), [])
395 the_module = getattr(the_package, test)
Tim Petersd9742212001-05-22 18:28:25 +0000396 # Most tests run to completion simply as a side-effect of
397 # being imported. For the benefit of tests that can't run
398 # that way (like test_threaded_import), explicitly invoke
399 # their test_main() function (if it exists).
400 indirect_test = getattr(the_module, "test_main", None)
401 if indirect_test is not None:
402 indirect_test()
Guido van Rossum41360a41998-03-26 19:42:58 +0000403 finally:
Tim Peters342ca752001-09-25 19:13:20 +0000404 sys.stdout = save_stdout
Fred Drake9a0db072003-02-03 15:19:30 +0000405 except test_support.ResourceDenied, msg:
406 if not quiet:
407 print test, "skipped --", msg
408 sys.stdout.flush()
409 return -2
Thomas Wouters3af826e2000-08-04 13:17:51 +0000410 except (ImportError, test_support.TestSkipped), msg:
Trent Mickf29f47b2000-08-11 19:02:59 +0000411 if not quiet:
Fred Drakede4742b2002-10-17 20:36:08 +0000412 print test, "skipped --", msg
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000413 sys.stdout.flush()
Guido van Rossum41360a41998-03-26 19:42:58 +0000414 return -1
Fred Drakefe5c22a2000-08-18 16:04:05 +0000415 except KeyboardInterrupt:
416 raise
Guido van Rossum152494a1996-12-20 03:12:20 +0000417 except test_support.TestFailed, msg:
Guido van Rossum41360a41998-03-26 19:42:58 +0000418 print "test", test, "failed --", msg
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000419 sys.stdout.flush()
Guido van Rossum41360a41998-03-26 19:42:58 +0000420 return 0
Guido van Rossum9e48b271997-07-16 01:56:13 +0000421 except:
Guido van Rossum41360a41998-03-26 19:42:58 +0000422 type, value = sys.exc_info()[:2]
Fred Drake27c4b392000-08-23 20:34:40 +0000423 print "test", test, "crashed --", str(type) + ":", value
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000424 sys.stdout.flush()
Guido van Rossum41360a41998-03-26 19:42:58 +0000425 if verbose:
426 traceback.print_exc(file=sys.stdout)
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000427 sys.stdout.flush()
Guido van Rossum41360a41998-03-26 19:42:58 +0000428 return 0
Guido van Rossum152494a1996-12-20 03:12:20 +0000429 else:
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000430 if not cfp:
431 return 1
432 output = cfp.getvalue()
Fred Drakee51fe8d2001-05-29 17:10:51 +0000433 if generate:
Fred Drakee51fe8d2001-05-29 17:10:51 +0000434 if output == test + "\n":
435 if os.path.exists(outputfile):
436 # Write it since it already exists (and the contents
437 # may have changed), but let the user know it isn't
438 # needed:
Fred Drakee51fe8d2001-05-29 17:10:51 +0000439 print "output file", outputfile, \
440 "is no longer needed; consider removing it"
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000441 else:
442 # We don't need it, so don't create it.
443 return 1
444 fp = open(outputfile, "w")
445 fp.write(output)
446 fp.close()
447 return 1
448 if os.path.exists(outputfile):
449 fp = open(outputfile, "r")
450 expected = fp.read()
451 fp.close()
452 else:
453 expected = test + "\n"
454 if output == expected:
455 return 1
456 print "test", test, "produced unexpected output:"
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000457 sys.stdout.flush()
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000458 reportdiff(expected, output)
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000459 sys.stdout.flush()
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000460 return 0
461
462def reportdiff(expected, output):
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000463 import difflib
Tim Petersc377b162001-09-22 05:31:03 +0000464 print "*" * 70
465 a = expected.splitlines(1)
466 b = output.splitlines(1)
Guido van Rossumcf691932001-09-21 21:06:22 +0000467 sm = difflib.SequenceMatcher(a=a, b=b)
468 tuples = sm.get_opcodes()
Tim Petersc377b162001-09-22 05:31:03 +0000469
Guido van Rossumcf691932001-09-21 21:06:22 +0000470 def pair(x0, x1):
Tim Petersc377b162001-09-22 05:31:03 +0000471 # x0:x1 are 0-based slice indices; convert to 1-based line indices.
Guido van Rossumcf691932001-09-21 21:06:22 +0000472 x0 += 1
473 if x0 >= x1:
Tim Petersc377b162001-09-22 05:31:03 +0000474 return "line " + str(x0)
Guido van Rossumcf691932001-09-21 21:06:22 +0000475 else:
Tim Petersc377b162001-09-22 05:31:03 +0000476 return "lines %d-%d" % (x0, x1)
477
Guido van Rossumcf691932001-09-21 21:06:22 +0000478 for op, a0, a1, b0, b1 in tuples:
479 if op == 'equal':
480 pass
Tim Petersc377b162001-09-22 05:31:03 +0000481
Guido van Rossumcf691932001-09-21 21:06:22 +0000482 elif op == 'delete':
Tim Petersc377b162001-09-22 05:31:03 +0000483 print "***", pair(a0, a1), "of expected output missing:"
Guido van Rossumcf691932001-09-21 21:06:22 +0000484 for line in a[a0:a1]:
Tim Petersc377b162001-09-22 05:31:03 +0000485 print "-", line,
486
Guido van Rossumcf691932001-09-21 21:06:22 +0000487 elif op == 'replace':
Tim Petersc377b162001-09-22 05:31:03 +0000488 print "*** mismatch between", pair(a0, a1), "of expected", \
489 "output and", pair(b0, b1), "of actual output:"
490 for line in difflib.ndiff(a[a0:a1], b[b0:b1]):
491 print line,
492
Guido van Rossumcf691932001-09-21 21:06:22 +0000493 elif op == 'insert':
Tim Petersc377b162001-09-22 05:31:03 +0000494 print "***", pair(b0, b1), "of actual output doesn't appear", \
495 "in expected output after line", str(a1)+":"
Guido van Rossumcf691932001-09-21 21:06:22 +0000496 for line in b[b0:b1]:
Tim Petersc377b162001-09-22 05:31:03 +0000497 print "+", line,
498
Guido van Rossumcf691932001-09-21 21:06:22 +0000499 else:
500 print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1)
Tim Petersc377b162001-09-22 05:31:03 +0000501
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000502 print "*" * 70
Guido van Rossum152494a1996-12-20 03:12:20 +0000503
504def findtestdir():
505 if __name__ == '__main__':
Guido van Rossum41360a41998-03-26 19:42:58 +0000506 file = sys.argv[0]
Guido van Rossum152494a1996-12-20 03:12:20 +0000507 else:
Guido van Rossum41360a41998-03-26 19:42:58 +0000508 file = __file__
Guido van Rossum152494a1996-12-20 03:12:20 +0000509 testdir = os.path.dirname(file) or os.curdir
510 return testdir
511
Tim Petersc5000df2002-06-02 21:42:01 +0000512def removepy(name):
513 if name.endswith(os.extsep + "py"):
514 name = name[:-3]
515 return name
516
Guido van Rossum152494a1996-12-20 03:12:20 +0000517def count(n, word):
518 if n == 1:
Guido van Rossum41360a41998-03-26 19:42:58 +0000519 return "%d %s" % (n, word)
Guido van Rossum152494a1996-12-20 03:12:20 +0000520 else:
Guido van Rossum41360a41998-03-26 19:42:58 +0000521 return "%d %ss" % (n, word)
Guido van Rossum152494a1996-12-20 03:12:20 +0000522
Tim Petersa45da922001-08-12 03:45:50 +0000523def printlist(x, width=70, indent=4):
Tim Peters7c7efe92002-08-23 17:55:54 +0000524 """Print the elements of iterable x to stdout.
Tim Petersa45da922001-08-12 03:45:50 +0000525
526 Optional arg width (default 70) is the maximum line length.
527 Optional arg indent (default 4) is the number of blanks with which to
528 begin each line.
529 """
530
Tim Petersba78bc42002-07-04 19:45:06 +0000531 from textwrap import fill
532 blanks = ' ' * indent
533 print fill(' '.join(map(str, x)), width,
534 initial_indent=blanks, subsequent_indent=blanks)
Tim Petersa45da922001-08-12 03:45:50 +0000535
Tim Petersde14a302002-04-01 05:04:46 +0000536# Map sys.platform to a string containing the basenames of tests
537# expected to be skipped on that platform.
Tim Peters2a182db2002-10-09 01:07:11 +0000538#
539# Special cases:
540# test_pep277
541# The _ExpectedSkips constructor adds this to the set of expected
542# skips if not os.path.supports_unicode_filenames.
Tim Peters1b445d32002-11-24 18:53:11 +0000543# test_normalization
544# Whether a skip is expected here depends on whether a large test
545# input file has been downloaded. test_normalization.skip_expected
Tim Peters1babdfc2002-11-24 19:19:09 +0000546# controls that.
Tim Petersb4ee4eb2002-12-04 03:26:57 +0000547# test_socket_ssl
548# Controlled by test_socket_ssl.skip_expected. Requires the network
549# resource, and a socket module with ssl support.
Neal Norwitz55b61d22003-02-28 19:57:03 +0000550# test_timeout
551# Controlled by test_timeout.skip_expected. Requires the network
552# resource and a socket module.
Tim Petersde14a302002-04-01 05:04:46 +0000553
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000554_expectations = {
555 'win32':
556 """
557 test_al
Tim Peters78e35f92002-11-22 20:00:34 +0000558 test_bsddb3
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000559 test_cd
560 test_cl
561 test_commands
562 test_crypt
Tim Petersd7030572001-10-22 22:06:08 +0000563 test_curses
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000564 test_dbm
565 test_dl
Tim Petersdeb121a2002-04-11 19:52:58 +0000566 test_email_codecs
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000567 test_fcntl
568 test_fork1
569 test_gdbm
570 test_gl
571 test_grp
572 test_imgfile
Tim Petersfd8e6e52003-03-04 00:26:38 +0000573 test_ioctl
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000574 test_largefile
575 test_linuxaudiodev
576 test_mhlib
Tim Petersde14a302002-04-01 05:04:46 +0000577 test_mpz
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000578 test_nis
579 test_openpty
Tim Petersefc4b122002-12-10 18:47:56 +0000580 test_ossaudiodev
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000581 test_poll
Tim Peters003eb302003-02-17 21:48:48 +0000582 test_posix
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000583 test_pty
584 test_pwd
Tim Peters1e33ffa2002-04-23 23:09:02 +0000585 test_resource
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000586 test_signal
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000587 test_sunaudiodev
588 test_timing
589 """,
590 'linux2':
591 """
592 test_al
593 test_cd
594 test_cl
Guido van Rossumf66dacd2001-10-23 15:10:55 +0000595 test_curses
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000596 test_dl
Guido van Rossum6184c112002-04-16 02:14:04 +0000597 test_email_codecs
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000598 test_gl
599 test_imgfile
600 test_largefile
Guido van Rossum4507ec72003-02-14 19:29:22 +0000601 test_linuxaudiodev
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000602 test_nis
603 test_ntpath
Guido van Rossum4507ec72003-02-14 19:29:22 +0000604 test_ossaudiodev
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000605 test_sunaudiodev
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000606 """,
Jack Jansen49a806e2001-08-28 14:49:00 +0000607 'mac':
Guido van Rossumaa782362001-09-02 03:58:41 +0000608 """
609 test_al
Jack Jansen67975142003-01-08 16:31:11 +0000610 test_atexit
Guido van Rossumaa782362001-09-02 03:58:41 +0000611 test_bsddb
Jack Jansen67975142003-01-08 16:31:11 +0000612 test_bsddb3
613 test_bz2
Guido van Rossumaa782362001-09-02 03:58:41 +0000614 test_cd
615 test_cl
616 test_commands
617 test_crypt
Jack Jansenb3be2162001-11-30 14:16:36 +0000618 test_curses
Guido van Rossumaa782362001-09-02 03:58:41 +0000619 test_dbm
620 test_dl
Jack Jansen67975142003-01-08 16:31:11 +0000621 test_email_codecs
Guido van Rossumaa782362001-09-02 03:58:41 +0000622 test_fcntl
623 test_fork1
624 test_gl
625 test_grp
Jack Jansenc4d6bdd2003-03-07 15:38:11 +0000626 test_ioctl
Guido van Rossumaa782362001-09-02 03:58:41 +0000627 test_imgfile
628 test_largefile
629 test_linuxaudiodev
630 test_locale
631 test_mmap
Jack Jansen67975142003-01-08 16:31:11 +0000632 test_mpz
Guido van Rossumaa782362001-09-02 03:58:41 +0000633 test_nis
634 test_ntpath
635 test_openpty
Jack Jansen67975142003-01-08 16:31:11 +0000636 test_ossaudiodev
Guido van Rossumaa782362001-09-02 03:58:41 +0000637 test_poll
Jack Jansen67975142003-01-08 16:31:11 +0000638 test_popen
Guido van Rossumaa782362001-09-02 03:58:41 +0000639 test_popen2
Jack Jansen5bb97e62003-02-21 22:33:55 +0000640 test_posix
Guido van Rossumaa782362001-09-02 03:58:41 +0000641 test_pty
642 test_pwd
Jack Jansen67975142003-01-08 16:31:11 +0000643 test_resource
Guido van Rossumaa782362001-09-02 03:58:41 +0000644 test_signal
Guido van Rossumaa782362001-09-02 03:58:41 +0000645 test_sunaudiodev
646 test_sundry
Jack Jansenc4d6bdd2003-03-07 15:38:11 +0000647 test_tarfile
Guido van Rossumaa782362001-09-02 03:58:41 +0000648 test_timing
Guido van Rossumaa782362001-09-02 03:58:41 +0000649 """,
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000650 'unixware7':
Martin v. Löwis0ace3262001-09-05 14:38:48 +0000651 """
652 test_al
653 test_bsddb
654 test_cd
655 test_cl
656 test_dl
657 test_gl
658 test_imgfile
659 test_largefile
660 test_linuxaudiodev
661 test_minidom
662 test_nis
663 test_ntpath
664 test_openpty
665 test_pyexpat
666 test_sax
Martin v. Löwis0ace3262001-09-05 14:38:48 +0000667 test_sunaudiodev
668 test_sundry
Martin v. Löwis0ace3262001-09-05 14:38:48 +0000669 """,
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000670 'openunix8':
671 """
672 test_al
673 test_bsddb
674 test_cd
675 test_cl
676 test_dl
677 test_gl
678 test_imgfile
679 test_largefile
680 test_linuxaudiodev
681 test_minidom
682 test_nis
683 test_ntpath
684 test_openpty
685 test_pyexpat
686 test_sax
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000687 test_sunaudiodev
688 test_sundry
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000689 """,
690 'sco_sv3':
691 """
692 test_al
693 test_asynchat
694 test_bsddb
695 test_cd
696 test_cl
697 test_dl
698 test_fork1
699 test_gettext
700 test_gl
701 test_imgfile
702 test_largefile
703 test_linuxaudiodev
704 test_locale
705 test_minidom
706 test_nis
707 test_ntpath
708 test_openpty
709 test_pyexpat
710 test_queue
711 test_sax
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000712 test_sunaudiodev
713 test_sundry
714 test_thread
715 test_threaded_import
716 test_threadedtempfile
717 test_threading
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000718 """,
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000719 'riscos':
720 """
721 test_al
722 test_asynchat
723 test_bsddb
724 test_cd
725 test_cl
726 test_commands
727 test_crypt
728 test_dbm
729 test_dl
730 test_fcntl
731 test_fork1
732 test_gdbm
733 test_gl
734 test_grp
735 test_imgfile
736 test_largefile
737 test_linuxaudiodev
738 test_locale
739 test_mmap
740 test_nis
741 test_ntpath
742 test_openpty
743 test_poll
744 test_popen2
745 test_pty
746 test_pwd
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000747 test_strop
748 test_sunaudiodev
749 test_sundry
750 test_thread
751 test_threaded_import
752 test_threadedtempfile
753 test_threading
754 test_timing
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000755 """,
Jack Jansen8a97f4a2001-12-05 23:27:32 +0000756 'darwin':
Jack Jansen398c2362001-12-02 21:41:36 +0000757 """
758 test_al
Jack Jansenacda3392002-12-30 23:03:13 +0000759 test_bsddb
Guido van Rossum9d427002002-12-03 10:24:56 +0000760 test_bsddb3
Jack Jansen398c2362001-12-02 21:41:36 +0000761 test_cd
762 test_cl
763 test_curses
764 test_dl
Guido van Rossum9d427002002-12-03 10:24:56 +0000765 test_email_codecs
Jack Jansen398c2362001-12-02 21:41:36 +0000766 test_gdbm
767 test_gl
768 test_imgfile
769 test_largefile
770 test_linuxaudiodev
Jack Jansenacda3392002-12-30 23:03:13 +0000771 test_locale
Jack Jansen398c2362001-12-02 21:41:36 +0000772 test_minidom
Guido van Rossum9d427002002-12-03 10:24:56 +0000773 test_mpz
Jack Jansen398c2362001-12-02 21:41:36 +0000774 test_nis
775 test_ntpath
Jack Jansenacda3392002-12-30 23:03:13 +0000776 test_ossaudiodev
Jack Jansen398c2362001-12-02 21:41:36 +0000777 test_poll
Jack Jansen398c2362001-12-02 21:41:36 +0000778 test_sunaudiodev
Jack Jansen398c2362001-12-02 21:41:36 +0000779 """,
Guido van Rossum11c3f092002-07-17 15:08:24 +0000780 'sunos5':
781 """
782 test_al
783 test_bsddb
784 test_cd
785 test_cl
786 test_curses
787 test_dbm
788 test_email_codecs
789 test_gdbm
790 test_gl
791 test_gzip
792 test_imgfile
793 test_linuxaudiodev
794 test_mpz
795 test_openpty
Guido van Rossum11c3f092002-07-17 15:08:24 +0000796 test_zipfile
797 test_zlib
Jeremy Hyltoned375e12002-07-17 15:56:55 +0000798 """,
Skip Montanarob3230212002-03-15 02:54:03 +0000799 'hp-ux11':
800 """
801 test_al
802 test_bsddb
803 test_cd
804 test_cl
805 test_curses
806 test_dl
807 test_gdbm
808 test_gl
809 test_gzip
810 test_imgfile
811 test_largefile
812 test_linuxaudiodev
813 test_locale
814 test_minidom
815 test_nis
816 test_ntpath
817 test_openpty
818 test_pyexpat
819 test_sax
Skip Montanarob3230212002-03-15 02:54:03 +0000820 test_sunaudiodev
Skip Montanarob3230212002-03-15 02:54:03 +0000821 test_zipfile
822 test_zlib
823 """,
Martin v. Löwisf90ae202002-06-11 06:22:31 +0000824 'atheos':
Tim Petersc411dba2002-07-16 21:35:23 +0000825 """
826 test_al
827 test_cd
828 test_cl
829 test_curses
830 test_dl
831 test_email_codecs
832 test_gdbm
833 test_gl
834 test_imgfile
835 test_largefile
836 test_linuxaudiodev
837 test_locale
838 test_mhlib
839 test_mmap
840 test_mpz
841 test_nis
842 test_poll
843 test_popen2
844 test_resource
Tim Petersc411dba2002-07-16 21:35:23 +0000845 test_sunaudiodev
Tim Petersc411dba2002-07-16 21:35:23 +0000846 """,
Jason Tishler25115942002-12-05 15:18:15 +0000847 'cygwin':
848 """
849 test_al
Tim Petersb0f89e02002-12-05 17:20:25 +0000850 test_bsddb3
Jason Tishler25115942002-12-05 15:18:15 +0000851 test_cd
852 test_cl
853 test_curses
854 test_dbm
855 test_email_codecs
856 test_gl
857 test_imgfile
858 test_largefile
859 test_linuxaudiodev
860 test_locale
861 test_mpz
862 test_nis
Jason Tishler5c4ded22003-02-05 16:46:01 +0000863 test_ossaudiodev
Jason Tishler25115942002-12-05 15:18:15 +0000864 test_socketserver
865 test_sunaudiodev
Jason Tishler25115942002-12-05 15:18:15 +0000866 """,
Andrew MacIntyrefd07e7d2002-12-31 11:26:50 +0000867 'os2emx':
868 """
869 test_al
870 test_audioop
871 test_bsddb3
872 test_cd
873 test_cl
874 test_commands
875 test_curses
876 test_dl
877 test_email_codecs
878 test_gl
879 test_imgfile
880 test_largefile
881 test_linuxaudiodev
882 test_mhlib
883 test_mmap
884 test_nis
885 test_openpty
886 test_ossaudiodev
887 test_pty
888 test_resource
889 test_signal
890 test_sunaudiodev
Andrew MacIntyrefd07e7d2002-12-31 11:26:50 +0000891 """,
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000892}
893
Tim Petersb5b7b782001-08-12 01:20:39 +0000894class _ExpectedSkips:
895 def __init__(self):
Tim Peters2a182db2002-10-09 01:07:11 +0000896 import os.path
Tim Peters1b445d32002-11-24 18:53:11 +0000897 from test import test_normalization
Tim Petersb4ee4eb2002-12-04 03:26:57 +0000898 from test import test_socket_ssl
Neal Norwitz55b61d22003-02-28 19:57:03 +0000899 from test import test_timeout
Tim Peters1b445d32002-11-24 18:53:11 +0000900
Tim Peters7c7efe92002-08-23 17:55:54 +0000901 self.valid = False
Tim Petersde14a302002-04-01 05:04:46 +0000902 if sys.platform in _expectations:
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000903 s = _expectations[sys.platform]
Tim Peters7c7efe92002-08-23 17:55:54 +0000904 self.expected = Set(s.split())
Tim Peters1b445d32002-11-24 18:53:11 +0000905
Tim Peters2a182db2002-10-09 01:07:11 +0000906 if not os.path.supports_unicode_filenames:
907 self.expected.add('test_pep277')
Tim Peters1b445d32002-11-24 18:53:11 +0000908
909 if test_normalization.skip_expected:
910 self.expected.add('test_normalization')
911
Tim Petersb4ee4eb2002-12-04 03:26:57 +0000912 if test_socket_ssl.skip_expected:
913 self.expected.add('test_socket_ssl')
914
Neal Norwitz55b61d22003-02-28 19:57:03 +0000915 if test_timeout.skip_expected:
916 self.expected.add('test_timeout')
917
Jack Jansen6afc5e02003-01-29 16:24:16 +0000918 if not sys.platform in ("mac", "darwin"):
Neal Norwitz7035c982003-03-29 22:01:17 +0000919 MAC_ONLY = ["test_macostools", "test_macfs", "test_aepack",
920 "test_plistlib", "test_scriptpackages"]
921 for skip in MAC_ONLY:
922 self.expected.add(skip)
Tim Petersecd79eb2003-01-29 00:35:32 +0000923
924 if sys.platform != "win32":
Neal Norwitz7035c982003-03-29 22:01:17 +0000925 WIN_ONLY = ["test_unicode_file", "test_winreg",
926 "test_winsound"]
927 for skip in WIN_ONLY:
928 self.expected.add(skip)
Tim Petersf2715e02003-02-19 02:35:07 +0000929
Tim Peters7c7efe92002-08-23 17:55:54 +0000930 self.valid = True
Tim Petersb5b7b782001-08-12 01:20:39 +0000931
932 def isvalid(self):
933 "Return true iff _ExpectedSkips knows about the current platform."
934 return self.valid
935
936 def getexpected(self):
937 """Return set of test names we expect to skip on current platform.
938
939 self.isvalid() must be true.
940 """
941
942 assert self.isvalid()
943 return self.expected
944
Guido van Rossum152494a1996-12-20 03:12:20 +0000945if __name__ == '__main__':
Barry Warsaw408b6d32002-07-30 23:27:12 +0000946 # Remove regrtest.py's own directory from the module search path. This
947 # prevents relative imports from working, and relative imports will screw
948 # up the testing framework. E.g. if both test.test_support and
949 # test_support are imported, they will not contain the same globals, and
950 # much of the testing framework relies on the globals in the
951 # test.test_support module.
952 mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0])))
953 i = pathlen = len(sys.path)
954 while i >= 0:
955 i -= 1
956 if os.path.abspath(os.path.normpath(sys.path[i])) == mydir:
957 del sys.path[i]
958 if len(sys.path) == pathlen:
959 print 'Could not find %r in sys.path to remove it' % mydir
Barry Warsaw08fca522001-08-20 22:33:46 +0000960 main()