| # Test the atexit module. | 
 | from test.test_support import TESTFN, vereq, is_jython | 
 | import atexit | 
 | from os import popen, unlink | 
 | import sys | 
 |  | 
 | executable = sys.executable | 
 | if is_jython: | 
 |     executable = "jython" | 
 |  | 
 | input = """\ | 
 | import atexit | 
 |  | 
 | def handler1(): | 
 |     print "handler1" | 
 |  | 
 | def handler2(*args, **kargs): | 
 |     print "handler2", args, kargs | 
 |  | 
 | atexit.register(handler1) | 
 | atexit.register(handler2) | 
 | atexit.register(handler2, 7, kw="abc") | 
 | """ | 
 |  | 
 | fname = TESTFN + ".py" | 
 | f = file(fname, "w") | 
 | f.write(input) | 
 | f.close() | 
 |  | 
 | p = popen('"%s" %s' % (executable, fname)) | 
 | output = p.read() | 
 | p.close() | 
 | vereq(output, """\ | 
 | handler2 (7,) {'kw': 'abc'} | 
 | handler2 () {} | 
 | handler1 | 
 | """) | 
 |  | 
 | input = """\ | 
 | def direct(): | 
 |     print "direct exit" | 
 |  | 
 | import sys | 
 | sys.exitfunc = direct | 
 |  | 
 | # Make sure atexit doesn't drop | 
 | def indirect(): | 
 |     print "indirect exit" | 
 |  | 
 | import atexit | 
 | atexit.register(indirect) | 
 | """ | 
 |  | 
 | f = file(fname, "w") | 
 | f.write(input) | 
 | f.close() | 
 |  | 
 | p = popen('"%s" %s' % (executable, fname)) | 
 | output = p.read() | 
 | p.close() | 
 | vereq(output, """\ | 
 | indirect exit | 
 | direct exit | 
 | """) | 
 |  | 
 | unlink(fname) |