blob: a24b3ce6b8ee49b2192979ab167fced4bc504a2a [file] [log] [blame]
Fred Drake1790dd42000-07-24 06:55:00 +00001"""Supporting definitions for the Python regression test."""
Guido van Rossum3bead091992-01-27 17:00:37 +00002
Fred Drake1790dd42000-07-24 06:55:00 +00003
4class Error(Exception):
Fred Drake004d5e62000-10-23 17:22:08 +00005 """Base class for regression test exceptions."""
Fred Drake1790dd42000-07-24 06:55:00 +00006
7class TestFailed(Error):
Fred Drake004d5e62000-10-23 17:22:08 +00008 """Test failed."""
Fred Drake1790dd42000-07-24 06:55:00 +00009
10class TestSkipped(Error):
Fred Drake004d5e62000-10-23 17:22:08 +000011 """Test skipped.
Fred Drake1790dd42000-07-24 06:55:00 +000012
Fred Drake004d5e62000-10-23 17:22:08 +000013 This can be raised to indicate that a test was deliberatly
14 skipped, but not because a feature wasn't available. For
15 example, if some resource can't be used, such as the network
16 appears to be unavailable, this should be raised instead of
17 TestFailed.
Fred Drake1790dd42000-07-24 06:55:00 +000018
Fred Drake004d5e62000-10-23 17:22:08 +000019 """
Fred Drake1790dd42000-07-24 06:55:00 +000020
Guido van Rossum3bead091992-01-27 17:00:37 +000021
Fred Drake004d5e62000-10-23 17:22:08 +000022verbose = 1 # Flag set to 0 by regrtest.py
Fred Drake1790dd42000-07-24 06:55:00 +000023use_large_resources = 1 # Flag set to 0 by regrtest.py
Guido van Rossum531661c1996-12-20 02:58:22 +000024
Guido van Rossum3bead091992-01-27 17:00:37 +000025def unload(name):
Fred Drake004d5e62000-10-23 17:22:08 +000026 import sys
27 try:
28 del sys.modules[name]
29 except KeyError:
30 pass
Guido van Rossum3bead091992-01-27 17:00:37 +000031
32def forget(modname):
Fred Drake004d5e62000-10-23 17:22:08 +000033 unload(modname)
34 import sys, os
35 for dirname in sys.path:
36 try:
37 os.unlink(os.path.join(dirname, modname + '.pyc'))
38 except os.error:
39 pass
Guido van Rossum3bead091992-01-27 17:00:37 +000040
Guido van Rossum35fb82a1993-01-26 13:04:43 +000041FUZZ = 1e-6
42
43def fcmp(x, y): # fuzzy comparison function
Fred Drake004d5e62000-10-23 17:22:08 +000044 if type(x) == type(0.0) or type(y) == type(0.0):
45 try:
46 x, y = coerce(x, y)
47 fuzz = (abs(x) + abs(y)) * FUZZ
48 if abs(x-y) <= fuzz:
49 return 0
50 except:
51 pass
52 elif type(x) == type(y) and type(x) in (type(()), type([])):
53 for i in range(min(len(x), len(y))):
54 outcome = fcmp(x[i], y[i])
Fred Drake132dce22000-12-12 23:11:42 +000055 if outcome != 0:
Fred Drake004d5e62000-10-23 17:22:08 +000056 return outcome
57 return cmp(len(x), len(y))
58 return cmp(x, y)
Guido van Rossum35fb82a1993-01-26 13:04:43 +000059
Guido van Rossum3bead091992-01-27 17:00:37 +000060TESTFN = '@test' # Filename used for testing
61from os import unlink
Guido van Rossume26132c1998-04-23 20:13:30 +000062
63def findfile(file, here=__file__):
Fred Drake004d5e62000-10-23 17:22:08 +000064 import os
65 if os.path.isabs(file):
66 return file
67 import sys
68 path = sys.path
69 path = [os.path.dirname(here)] + path
70 for dn in path:
71 fn = os.path.join(dn, file)
72 if os.path.exists(fn): return fn
73 return file