test_support.py revision d2bf3b7ca6f702f54b8e81ea8d194fc116ac6791
1"""Supporting definitions for the Python regression test.""" 2 3 4class Error(Exception): 5 """Base class for regression test exceptions.""" 6 7class TestFailed(Error): 8 """Test failed.""" 9 10class TestSkipped(Error): 11 """Test skipped. 12 13 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. 18 19 """ 20 21 22verbose = 1 # Flag set to 0 by regrtest.py 23use_large_resources = 1 # Flag set to 0 by regrtest.py 24 25def unload(name): 26 import sys 27 try: 28 del sys.modules[name] 29 except KeyError: 30 pass 31 32def forget(modname): 33 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 40 41FUZZ = 1e-6 42 43def fcmp(x, y): # fuzzy comparison function 44 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]) 55 if outcome != 0: 56 return outcome 57 return cmp(len(x), len(y)) 58 return cmp(x, y) 59 60TESTFN = '@test' # Filename used for testing 61from os import unlink 62 63def findfile(file, here=__file__): 64 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 74 75def verify(condition, reason='test failed'): 76 77 """ Verify that condition is true. If not, raise an 78 AssertionError. 79 80 The optinal argument reason can be given to provide 81 a better error text. 82 83 """ 84 if not condition: 85 raise AssertionError,reason 86