blob: 4a8bc755c67230ecdfc5bb8916901de459b141a5 [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
Andrew M. Kuchling2158df02001-10-22 15:26:09 +000049 curses - Tests that use curses and will modify the terminal's
50 state and output modes.
Tim Peters1633a2e2001-10-30 05:56:40 +000051
Guido van Rossum9e9d4f82002-06-07 15:17:03 +000052 largefile - It is okay to run some test that may create huge
53 files. These tests can take a long time and may
54 consume >2GB of disk space temporarily.
Barry Warsaw08fca522001-08-20 22:33:46 +000055
Guido van Rossum9e9d4f82002-06-07 15:17:03 +000056 network - It is okay to run tests that use external network
57 resource, e.g. testing SSL support for sockets.
Martin v. Löwis1c6b1a22002-11-19 17:47:07 +000058
59 bsddb - It is okay to run the bsddb testsuite, which takes
60 a long time to complete.
Fred Drake4dd0f7e2002-11-26 21:44:56 +000061
62To enable all resources except one, use '-uall,-<resource>'. For
63example, to run all the tests except for the bsddb tests, give the
64option '-uall,-bsddb'.
Guido van Rossum152494a1996-12-20 03:12:20 +000065"""
66
67import sys
Guido van Rossum152494a1996-12-20 03:12:20 +000068import os
69import getopt
Guido van Rossum9e48b271997-07-16 01:56:13 +000070import traceback
Skip Montanaroab1c7912000-06-30 16:39:27 +000071import random
Fred Drakeae1bb172001-05-21 21:08:12 +000072import StringIO
Guido van Rossumdc15c272002-08-12 21:55:51 +000073import warnings
Tim Peters7c7efe92002-08-23 17:55:54 +000074from sets import Set
Guido van Rossumdc15c272002-08-12 21:55:51 +000075
76# I see no other way to suppress these warnings;
77# putting them in test_grammar.py has no effect:
Guido van Rossum88b1def2002-08-14 17:54:48 +000078warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
Guido van Rossumdc15c272002-08-12 21:55:51 +000079 ".*test.test_grammar$")
Guido van Rossumc34c4fc2002-09-19 00:42:16 +000080if sys.maxint > 0x7fffffff:
81 # Also suppress them in <string>, because for 64-bit platforms,
82 # that's where test_grammar.py hides them.
83 warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning,
84 "<string>")
Guido van Rossum152494a1996-12-20 03:12:20 +000085
Guido van Rossumbb484652002-12-02 09:56:21 +000086# MacOSX (a.k.a. Darwin) has a default stack size that is too small
87# for deeply recursive regular expressions. We see this as crashes in
88# the Python test suite when running test_re.py and test_sre.py. The
89# fix is to set the stack limit to 2048.
90# This approach may also be useful for other Unixy platforms that
91# suffer from small default stack limits.
92if sys.platform == 'darwin':
93 try:
94 import resource
95 except ImportError:
96 pass
97 else:
98 soft, hard = resource.getrlimit(resource.RLIMIT_STACK)
99 newsoft = min(hard, max(soft, 1024*2048))
100 resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard))
101
Barry Warsaw04f357c2002-07-23 19:04:11 +0000102from test import test_support
Fred Drake3a15dac2002-04-11 16:39:16 +0000103
Martin v. Löwis1c6b1a22002-11-19 17:47:07 +0000104RESOURCE_NAMES = ('curses', 'largefile', 'network', 'bsddb')
Fred Drake3a15dac2002-04-11 16:39:16 +0000105
106
Barry Warsaw08fca522001-08-20 22:33:46 +0000107def usage(code, msg=''):
108 print __doc__
109 if msg: print msg
110 sys.exit(code)
111
112
Skip Montanaroab1c7912000-06-30 16:39:27 +0000113def main(tests=None, testdir=None, verbose=0, quiet=0, generate=0,
Tim Petersc5000df2002-06-02 21:42:01 +0000114 exclude=0, single=0, randomize=0, fromfile=None, findleaks=0,
Barry Warsaw08fca522001-08-20 22:33:46 +0000115 use_resources=None):
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000116 """Execute a test suite.
117
Thomas Wouters7e474022000-07-16 12:04:32 +0000118 This also parses command-line options and modifies its behavior
Fred Drake004d5e62000-10-23 17:22:08 +0000119 accordingly.
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000120
121 tests -- a list of strings containing test names (optional)
122 testdir -- the directory in which to look for tests (optional)
123
124 Users other than the Python test suite will certainly want to
125 specify testdir; if it's omitted, the directory containing the
Fred Drake004d5e62000-10-23 17:22:08 +0000126 Python test suite is searched for.
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000127
128 If the tests argument is omitted, the tests listed on the
129 command-line will be used. If that's empty, too, then all *.py
130 files beginning with test_ will be used.
Skip Montanaroab1c7912000-06-30 16:39:27 +0000131
Guido van Rossum9e9d4f82002-06-07 15:17:03 +0000132 The other default arguments (verbose, quiet, generate, exclude,
133 single, randomize, findleaks, and use_resources) allow programmers
134 calling main() directly to set the values that would normally be
135 set by flags on the command line.
Barry Warsawa873b032000-08-03 15:50:37 +0000136
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000137 """
Fred Drake004d5e62000-10-23 17:22:08 +0000138
Tim Peters8dee8092001-09-25 20:05:11 +0000139 test_support.record_original_stdout(sys.stdout)
Guido van Rossum152494a1996-12-20 03:12:20 +0000140 try:
Guido van Rossum9e9d4f82002-06-07 15:17:03 +0000141 opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsrf:lu:t:',
Barry Warsaw08fca522001-08-20 22:33:46 +0000142 ['help', 'verbose', 'quiet', 'generate',
Tim Petersc5000df2002-06-02 21:42:01 +0000143 'exclude', 'single', 'random', 'fromfile',
Guido van Rossum9e9d4f82002-06-07 15:17:03 +0000144 'findleaks', 'use=', 'threshold='])
Guido van Rossum152494a1996-12-20 03:12:20 +0000145 except getopt.error, msg:
Barry Warsaw08fca522001-08-20 22:33:46 +0000146 usage(2, msg)
147
148 # Defaults
149 if use_resources is None:
150 use_resources = []
Guido van Rossum152494a1996-12-20 03:12:20 +0000151 for o, a in opts:
Barry Warsaw08fca522001-08-20 22:33:46 +0000152 if o in ('-h', '--help'):
153 usage(0)
154 elif o in ('-v', '--verbose'):
155 verbose += 1
156 elif o in ('-q', '--quiet'):
157 quiet = 1;
158 verbose = 0
159 elif o in ('-g', '--generate'):
160 generate = 1
161 elif o in ('-x', '--exclude'):
162 exclude = 1
163 elif o in ('-s', '--single'):
164 single = 1
165 elif o in ('-r', '--randomize'):
166 randomize = 1
Tim Petersc5000df2002-06-02 21:42:01 +0000167 elif o in ('-f', '--fromfile'):
168 fromfile = a
Barry Warsaw08fca522001-08-20 22:33:46 +0000169 elif o in ('-l', '--findleaks'):
170 findleaks = 1
Guido van Rossum9e9d4f82002-06-07 15:17:03 +0000171 elif o in ('-t', '--threshold'):
172 import gc
173 gc.set_threshold(int(a))
Barry Warsaw08fca522001-08-20 22:33:46 +0000174 elif o in ('-u', '--use'):
Guido van Rossumfe3f6962001-09-06 16:09:41 +0000175 u = [x.lower() for x in a.split(',')]
176 for r in u:
Fred Drake3a15dac2002-04-11 16:39:16 +0000177 if r == 'all':
Fred Drake4dd0f7e2002-11-26 21:44:56 +0000178 use_resources[:] = RESOURCE_NAMES
179 continue
180 remove = False
181 if r[0] == '-':
182 remove = True
183 r = r[1:]
Fred Drake3a15dac2002-04-11 16:39:16 +0000184 if r not in RESOURCE_NAMES:
185 usage(1, 'Invalid -u/--use option: ' + a)
Fred Drake4dd0f7e2002-11-26 21:44:56 +0000186 if remove:
187 if r in use_resources:
188 use_resources.remove(r)
189 elif r not in use_resources:
Andrew MacIntyree41abab2002-04-30 12:11:04 +0000190 use_resources.append(r)
Guido van Rossuma4122201997-08-18 20:08:24 +0000191 if generate and verbose:
Barry Warsaw08fca522001-08-20 22:33:46 +0000192 usage(2, "-g and -v don't go together!")
Tim Petersc5000df2002-06-02 21:42:01 +0000193 if single and fromfile:
194 usage(2, "-s and -f don't go together!")
Barry Warsaw08fca522001-08-20 22:33:46 +0000195
Guido van Rossum152494a1996-12-20 03:12:20 +0000196 good = []
197 bad = []
198 skipped = []
Fred Drake9a0db072003-02-03 15:19:30 +0000199 resource_denieds = []
Barry Warsawe11e3de1999-01-28 19:51:51 +0000200
Neil Schemenauerd569f232000-09-22 15:29:28 +0000201 if findleaks:
Barry Warsawa873b032000-08-03 15:50:37 +0000202 try:
203 import gc
204 except ImportError:
Neil Schemenauer8a00abc2000-10-13 01:32:42 +0000205 print 'No GC available, disabling findleaks.'
Neil Schemenauerd569f232000-09-22 15:29:28 +0000206 findleaks = 0
Barry Warsawa873b032000-08-03 15:50:37 +0000207 else:
Neil Schemenauer8a00abc2000-10-13 01:32:42 +0000208 # Uncomment the line below to report garbage that is not
209 # freeable by reference counting alone. By default only
210 # garbage that is not collectable by the GC is reported.
211 #gc.set_debug(gc.DEBUG_SAVEALL)
Neil Schemenauerd569f232000-09-22 15:29:28 +0000212 found_garbage = []
Barry Warsawa873b032000-08-03 15:50:37 +0000213
Barry Warsawe11e3de1999-01-28 19:51:51 +0000214 if single:
215 from tempfile import gettempdir
216 filename = os.path.join(gettempdir(), 'pynexttest')
217 try:
218 fp = open(filename, 'r')
Eric S. Raymondfc170b12001-02-09 11:51:27 +0000219 next = fp.read().strip()
Barry Warsawe11e3de1999-01-28 19:51:51 +0000220 tests = [next]
221 fp.close()
222 except IOError:
223 pass
Tim Petersc5000df2002-06-02 21:42:01 +0000224
225 if fromfile:
226 tests = []
227 fp = open(fromfile)
228 for line in fp:
229 guts = line.split() # assuming no test has whitespace in its name
230 if guts and not guts[0].startswith('#'):
231 tests.extend(guts)
232 fp.close()
233
234 # Strip .py extensions.
235 if args:
236 args = map(removepy, args)
237 if tests:
238 tests = map(removepy, tests)
239
Guido van Rossum6c74fea1998-08-25 12:29:08 +0000240 stdtests = STDTESTS[:]
241 nottests = NOTTESTS[:]
Guido van Rossum152494a1996-12-20 03:12:20 +0000242 if exclude:
Guido van Rossum6c74fea1998-08-25 12:29:08 +0000243 for arg in args:
244 if arg in stdtests:
245 stdtests.remove(arg)
246 nottests[:0] = args
Guido van Rossum41360a41998-03-26 19:42:58 +0000247 args = []
Guido van Rossum747e1ca1998-08-24 13:48:36 +0000248 tests = tests or args or findtests(testdir, stdtests, nottests)
Barry Warsawe11e3de1999-01-28 19:51:51 +0000249 if single:
250 tests = tests[:1]
Skip Montanaroab1c7912000-06-30 16:39:27 +0000251 if randomize:
252 random.shuffle(tests)
Guido van Rossum41360a41998-03-26 19:42:58 +0000253 test_support.verbose = verbose # Tell tests to be moderately quiet
Barry Warsaw08fca522001-08-20 22:33:46 +0000254 test_support.use_resources = use_resources
Guido van Rossum5796d262000-04-21 21:35:06 +0000255 save_modules = sys.modules.keys()
Guido van Rossum152494a1996-12-20 03:12:20 +0000256 for test in tests:
Guido van Rossum41360a41998-03-26 19:42:58 +0000257 if not quiet:
258 print test
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000259 sys.stdout.flush()
Trent Mickf29f47b2000-08-11 19:02:59 +0000260 ok = runtest(test, generate, verbose, quiet, testdir)
Guido van Rossum41360a41998-03-26 19:42:58 +0000261 if ok > 0:
262 good.append(test)
263 elif ok == 0:
264 bad.append(test)
265 else:
Guido van Rossum41360a41998-03-26 19:42:58 +0000266 skipped.append(test)
Fred Drake9a0db072003-02-03 15:19:30 +0000267 if ok == -2:
268 resource_denieds.append(test)
Neil Schemenauerd569f232000-09-22 15:29:28 +0000269 if findleaks:
270 gc.collect()
271 if gc.garbage:
Neil Schemenauer8a00abc2000-10-13 01:32:42 +0000272 print "Warning: test created", len(gc.garbage),
273 print "uncollectable object(s)."
274 # move the uncollectable objects somewhere so we don't see
275 # them again
Neil Schemenauerd569f232000-09-22 15:29:28 +0000276 found_garbage.extend(gc.garbage)
277 del gc.garbage[:]
Guido van Rossum5796d262000-04-21 21:35:06 +0000278 # Unload the newly imported modules (best effort finalization)
279 for module in sys.modules.keys():
Guido van Rossum51931142000-05-05 14:27:39 +0000280 if module not in save_modules and module.startswith("test."):
Guido van Rossum5796d262000-04-21 21:35:06 +0000281 test_support.unload(module)
Jeremy Hylton7a1ea0e2001-10-17 13:45:28 +0000282
283 # The lists won't be sorted if running with -r
284 good.sort()
285 bad.sort()
286 skipped.sort()
Tim Peterse0c446b2001-10-18 21:57:37 +0000287
Guido van Rossum152494a1996-12-20 03:12:20 +0000288 if good and not quiet:
Guido van Rossum41360a41998-03-26 19:42:58 +0000289 if not bad and not skipped and len(good) > 1:
290 print "All",
291 print count(len(good), "test"), "OK."
Tim Peters1a4d77b2000-12-30 22:21:22 +0000292 if verbose:
Barry Warsaw408b6d32002-07-30 23:27:12 +0000293 print "CAUTION: stdout isn't compared in verbose mode:"
294 print "a test that passes in verbose mode may fail without it."
Guido van Rossum152494a1996-12-20 03:12:20 +0000295 if bad:
Tim Petersa45da922001-08-12 03:45:50 +0000296 print count(len(bad), "test"), "failed:"
297 printlist(bad)
Guido van Rossum152494a1996-12-20 03:12:20 +0000298 if skipped and not quiet:
Tim Petersa45da922001-08-12 03:45:50 +0000299 print count(len(skipped), "test"), "skipped:"
300 printlist(skipped)
Barry Warsawe11e3de1999-01-28 19:51:51 +0000301
Tim Petersb5b7b782001-08-12 01:20:39 +0000302 e = _ExpectedSkips()
Tim Petersa2be2d62001-08-12 02:01:09 +0000303 plat = sys.platform
Tim Petersb5b7b782001-08-12 01:20:39 +0000304 if e.isvalid():
Fred Drake9a0db072003-02-03 15:19:30 +0000305 surprise = Set(skipped) - e.getexpected() - Set(resource_denieds)
Tim Petersb5b7b782001-08-12 01:20:39 +0000306 if surprise:
307 print count(len(surprise), "skip"), \
Tim Petersa45da922001-08-12 03:45:50 +0000308 "unexpected on", plat + ":"
309 printlist(surprise)
Tim Petersb5b7b782001-08-12 01:20:39 +0000310 else:
311 print "Those skips are all expected on", plat + "."
312 else:
313 print "Ask someone to teach regrtest.py about which tests are"
314 print "expected to get skipped on", plat + "."
315
Barry Warsawe11e3de1999-01-28 19:51:51 +0000316 if single:
317 alltests = findtests(testdir, stdtests, nottests)
318 for i in range(len(alltests)):
319 if tests[0] == alltests[i]:
320 if i == len(alltests) - 1:
321 os.unlink(filename)
322 else:
323 fp = open(filename, 'w')
324 fp.write(alltests[i+1] + '\n')
325 fp.close()
326 break
327 else:
328 os.unlink(filename)
329
Barry Warsaw08fca522001-08-20 22:33:46 +0000330 sys.exit(len(bad) > 0)
331
Guido van Rossum152494a1996-12-20 03:12:20 +0000332
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000333STDTESTS = [
Guido van Rossum152494a1996-12-20 03:12:20 +0000334 'test_grammar',
335 'test_opcodes',
336 'test_operations',
337 'test_builtin',
338 'test_exceptions',
339 'test_types',
340 ]
341
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000342NOTTESTS = [
Guido van Rossum152494a1996-12-20 03:12:20 +0000343 'test_support',
Jeremy Hylton62e2c7e2001-02-28 17:48:06 +0000344 'test_future1',
345 'test_future2',
Jeremy Hylton8471a352001-08-20 20:33:42 +0000346 'test_future3',
Guido van Rossum152494a1996-12-20 03:12:20 +0000347 ]
348
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000349def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
Guido van Rossum152494a1996-12-20 03:12:20 +0000350 """Return a list of all applicable test modules."""
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000351 if not testdir: testdir = findtestdir()
Guido van Rossum152494a1996-12-20 03:12:20 +0000352 names = os.listdir(testdir)
353 tests = []
354 for name in names:
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000355 if name[:5] == "test_" and name[-3:] == os.extsep+"py":
Guido van Rossum41360a41998-03-26 19:42:58 +0000356 modname = name[:-3]
357 if modname not in stdtests and modname not in nottests:
358 tests.append(modname)
Guido van Rossum152494a1996-12-20 03:12:20 +0000359 tests.sort()
360 return stdtests + tests
361
Trent Mickf29f47b2000-08-11 19:02:59 +0000362def runtest(test, generate, verbose, quiet, testdir = None):
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000363 """Run a single test.
364 test -- the name of the test
365 generate -- if true, generate output, instead of running the test
366 and comparing it to a previously created output file
367 verbose -- if true, print more messages
Trent Mickf29f47b2000-08-11 19:02:59 +0000368 quiet -- if true, don't print 'skipped' messages (probably redundant)
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000369 testdir -- test directory
370 """
Guido van Rossum152494a1996-12-20 03:12:20 +0000371 test_support.unload(test)
Guido van Rossum6fd83b71998-08-01 17:04:08 +0000372 if not testdir: testdir = findtestdir()
Guido van Rossum152494a1996-12-20 03:12:20 +0000373 outputdir = os.path.join(testdir, "output")
374 outputfile = os.path.join(outputdir, test)
Tim Peters9390cc12001-09-28 20:14:46 +0000375 if verbose:
Guido van Rossum41360a41998-03-26 19:42:58 +0000376 cfp = None
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000377 else:
Fred Drake88a56852001-09-28 20:16:30 +0000378 cfp = StringIO.StringIO()
Guido van Rossum152494a1996-12-20 03:12:20 +0000379 try:
Tim Peters342ca752001-09-25 19:13:20 +0000380 save_stdout = sys.stdout
Guido van Rossum41360a41998-03-26 19:42:58 +0000381 try:
382 if cfp:
383 sys.stdout = cfp
384 print test # Output file starts with test name
Barry Warsaw408b6d32002-07-30 23:27:12 +0000385 if test.startswith('test.'):
386 abstest = test
387 else:
388 # Always import it from the test package
389 abstest = 'test.' + test
390 the_package = __import__(abstest, globals(), locals(), [])
391 the_module = getattr(the_package, test)
Tim Petersd9742212001-05-22 18:28:25 +0000392 # Most tests run to completion simply as a side-effect of
393 # being imported. For the benefit of tests that can't run
394 # that way (like test_threaded_import), explicitly invoke
395 # their test_main() function (if it exists).
396 indirect_test = getattr(the_module, "test_main", None)
397 if indirect_test is not None:
398 indirect_test()
Guido van Rossum41360a41998-03-26 19:42:58 +0000399 finally:
Tim Peters342ca752001-09-25 19:13:20 +0000400 sys.stdout = save_stdout
Fred Drake9a0db072003-02-03 15:19:30 +0000401 except test_support.ResourceDenied, msg:
402 if not quiet:
403 print test, "skipped --", msg
404 sys.stdout.flush()
405 return -2
Thomas Wouters3af826e2000-08-04 13:17:51 +0000406 except (ImportError, test_support.TestSkipped), msg:
Trent Mickf29f47b2000-08-11 19:02:59 +0000407 if not quiet:
Fred Drakede4742b2002-10-17 20:36:08 +0000408 print test, "skipped --", msg
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000409 sys.stdout.flush()
Guido van Rossum41360a41998-03-26 19:42:58 +0000410 return -1
Fred Drakefe5c22a2000-08-18 16:04:05 +0000411 except KeyboardInterrupt:
412 raise
Guido van Rossum152494a1996-12-20 03:12:20 +0000413 except test_support.TestFailed, msg:
Guido van Rossum41360a41998-03-26 19:42:58 +0000414 print "test", test, "failed --", msg
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000415 sys.stdout.flush()
Guido van Rossum41360a41998-03-26 19:42:58 +0000416 return 0
Guido van Rossum9e48b271997-07-16 01:56:13 +0000417 except:
Guido van Rossum41360a41998-03-26 19:42:58 +0000418 type, value = sys.exc_info()[:2]
Fred Drake27c4b392000-08-23 20:34:40 +0000419 print "test", test, "crashed --", str(type) + ":", value
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000420 sys.stdout.flush()
Guido van Rossum41360a41998-03-26 19:42:58 +0000421 if verbose:
422 traceback.print_exc(file=sys.stdout)
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000423 sys.stdout.flush()
Guido van Rossum41360a41998-03-26 19:42:58 +0000424 return 0
Guido van Rossum152494a1996-12-20 03:12:20 +0000425 else:
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000426 if not cfp:
427 return 1
428 output = cfp.getvalue()
Fred Drakee51fe8d2001-05-29 17:10:51 +0000429 if generate:
Fred Drakee51fe8d2001-05-29 17:10:51 +0000430 if output == test + "\n":
431 if os.path.exists(outputfile):
432 # Write it since it already exists (and the contents
433 # may have changed), but let the user know it isn't
434 # needed:
Fred Drakee51fe8d2001-05-29 17:10:51 +0000435 print "output file", outputfile, \
436 "is no longer needed; consider removing it"
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000437 else:
438 # We don't need it, so don't create it.
439 return 1
440 fp = open(outputfile, "w")
441 fp.write(output)
442 fp.close()
443 return 1
444 if os.path.exists(outputfile):
445 fp = open(outputfile, "r")
446 expected = fp.read()
447 fp.close()
448 else:
449 expected = test + "\n"
450 if output == expected:
451 return 1
452 print "test", test, "produced unexpected output:"
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000453 sys.stdout.flush()
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000454 reportdiff(expected, output)
Guido van Rossum3cda93e2002-09-13 21:28:03 +0000455 sys.stdout.flush()
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000456 return 0
457
458def reportdiff(expected, output):
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000459 import difflib
Tim Petersc377b162001-09-22 05:31:03 +0000460 print "*" * 70
461 a = expected.splitlines(1)
462 b = output.splitlines(1)
Guido van Rossumcf691932001-09-21 21:06:22 +0000463 sm = difflib.SequenceMatcher(a=a, b=b)
464 tuples = sm.get_opcodes()
Tim Petersc377b162001-09-22 05:31:03 +0000465
Guido van Rossumcf691932001-09-21 21:06:22 +0000466 def pair(x0, x1):
Tim Petersc377b162001-09-22 05:31:03 +0000467 # x0:x1 are 0-based slice indices; convert to 1-based line indices.
Guido van Rossumcf691932001-09-21 21:06:22 +0000468 x0 += 1
469 if x0 >= x1:
Tim Petersc377b162001-09-22 05:31:03 +0000470 return "line " + str(x0)
Guido van Rossumcf691932001-09-21 21:06:22 +0000471 else:
Tim Petersc377b162001-09-22 05:31:03 +0000472 return "lines %d-%d" % (x0, x1)
473
Guido van Rossumcf691932001-09-21 21:06:22 +0000474 for op, a0, a1, b0, b1 in tuples:
475 if op == 'equal':
476 pass
Tim Petersc377b162001-09-22 05:31:03 +0000477
Guido van Rossumcf691932001-09-21 21:06:22 +0000478 elif op == 'delete':
Tim Petersc377b162001-09-22 05:31:03 +0000479 print "***", pair(a0, a1), "of expected output missing:"
Guido van Rossumcf691932001-09-21 21:06:22 +0000480 for line in a[a0:a1]:
Tim Petersc377b162001-09-22 05:31:03 +0000481 print "-", line,
482
Guido van Rossumcf691932001-09-21 21:06:22 +0000483 elif op == 'replace':
Tim Petersc377b162001-09-22 05:31:03 +0000484 print "*** mismatch between", pair(a0, a1), "of expected", \
485 "output and", pair(b0, b1), "of actual output:"
486 for line in difflib.ndiff(a[a0:a1], b[b0:b1]):
487 print line,
488
Guido van Rossumcf691932001-09-21 21:06:22 +0000489 elif op == 'insert':
Tim Petersc377b162001-09-22 05:31:03 +0000490 print "***", pair(b0, b1), "of actual output doesn't appear", \
491 "in expected output after line", str(a1)+":"
Guido van Rossumcf691932001-09-21 21:06:22 +0000492 for line in b[b0:b1]:
Tim Petersc377b162001-09-22 05:31:03 +0000493 print "+", line,
494
Guido van Rossumcf691932001-09-21 21:06:22 +0000495 else:
496 print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1)
Tim Petersc377b162001-09-22 05:31:03 +0000497
Guido van Rossum0fcca4e2001-09-21 20:31:52 +0000498 print "*" * 70
Guido van Rossum152494a1996-12-20 03:12:20 +0000499
500def findtestdir():
501 if __name__ == '__main__':
Guido van Rossum41360a41998-03-26 19:42:58 +0000502 file = sys.argv[0]
Guido van Rossum152494a1996-12-20 03:12:20 +0000503 else:
Guido van Rossum41360a41998-03-26 19:42:58 +0000504 file = __file__
Guido van Rossum152494a1996-12-20 03:12:20 +0000505 testdir = os.path.dirname(file) or os.curdir
506 return testdir
507
Tim Petersc5000df2002-06-02 21:42:01 +0000508def removepy(name):
509 if name.endswith(os.extsep + "py"):
510 name = name[:-3]
511 return name
512
Guido van Rossum152494a1996-12-20 03:12:20 +0000513def count(n, word):
514 if n == 1:
Guido van Rossum41360a41998-03-26 19:42:58 +0000515 return "%d %s" % (n, word)
Guido van Rossum152494a1996-12-20 03:12:20 +0000516 else:
Guido van Rossum41360a41998-03-26 19:42:58 +0000517 return "%d %ss" % (n, word)
Guido van Rossum152494a1996-12-20 03:12:20 +0000518
Tim Petersa45da922001-08-12 03:45:50 +0000519def printlist(x, width=70, indent=4):
Tim Peters7c7efe92002-08-23 17:55:54 +0000520 """Print the elements of iterable x to stdout.
Tim Petersa45da922001-08-12 03:45:50 +0000521
522 Optional arg width (default 70) is the maximum line length.
523 Optional arg indent (default 4) is the number of blanks with which to
524 begin each line.
525 """
526
Tim Petersba78bc42002-07-04 19:45:06 +0000527 from textwrap import fill
528 blanks = ' ' * indent
529 print fill(' '.join(map(str, x)), width,
530 initial_indent=blanks, subsequent_indent=blanks)
Tim Petersa45da922001-08-12 03:45:50 +0000531
Tim Petersde14a302002-04-01 05:04:46 +0000532# Map sys.platform to a string containing the basenames of tests
533# expected to be skipped on that platform.
Tim Peters2a182db2002-10-09 01:07:11 +0000534#
535# Special cases:
536# test_pep277
537# The _ExpectedSkips constructor adds this to the set of expected
538# skips if not os.path.supports_unicode_filenames.
Tim Peters1b445d32002-11-24 18:53:11 +0000539# test_normalization
540# Whether a skip is expected here depends on whether a large test
541# input file has been downloaded. test_normalization.skip_expected
Tim Peters1babdfc2002-11-24 19:19:09 +0000542# controls that.
Tim Petersb4ee4eb2002-12-04 03:26:57 +0000543# test_socket_ssl
544# Controlled by test_socket_ssl.skip_expected. Requires the network
545# resource, and a socket module with ssl support.
Neal Norwitz55b61d22003-02-28 19:57:03 +0000546# test_timeout
547# Controlled by test_timeout.skip_expected. Requires the network
548# resource and a socket module.
Tim Petersde14a302002-04-01 05:04:46 +0000549
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000550_expectations = {
551 'win32':
552 """
553 test_al
Tim Peters78e35f92002-11-22 20:00:34 +0000554 test_bsddb3
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000555 test_cd
556 test_cl
557 test_commands
558 test_crypt
Tim Petersd7030572001-10-22 22:06:08 +0000559 test_curses
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000560 test_dbm
561 test_dl
Tim Petersdeb121a2002-04-11 19:52:58 +0000562 test_email_codecs
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000563 test_fcntl
564 test_fork1
565 test_gdbm
566 test_gl
567 test_grp
Tim Peters40e1ce42003-01-27 16:45:03 +0000568 test_iconv_codecs
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000569 test_imgfile
Tim Petersfd8e6e52003-03-04 00:26:38 +0000570 test_ioctl
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000571 test_largefile
572 test_linuxaudiodev
Fred Drake479d2802003-02-26 19:51:23 +0000573 test_macfs
574 test_macostools
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000575 test_mhlib
Tim Petersde14a302002-04-01 05:04:46 +0000576 test_mpz
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000577 test_nis
578 test_openpty
Tim Petersefc4b122002-12-10 18:47:56 +0000579 test_ossaudiodev
Fred Drake479d2802003-02-26 19:51:23 +0000580 test_plistlib
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
Fred Drake479d2802003-02-26 19:51:23 +0000603 test_macfs
604 test_macostools
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000605 test_nis
606 test_ntpath
Guido van Rossum4507ec72003-02-14 19:29:22 +0000607 test_ossaudiodev
Fred Drake479d2802003-02-26 19:51:23 +0000608 test_plistlib
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000609 test_socketserver
610 test_sunaudiodev
611 test_unicode_file
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000612 """,
Jack Jansen49a806e2001-08-28 14:49:00 +0000613 'mac':
Guido van Rossumaa782362001-09-02 03:58:41 +0000614 """
615 test_al
Jack Jansen67975142003-01-08 16:31:11 +0000616 test_atexit
Guido van Rossumaa782362001-09-02 03:58:41 +0000617 test_bsddb
Jack Jansen67975142003-01-08 16:31:11 +0000618 test_bsddb3
619 test_bz2
Guido van Rossumaa782362001-09-02 03:58:41 +0000620 test_cd
621 test_cl
622 test_commands
623 test_crypt
Jack Jansenb3be2162001-11-30 14:16:36 +0000624 test_curses
Guido van Rossumaa782362001-09-02 03:58:41 +0000625 test_dbm
626 test_dl
Jack Jansen67975142003-01-08 16:31:11 +0000627 test_email_codecs
Guido van Rossumaa782362001-09-02 03:58:41 +0000628 test_fcntl
629 test_fork1
630 test_gl
631 test_grp
Tim Peters40e1ce42003-01-27 16:45:03 +0000632 test_iconv_codecs
Jack Jansenc4d6bdd2003-03-07 15:38:11 +0000633 test_ioctl
Guido van Rossumaa782362001-09-02 03:58:41 +0000634 test_imgfile
635 test_largefile
636 test_linuxaudiodev
637 test_locale
638 test_mmap
Jack Jansen67975142003-01-08 16:31:11 +0000639 test_mpz
Guido van Rossumaa782362001-09-02 03:58:41 +0000640 test_nis
641 test_ntpath
642 test_openpty
Jack Jansen67975142003-01-08 16:31:11 +0000643 test_ossaudiodev
Guido van Rossumaa782362001-09-02 03:58:41 +0000644 test_poll
Jack Jansen67975142003-01-08 16:31:11 +0000645 test_popen
Guido van Rossumaa782362001-09-02 03:58:41 +0000646 test_popen2
Jack Jansen5bb97e62003-02-21 22:33:55 +0000647 test_posix
Guido van Rossumaa782362001-09-02 03:58:41 +0000648 test_pty
649 test_pwd
Jack Jansen67975142003-01-08 16:31:11 +0000650 test_resource
Guido van Rossumaa782362001-09-02 03:58:41 +0000651 test_signal
Guido van Rossumaa782362001-09-02 03:58:41 +0000652 test_socketserver
653 test_sunaudiodev
654 test_sundry
Jack Jansenc4d6bdd2003-03-07 15:38:11 +0000655 test_tarfile
Guido van Rossumaa782362001-09-02 03:58:41 +0000656 test_timing
657 test_unicode_file
Guido van Rossumaa782362001-09-02 03:58:41 +0000658 """,
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000659 'unixware7':
Martin v. Löwis0ace3262001-09-05 14:38:48 +0000660 """
661 test_al
662 test_bsddb
663 test_cd
664 test_cl
665 test_dl
666 test_gl
667 test_imgfile
668 test_largefile
669 test_linuxaudiodev
Fred Drake479d2802003-02-26 19:51:23 +0000670 test_macfs
671 test_macostools
Martin v. Löwis0ace3262001-09-05 14:38:48 +0000672 test_minidom
673 test_nis
674 test_ntpath
675 test_openpty
Fred Drake479d2802003-02-26 19:51:23 +0000676 test_plistlib
Martin v. Löwis0ace3262001-09-05 14:38:48 +0000677 test_pyexpat
678 test_sax
679 test_socketserver
680 test_sunaudiodev
681 test_sundry
682 test_unicode_file
Martin v. Löwis0ace3262001-09-05 14:38:48 +0000683 """,
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000684 'openunix8':
685 """
686 test_al
687 test_bsddb
688 test_cd
689 test_cl
690 test_dl
691 test_gl
692 test_imgfile
693 test_largefile
694 test_linuxaudiodev
Fred Drake479d2802003-02-26 19:51:23 +0000695 test_macfs
696 test_macostools
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000697 test_minidom
698 test_nis
699 test_ntpath
700 test_openpty
Fred Drake479d2802003-02-26 19:51:23 +0000701 test_plistlib
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000702 test_pyexpat
703 test_sax
704 test_socketserver
705 test_sunaudiodev
706 test_sundry
707 test_unicode_file
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000708 """,
709 'sco_sv3':
710 """
711 test_al
712 test_asynchat
713 test_bsddb
714 test_cd
715 test_cl
716 test_dl
717 test_fork1
718 test_gettext
719 test_gl
720 test_imgfile
721 test_largefile
722 test_linuxaudiodev
723 test_locale
Fred Drake479d2802003-02-26 19:51:23 +0000724 test_macfs
725 test_macostools
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000726 test_minidom
727 test_nis
728 test_ntpath
729 test_openpty
Fred Drake479d2802003-02-26 19:51:23 +0000730 test_plistlib
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000731 test_pyexpat
732 test_queue
733 test_sax
734 test_socketserver
735 test_sunaudiodev
736 test_sundry
737 test_thread
738 test_threaded_import
739 test_threadedtempfile
740 test_threading
741 test_unicode_file
Martin v. Löwis21ee4092002-09-30 16:19:48 +0000742 """,
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000743 'riscos':
744 """
745 test_al
746 test_asynchat
747 test_bsddb
748 test_cd
749 test_cl
750 test_commands
751 test_crypt
752 test_dbm
753 test_dl
754 test_fcntl
755 test_fork1
756 test_gdbm
757 test_gl
758 test_grp
759 test_imgfile
760 test_largefile
761 test_linuxaudiodev
762 test_locale
Fred Drake479d2802003-02-26 19:51:23 +0000763 test_macfs
764 test_macostools
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000765 test_mmap
766 test_nis
767 test_ntpath
768 test_openpty
Fred Drake479d2802003-02-26 19:51:23 +0000769 test_plistlib
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000770 test_poll
771 test_popen2
772 test_pty
773 test_pwd
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000774 test_socketserver
775 test_strop
776 test_sunaudiodev
777 test_sundry
778 test_thread
779 test_threaded_import
780 test_threadedtempfile
781 test_threading
782 test_timing
783 test_unicode_file
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000784 """,
Jack Jansen8a97f4a2001-12-05 23:27:32 +0000785 'darwin':
Jack Jansen398c2362001-12-02 21:41:36 +0000786 """
787 test_al
Jack Jansenacda3392002-12-30 23:03:13 +0000788 test_bsddb
Guido van Rossum9d427002002-12-03 10:24:56 +0000789 test_bsddb3
Jack Jansen398c2362001-12-02 21:41:36 +0000790 test_cd
791 test_cl
792 test_curses
793 test_dl
Guido van Rossum9d427002002-12-03 10:24:56 +0000794 test_email_codecs
Jack Jansen398c2362001-12-02 21:41:36 +0000795 test_gdbm
796 test_gl
Jack Jansenc2dd2f02003-02-23 22:56:58 +0000797 test_iconv_codecs
Jack Jansen398c2362001-12-02 21:41:36 +0000798 test_imgfile
799 test_largefile
800 test_linuxaudiodev
Jack Jansenacda3392002-12-30 23:03:13 +0000801 test_locale
Jack Jansen398c2362001-12-02 21:41:36 +0000802 test_minidom
Guido van Rossum9d427002002-12-03 10:24:56 +0000803 test_mpz
Jack Jansen398c2362001-12-02 21:41:36 +0000804 test_nis
805 test_ntpath
Jack Jansenacda3392002-12-30 23:03:13 +0000806 test_ossaudiodev
Jack Jansen398c2362001-12-02 21:41:36 +0000807 test_poll
Jack Jansenf839c272001-12-14 21:28:53 +0000808 test_socketserver
Jack Jansen398c2362001-12-02 21:41:36 +0000809 test_sunaudiodev
Jack Jansenf839c272001-12-14 21:28:53 +0000810 test_unicode_file
Jack Jansen398c2362001-12-02 21:41:36 +0000811 """,
Guido van Rossum11c3f092002-07-17 15:08:24 +0000812 'sunos5':
813 """
814 test_al
815 test_bsddb
816 test_cd
817 test_cl
818 test_curses
819 test_dbm
820 test_email_codecs
821 test_gdbm
822 test_gl
823 test_gzip
824 test_imgfile
825 test_linuxaudiodev
Fred Drake479d2802003-02-26 19:51:23 +0000826 test_macfs
827 test_macostools
Guido van Rossum11c3f092002-07-17 15:08:24 +0000828 test_mpz
829 test_openpty
Fred Drake479d2802003-02-26 19:51:23 +0000830 test_plistlib
Guido van Rossum11c3f092002-07-17 15:08:24 +0000831 test_socketserver
Guido van Rossum11c3f092002-07-17 15:08:24 +0000832 test_zipfile
833 test_zlib
Jeremy Hyltoned375e12002-07-17 15:56:55 +0000834 """,
Skip Montanarob3230212002-03-15 02:54:03 +0000835 'hp-ux11':
836 """
837 test_al
838 test_bsddb
839 test_cd
840 test_cl
841 test_curses
842 test_dl
843 test_gdbm
844 test_gl
845 test_gzip
846 test_imgfile
847 test_largefile
848 test_linuxaudiodev
849 test_locale
Fred Drake479d2802003-02-26 19:51:23 +0000850 test_macfs
851 test_macostools
Skip Montanarob3230212002-03-15 02:54:03 +0000852 test_minidom
853 test_nis
854 test_ntpath
855 test_openpty
Fred Drake479d2802003-02-26 19:51:23 +0000856 test_plistlib
Skip Montanarob3230212002-03-15 02:54:03 +0000857 test_pyexpat
858 test_sax
Skip Montanarob3230212002-03-15 02:54:03 +0000859 test_socketserver
860 test_sunaudiodev
861 test_unicode_file
Skip Montanarob3230212002-03-15 02:54:03 +0000862 test_zipfile
863 test_zlib
864 """,
Martin v. Löwisf90ae202002-06-11 06:22:31 +0000865 'atheos':
Tim Petersc411dba2002-07-16 21:35:23 +0000866 """
867 test_al
868 test_cd
869 test_cl
870 test_curses
871 test_dl
872 test_email_codecs
873 test_gdbm
874 test_gl
875 test_imgfile
876 test_largefile
877 test_linuxaudiodev
878 test_locale
Fred Drake479d2802003-02-26 19:51:23 +0000879 test_macfs
880 test_macostools
Tim Petersc411dba2002-07-16 21:35:23 +0000881 test_mhlib
882 test_mmap
883 test_mpz
884 test_nis
Fred Drake479d2802003-02-26 19:51:23 +0000885 test_plistlib
Tim Petersc411dba2002-07-16 21:35:23 +0000886 test_poll
887 test_popen2
888 test_resource
Tim Petersc411dba2002-07-16 21:35:23 +0000889 test_socketserver
890 test_sunaudiodev
891 test_unicode_file
Tim Petersc411dba2002-07-16 21:35:23 +0000892 """,
Jason Tishler25115942002-12-05 15:18:15 +0000893 'cygwin':
894 """
895 test_al
Tim Petersb0f89e02002-12-05 17:20:25 +0000896 test_bsddb3
Jason Tishler25115942002-12-05 15:18:15 +0000897 test_cd
898 test_cl
899 test_curses
900 test_dbm
901 test_email_codecs
902 test_gl
903 test_imgfile
904 test_largefile
905 test_linuxaudiodev
906 test_locale
Fred Drake479d2802003-02-26 19:51:23 +0000907 test_macfs
908 test_macostools
Jason Tishler25115942002-12-05 15:18:15 +0000909 test_mpz
910 test_nis
Jason Tishler5c4ded22003-02-05 16:46:01 +0000911 test_ossaudiodev
Fred Drake479d2802003-02-26 19:51:23 +0000912 test_plistlib
Jason Tishler25115942002-12-05 15:18:15 +0000913 test_socketserver
914 test_sunaudiodev
915 test_unicode_file
Jason Tishler25115942002-12-05 15:18:15 +0000916 """,
Andrew MacIntyrefd07e7d2002-12-31 11:26:50 +0000917 'os2emx':
918 """
919 test_al
920 test_audioop
921 test_bsddb3
922 test_cd
923 test_cl
924 test_commands
925 test_curses
926 test_dl
927 test_email_codecs
928 test_gl
Tim Peters40e1ce42003-01-27 16:45:03 +0000929 test_iconv_codecs
Andrew MacIntyrefd07e7d2002-12-31 11:26:50 +0000930 test_imgfile
931 test_largefile
932 test_linuxaudiodev
Fred Drake479d2802003-02-26 19:51:23 +0000933 test_macfs
934 test_macostools
Andrew MacIntyrefd07e7d2002-12-31 11:26:50 +0000935 test_mhlib
936 test_mmap
937 test_nis
938 test_openpty
939 test_ossaudiodev
Fred Drake479d2802003-02-26 19:51:23 +0000940 test_plistlib
Andrew MacIntyrefd07e7d2002-12-31 11:26:50 +0000941 test_pty
942 test_resource
943 test_signal
944 test_sunaudiodev
945 test_unicode_file
Andrew MacIntyrefd07e7d2002-12-31 11:26:50 +0000946 """,
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000947}
948
Tim Petersb5b7b782001-08-12 01:20:39 +0000949class _ExpectedSkips:
950 def __init__(self):
Tim Peters2a182db2002-10-09 01:07:11 +0000951 import os.path
Tim Peters1b445d32002-11-24 18:53:11 +0000952 from test import test_normalization
Tim Petersb4ee4eb2002-12-04 03:26:57 +0000953 from test import test_socket_ssl
Neal Norwitz55b61d22003-02-28 19:57:03 +0000954 from test import test_timeout
Tim Peters1b445d32002-11-24 18:53:11 +0000955
Tim Peters7c7efe92002-08-23 17:55:54 +0000956 self.valid = False
Tim Petersde14a302002-04-01 05:04:46 +0000957 if sys.platform in _expectations:
Guido van Rossumf73e30c2001-08-12 02:22:19 +0000958 s = _expectations[sys.platform]
Tim Peters7c7efe92002-08-23 17:55:54 +0000959 self.expected = Set(s.split())
Tim Peters1b445d32002-11-24 18:53:11 +0000960
Tim Peters2a182db2002-10-09 01:07:11 +0000961 if not os.path.supports_unicode_filenames:
962 self.expected.add('test_pep277')
Tim Peters1b445d32002-11-24 18:53:11 +0000963
964 if test_normalization.skip_expected:
965 self.expected.add('test_normalization')
966
Tim Petersb4ee4eb2002-12-04 03:26:57 +0000967 if test_socket_ssl.skip_expected:
968 self.expected.add('test_socket_ssl')
969
Neal Norwitz55b61d22003-02-28 19:57:03 +0000970 if test_timeout.skip_expected:
971 self.expected.add('test_timeout')
972
Jack Jansen6afc5e02003-01-29 16:24:16 +0000973 if not sys.platform in ("mac", "darwin"):
Tim Petersecd79eb2003-01-29 00:35:32 +0000974 self.expected.add("test_macostools")
975 self.expected.add("test_macfs")
Jack Jansen6afc5e02003-01-29 16:24:16 +0000976 self.expected.add("test_aepack")
Tim Petersecd79eb2003-01-29 00:35:32 +0000977
978 if sys.platform != "win32":
979 self.expected.add("test_winreg")
980 self.expected.add("test_winsound")
Tim Petersf2715e02003-02-19 02:35:07 +0000981
Tim Peters7c7efe92002-08-23 17:55:54 +0000982 self.valid = True
Tim Petersb5b7b782001-08-12 01:20:39 +0000983
984 def isvalid(self):
985 "Return true iff _ExpectedSkips knows about the current platform."
986 return self.valid
987
988 def getexpected(self):
989 """Return set of test names we expect to skip on current platform.
990
991 self.isvalid() must be true.
992 """
993
994 assert self.isvalid()
995 return self.expected
996
Guido van Rossum152494a1996-12-20 03:12:20 +0000997if __name__ == '__main__':
Barry Warsaw408b6d32002-07-30 23:27:12 +0000998 # Remove regrtest.py's own directory from the module search path. This
999 # prevents relative imports from working, and relative imports will screw
1000 # up the testing framework. E.g. if both test.test_support and
1001 # test_support are imported, they will not contain the same globals, and
1002 # much of the testing framework relies on the globals in the
1003 # test.test_support module.
1004 mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0])))
1005 i = pathlen = len(sys.path)
1006 while i >= 0:
1007 i -= 1
1008 if os.path.abspath(os.path.normpath(sys.path[i])) == mydir:
1009 del sys.path[i]
1010 if len(sys.path) == pathlen:
1011 print 'Could not find %r in sys.path to remove it' % mydir
Barry Warsaw08fca522001-08-20 22:33:46 +00001012 main()