blob: 4ec2855271a71646b61edfa79a4edd689177574e [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
Tim Petersa86f0c12001-09-18 02:18:57 +0000587 test_socketserver
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000588 test_sunaudiodev
589 test_timing
590 """,
591 'linux2':
592 """
593 test_al
594 test_cd
595 test_cl
Guido van Rossumf66dacd2001-10-23 15:10:55 +0000596 test_curses
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000597 test_dl
Guido van Rossum6184c112002-04-16 02:14:04 +0000598 test_email_codecs
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000599 test_gl
600 test_imgfile
601 test_largefile
Guido van Rossum4507ec72003-02-14 19:29:22 +0000602 test_linuxaudiodev
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000603 test_nis
604 test_ntpath
Guido van Rossum4507ec72003-02-14 19:29:22 +0000605 test_ossaudiodev
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000606 test_socketserver
607 test_sunaudiodev
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000608 """,
Jack Jansen49a806e2001-08-28 14:49:00 +0000609 'mac':
Guido van Rossumaa782362001-09-02 03:58:41 +0000610 """
611 test_al
Jack Jansen67975142003-01-08 16:31:11 +0000612 test_atexit
Guido van Rossumaa782362001-09-02 03:58:41 +0000613 test_bsddb
Jack Jansen67975142003-01-08 16:31:11 +0000614 test_bsddb3
615 test_bz2
Guido van Rossumaa782362001-09-02 03:58:41 +0000616 test_cd
617 test_cl
618 test_commands
619 test_crypt
Jack Jansenb3be2162001-11-30 14:16:36 +0000620 test_curses
Guido van Rossumaa782362001-09-02 03:58:41 +0000621 test_dbm
622 test_dl
Jack Jansen67975142003-01-08 16:31:11 +0000623 test_email_codecs
Guido van Rossumaa782362001-09-02 03:58:41 +0000624 test_fcntl
625 test_fork1
626 test_gl
627 test_grp
Jack Jansenc4d6bdd2003-03-07 15:38:11 +0000628 test_ioctl
Guido van Rossumaa782362001-09-02 03:58:41 +0000629 test_imgfile
630 test_largefile
631 test_linuxaudiodev
632 test_locale
633 test_mmap
Jack Jansen67975142003-01-08 16:31:11 +0000634 test_mpz
Guido van Rossumaa782362001-09-02 03:58:41 +0000635 test_nis
636 test_ntpath
637 test_openpty
Jack Jansen67975142003-01-08 16:31:11 +0000638 test_ossaudiodev
Guido van Rossumaa782362001-09-02 03:58:41 +0000639 test_poll
Jack Jansen67975142003-01-08 16:31:11 +0000640 test_popen
Guido van Rossumaa782362001-09-02 03:58:41 +0000641 test_popen2
Jack Jansen5bb97e62003-02-21 22:33:55 +0000642 test_posix
Guido van Rossumaa782362001-09-02 03:58:41 +0000643 test_pty
644 test_pwd
Jack Jansen67975142003-01-08 16:31:11 +0000645 test_resource
Guido van Rossumaa782362001-09-02 03:58:41 +0000646 test_signal
Guido van Rossumaa782362001-09-02 03:58:41 +0000647 test_socketserver
648 test_sunaudiodev
649 test_sundry
Jack Jansenc4d6bdd2003-03-07 15:38:11 +0000650 test_tarfile
Guido van Rossumaa782362001-09-02 03:58:41 +0000651 test_timing
Guido van Rossumaa782362001-09-02 03:58:41 +0000652 """,
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000653 'unixware7':
Martin v. Löwis0ace3262001-09-05 14:38:48 +0000654 """
655 test_al
656 test_bsddb
657 test_cd
658 test_cl
659 test_dl
660 test_gl
661 test_imgfile
662 test_largefile
663 test_linuxaudiodev
664 test_minidom
665 test_nis
666 test_ntpath
667 test_openpty
668 test_pyexpat
669 test_sax
670 test_socketserver
671 test_sunaudiodev
672 test_sundry
Martin v. Löwis0ace3262001-09-05 14:38:48 +0000673 """,
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000674 'openunix8':
675 """
676 test_al
677 test_bsddb
678 test_cd
679 test_cl
680 test_dl
681 test_gl
682 test_imgfile
683 test_largefile
684 test_linuxaudiodev
685 test_minidom
686 test_nis
687 test_ntpath
688 test_openpty
689 test_pyexpat
690 test_sax
691 test_socketserver
692 test_sunaudiodev
693 test_sundry
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000694 """,
695 'sco_sv3':
696 """
697 test_al
698 test_asynchat
699 test_bsddb
700 test_cd
701 test_cl
702 test_dl
703 test_fork1
704 test_gettext
705 test_gl
706 test_imgfile
707 test_largefile
708 test_linuxaudiodev
709 test_locale
710 test_minidom
711 test_nis
712 test_ntpath
713 test_openpty
714 test_pyexpat
715 test_queue
716 test_sax
717 test_socketserver
718 test_sunaudiodev
719 test_sundry
720 test_thread
721 test_threaded_import
722 test_threadedtempfile
723 test_threading
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000724 """,
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000725 'riscos':
726 """
727 test_al
728 test_asynchat
729 test_bsddb
730 test_cd
731 test_cl
732 test_commands
733 test_crypt
734 test_dbm
735 test_dl
736 test_fcntl
737 test_fork1
738 test_gdbm
739 test_gl
740 test_grp
741 test_imgfile
742 test_largefile
743 test_linuxaudiodev
744 test_locale
745 test_mmap
746 test_nis
747 test_ntpath
748 test_openpty
749 test_poll
750 test_popen2
751 test_pty
752 test_pwd
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000753 test_socketserver
754 test_strop
755 test_sunaudiodev
756 test_sundry
757 test_thread
758 test_threaded_import
759 test_threadedtempfile
760 test_threading
761 test_timing
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000762 """,
Jack Jansen8a97f4a2001-12-05 23:27:32 +0000763 'darwin':
Jack Jansen398c2362001-12-02 21:41:36 +0000764 """
765 test_al
Jack Jansenacda3392002-12-30 23:03:13 +0000766 test_bsddb
Guido van Rossum9d427002002-12-03 10:24:56 +0000767 test_bsddb3
Jack Jansen398c2362001-12-02 21:41:36 +0000768 test_cd
769 test_cl
770 test_curses
771 test_dl
Guido van Rossum9d427002002-12-03 10:24:56 +0000772 test_email_codecs
Jack Jansen398c2362001-12-02 21:41:36 +0000773 test_gdbm
774 test_gl
775 test_imgfile
776 test_largefile
777 test_linuxaudiodev
Jack Jansenacda3392002-12-30 23:03:13 +0000778 test_locale
Jack Jansen398c2362001-12-02 21:41:36 +0000779 test_minidom
Guido van Rossum9d427002002-12-03 10:24:56 +0000780 test_mpz
Jack Jansen398c2362001-12-02 21:41:36 +0000781 test_nis
782 test_ntpath
Jack Jansenacda3392002-12-30 23:03:13 +0000783 test_ossaudiodev
Jack Jansen398c2362001-12-02 21:41:36 +0000784 test_poll
Jack Jansenf839c272001-12-14 21:28:53 +0000785 test_socketserver
Jack Jansen398c2362001-12-02 21:41:36 +0000786 test_sunaudiodev
Jack Jansen398c2362001-12-02 21:41:36 +0000787 """,
Guido van Rossum11c3f092002-07-17 15:08:24 +0000788 'sunos5':
789 """
790 test_al
791 test_bsddb
792 test_cd
793 test_cl
794 test_curses
795 test_dbm
796 test_email_codecs
797 test_gdbm
798 test_gl
799 test_gzip
800 test_imgfile
801 test_linuxaudiodev
802 test_mpz
803 test_openpty
Guido van Rossum11c3f092002-07-17 15:08:24 +0000804 test_socketserver
Guido van Rossum11c3f092002-07-17 15:08:24 +0000805 test_zipfile
806 test_zlib
Jeremy Hyltoned375e12002-07-17 15:56:55 +0000807 """,
Skip Montanarob3230212002-03-15 02:54:03 +0000808 'hp-ux11':
809 """
810 test_al
811 test_bsddb
812 test_cd
813 test_cl
814 test_curses
815 test_dl
816 test_gdbm
817 test_gl
818 test_gzip
819 test_imgfile
820 test_largefile
821 test_linuxaudiodev
822 test_locale
823 test_minidom
824 test_nis
825 test_ntpath
826 test_openpty
827 test_pyexpat
828 test_sax
Skip Montanarob3230212002-03-15 02:54:03 +0000829 test_socketserver
830 test_sunaudiodev
Skip Montanarob3230212002-03-15 02:54:03 +0000831 test_zipfile
832 test_zlib
833 """,
Martin v. Löwisf90ae202002-06-11 06:22:31 +0000834 'atheos':
Tim Petersc411dba2002-07-16 21:35:23 +0000835 """
836 test_al
837 test_cd
838 test_cl
839 test_curses
840 test_dl
841 test_email_codecs
842 test_gdbm
843 test_gl
844 test_imgfile
845 test_largefile
846 test_linuxaudiodev
847 test_locale
848 test_mhlib
849 test_mmap
850 test_mpz
851 test_nis
852 test_poll
853 test_popen2
854 test_resource
Tim Petersc411dba2002-07-16 21:35:23 +0000855 test_socketserver
856 test_sunaudiodev
Tim Petersc411dba2002-07-16 21:35:23 +0000857 """,
Jason Tishler25115942002-12-05 15:18:15 +0000858 'cygwin':
859 """
860 test_al
Tim Petersb0f89e02002-12-05 17:20:25 +0000861 test_bsddb3
Jason Tishler25115942002-12-05 15:18:15 +0000862 test_cd
863 test_cl
864 test_curses
865 test_dbm
866 test_email_codecs
867 test_gl
868 test_imgfile
869 test_largefile
870 test_linuxaudiodev
871 test_locale
872 test_mpz
873 test_nis
Jason Tishler5c4ded22003-02-05 16:46:01 +0000874 test_ossaudiodev
Jason Tishler25115942002-12-05 15:18:15 +0000875 test_socketserver
876 test_sunaudiodev
Jason Tishler25115942002-12-05 15:18:15 +0000877 """,
Andrew MacIntyrefd07e7d2002-12-31 11:26:50 +0000878 'os2emx':
879 """
880 test_al
881 test_audioop
882 test_bsddb3
883 test_cd
884 test_cl
885 test_commands
886 test_curses
887 test_dl
888 test_email_codecs
889 test_gl
890 test_imgfile
891 test_largefile
892 test_linuxaudiodev
893 test_mhlib
894 test_mmap
895 test_nis
896 test_openpty
897 test_ossaudiodev
898 test_pty
899 test_resource
900 test_signal
901 test_sunaudiodev
Andrew MacIntyrefd07e7d2002-12-31 11:26:50 +0000902 """,
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000903}
904
Tim Petersb5b7b782001-08-12 01:20:39 +0000905class _ExpectedSkips:
906 def __init__(self):
Tim Peters2a182db2002-10-09 01:07:11 +0000907 import os.path
Tim Peters1b445d32002-11-24 18:53:11 +0000908 from test import test_normalization
Tim Petersb4ee4eb2002-12-04 03:26:57 +0000909 from test import test_socket_ssl
Neal Norwitz55b61d22003-02-28 19:57:03 +0000910 from test import test_timeout
Tim Peters1b445d32002-11-24 18:53:11 +0000911
Tim Peters7c7efe92002-08-23 17:55:54 +0000912 self.valid = False
Tim Petersde14a302002-04-01 05:04:46 +0000913 if sys.platform in _expectations:
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000914 s = _expectations[sys.platform]
Tim Peters7c7efe92002-08-23 17:55:54 +0000915 self.expected = Set(s.split())
Tim Peters1b445d32002-11-24 18:53:11 +0000916
Tim Peters2a182db2002-10-09 01:07:11 +0000917 if not os.path.supports_unicode_filenames:
918 self.expected.add('test_pep277')
Tim Peters1b445d32002-11-24 18:53:11 +0000919
920 if test_normalization.skip_expected:
921 self.expected.add('test_normalization')
922
Tim Petersb4ee4eb2002-12-04 03:26:57 +0000923 if test_socket_ssl.skip_expected:
924 self.expected.add('test_socket_ssl')
925
Neal Norwitz55b61d22003-02-28 19:57:03 +0000926 if test_timeout.skip_expected:
927 self.expected.add('test_timeout')
928
Jack Jansen6afc5e02003-01-29 16:24:16 +0000929 if not sys.platform in ("mac", "darwin"):
Neal Norwitz7035c982003-03-29 22:01:17 +0000930 MAC_ONLY = ["test_macostools", "test_macfs", "test_aepack",
931 "test_plistlib", "test_scriptpackages"]
932 for skip in MAC_ONLY:
933 self.expected.add(skip)
Tim Petersecd79eb2003-01-29 00:35:32 +0000934
935 if sys.platform != "win32":
Neal Norwitz7035c982003-03-29 22:01:17 +0000936 WIN_ONLY = ["test_unicode_file", "test_winreg",
937 "test_winsound"]
938 for skip in WIN_ONLY:
939 self.expected.add(skip)
Tim Petersf2715e02003-02-19 02:35:07 +0000940
Tim Peters7c7efe92002-08-23 17:55:54 +0000941 self.valid = True
Tim Petersb5b7b782001-08-12 01:20:39 +0000942
943 def isvalid(self):
944 "Return true iff _ExpectedSkips knows about the current platform."
945 return self.valid
946
947 def getexpected(self):
948 """Return set of test names we expect to skip on current platform.
949
950 self.isvalid() must be true.
951 """
952
953 assert self.isvalid()
954 return self.expected
955
Guido van Rossum152494a1996-12-20 03:12:20 +0000956if __name__ == '__main__':
Barry Warsaw408b6d32002-07-30 23:27:12 +0000957 # Remove regrtest.py's own directory from the module search path. This
958 # prevents relative imports from working, and relative imports will screw
959 # up the testing framework. E.g. if both test.test_support and
960 # test_support are imported, they will not contain the same globals, and
961 # much of the testing framework relies on the globals in the
962 # test.test_support module.
963 mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0])))
964 i = pathlen = len(sys.path)
965 while i >= 0:
966 i -= 1
967 if os.path.abspath(os.path.normpath(sys.path[i])) == mydir:
968 del sys.path[i]
969 if len(sys.path) == pathlen:
970 print 'Could not find %r in sys.path to remove it' % mydir
Barry Warsaw08fca522001-08-20 22:33:46 +0000971 main()