blob: 07f5a7e80a98e3f041640014d90b796098a427a2 [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
5
6input = """\
Fred Drakec19425d2000-06-28 15:07:31 +00007import atexit
8
9def handler1():
10 print "handler1"
11
12def handler2(*args, **kargs):
13 print "handler2", args, kargs
14
Fred Drakec19425d2000-06-28 15:07:31 +000015atexit.register(handler1)
16atexit.register(handler2)
17atexit.register(handler2, 7, kw="abc")
Tim Peters012b69c2002-07-16 19:30:59 +000018"""
Fred Drakec19425d2000-06-28 15:07:31 +000019
Tim Peters012b69c2002-07-16 19:30:59 +000020fname = TESTFN + ".py"
21f = file(fname, "w")
22f.write(input)
23f.close()
Fred Drakec19425d2000-06-28 15:07:31 +000024
Tim Peters012b69c2002-07-16 19:30:59 +000025p = os.popen("python " + fname)
26output = p.read()
27p.close()
28vereq(output, """\
29handler2 (7,) {'kw': 'abc'}
30handler2 () {}
31handler1
32""")
33
34input = """\
35def direct():
36 print "direct exit"
37
38import sys
39sys.exitfunc = direct
40
41# Make sure atexit doesn't drop
42def indirect():
43 print "indirect exit"
44
45import atexit
46atexit.register(indirect)
47"""
48
49f = file(fname, "w")
50f.write(input)
51f.close()
52
53p = os.popen("python " + fname)
54output = p.read()
55p.close()
56vereq(output, """\
57indirect exit
58direct exit
59""")
60
61os.unlink(fname)