blob: 64c4c3c68d70738d3781200d42372c02bee74450 [file] [log] [blame]
Tim Peters012b69c2002-07-16 19:30:59 +00001# Test the atexit module.
2from test_support import TESTFN, vereq
3import atexit
4import os
Tim Petersc7b6bed2002-07-17 00:34:26 +00005import sys
Tim Peters012b69c2002-07-16 19:30:59 +00006
7input = """\
Fred Drakec19425d2000-06-28 15:07:31 +00008import atexit
9
10def handler1():
11 print "handler1"
12
13def handler2(*args, **kargs):
14 print "handler2", args, kargs
15
Fred Drakec19425d2000-06-28 15:07:31 +000016atexit.register(handler1)
17atexit.register(handler2)
18atexit.register(handler2, 7, kw="abc")
Tim Peters012b69c2002-07-16 19:30:59 +000019"""
Fred Drakec19425d2000-06-28 15:07:31 +000020
Tim Peters012b69c2002-07-16 19:30:59 +000021fname = TESTFN + ".py"
22f = file(fname, "w")
23f.write(input)
24f.close()
Fred Drakec19425d2000-06-28 15:07:31 +000025
Tim Petersc7b6bed2002-07-17 00:34:26 +000026p = os.popen("%s %s" % (sys.executable, fname))
Tim Peters012b69c2002-07-16 19:30:59 +000027output = p.read()
28p.close()
29vereq(output, """\
30handler2 (7,) {'kw': 'abc'}
31handler2 () {}
32handler1
33""")
34
35input = """\
36def direct():
37 print "direct exit"
38
39import sys
40sys.exitfunc = direct
41
Tim Petersc411dba2002-07-16 21:35:23 +000042# Make sure atexit doesn't drop
Tim Peters012b69c2002-07-16 19:30:59 +000043def indirect():
44 print "indirect exit"
45
46import atexit
47atexit.register(indirect)
48"""
49
50f = file(fname, "w")
51f.write(input)
52f.close()
53
Tim Petersc7b6bed2002-07-17 00:34:26 +000054p = os.popen("%s %s" % (sys.executable, fname))
Tim Peters012b69c2002-07-16 19:30:59 +000055output = p.read()
56p.close()
57vereq(output, """\
58indirect exit
59direct exit
60""")
61
62os.unlink(fname)