summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_warnings.py
blob: 9cd3c30e29cda5aa995b9551cc3bd2ce65c40ed0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import warnings

# The warnings module isn't easily tested, because it relies on module
# globals to store configuration information.  We need to extract the
# current settings to avoid bashing them while running tests.

_filters = []
_showwarning = None

def showwarning(message, category, filename, lineno, file=None):
    i = filename.find("Lib/")
    filename = filename[i:]
    print "%s:%s: %s: %s" % (filename, lineno, category.__name__, message)

def monkey():
    global _filters, _showwarning
    _filters = warnings.filters[:]
    _showwarning = warnings.showwarning
    warnings.showwarning = showwarning

def unmonkey():
    warnings.filters = _filters[:]
    warnings.showwarning = _showwarning

def test():
    for item in warnings.filters:
        print (item[0], item[1] is None, item[2].__name__, item[3] is None,
               item[4])
    hello = "hello world"
    for i in range(4):
        warnings.warn(hello)
    warnings.warn(hello, UserWarning)
    warnings.warn(hello, DeprecationWarning)
    for i in range(3):
        warnings.warn(hello)
    warnings.filterwarnings("error", "", Warning, "", 0)
    try:
        warnings.warn(hello)
    except Exception, msg:
        print "Caught", msg.__class__.__name__ + ":", msg
    else:
        print "No exception"
    warnings.resetwarnings()
    try:
        warnings.filterwarnings("booh", "", Warning, "", 0)
    except Exception, msg:
        print "Caught", msg.__class__.__name__ + ":", msg
    else:
        print "No exception"

monkey()
test()
unmonkey()