blob: c9d72a78cd552116cda08294852c36ec49aad29e [file] [log] [blame]
Tim Peters012b69c2002-07-16 19:30:59 +00001# Test the atexit module.
Barry Warsaw408b6d32002-07-30 23:27:12 +00002from test.test_support import TESTFN, vereq
Tim Peters012b69c2002-07-16 19:30:59 +00003import atexit
Jack Jansenaeb6a602002-07-26 11:33:49 +00004from os import popen, unlink
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
Jack Jansenaeb6a602002-07-26 11:33:49 +000026p = 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
Jack Jansenaeb6a602002-07-26 11:33:49 +000054p = 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
Jack Jansenaeb6a602002-07-26 11:33:49 +000062unlink(fname)