blob: 1d120dfe2ca9356e816c03b303159b0e5513e54b [file] [log] [blame]
Tim Peters012b69c2002-07-16 19:30:59 +00001# Test the atexit module.
Finn Bock41c570f2002-11-06 11:37:57 +00002from test.test_support import TESTFN, vereq, is_jython
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
Finn Bock41c570f2002-11-06 11:37:57 +00007executable = sys.executable
8if is_jython:
9 executable = "jython"
10
Tim Peters012b69c2002-07-16 19:30:59 +000011input = """\
Fred Drakec19425d2000-06-28 15:07:31 +000012import atexit
13
14def handler1():
15 print "handler1"
16
17def handler2(*args, **kargs):
18 print "handler2", args, kargs
19
Fred Drakec19425d2000-06-28 15:07:31 +000020atexit.register(handler1)
21atexit.register(handler2)
22atexit.register(handler2, 7, kw="abc")
Tim Peters012b69c2002-07-16 19:30:59 +000023"""
Fred Drakec19425d2000-06-28 15:07:31 +000024
Tim Peters012b69c2002-07-16 19:30:59 +000025fname = TESTFN + ".py"
26f = file(fname, "w")
27f.write(input)
28f.close()
Fred Drakec19425d2000-06-28 15:07:31 +000029
Jack Jansen0c44c042003-02-24 15:26:39 +000030p = popen('"%s" %s' % (executable, fname))
Tim Peters012b69c2002-07-16 19:30:59 +000031output = p.read()
32p.close()
33vereq(output, """\
34handler2 (7,) {'kw': 'abc'}
35handler2 () {}
36handler1
37""")
38
39input = """\
40def direct():
41 print "direct exit"
42
43import sys
44sys.exitfunc = direct
45
Tim Petersc411dba2002-07-16 21:35:23 +000046# Make sure atexit doesn't drop
Tim Peters012b69c2002-07-16 19:30:59 +000047def indirect():
48 print "indirect exit"
49
50import atexit
51atexit.register(indirect)
52"""
53
54f = file(fname, "w")
55f.write(input)
56f.close()
57
Jack Jansen0c44c042003-02-24 15:26:39 +000058p = popen('"%s" %s' % (executable, fname))
Tim Peters012b69c2002-07-16 19:30:59 +000059output = p.read()
60p.close()
61vereq(output, """\
62indirect exit
63direct exit
64""")
65
Jack Jansenaeb6a602002-07-26 11:33:49 +000066unlink(fname)