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