Tim Peters | 012b69c | 2002-07-16 19:30:59 +0000 | [diff] [blame] | 1 | # Test the atexit module. |
| 2 | from test_support import TESTFN, vereq |
| 3 | import atexit |
| 4 | import os |
| 5 | |
| 6 | input = """\ |
Fred Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 7 | import atexit |
| 8 | |
| 9 | def handler1(): |
| 10 | print "handler1" |
| 11 | |
| 12 | def handler2(*args, **kargs): |
| 13 | print "handler2", args, kargs |
| 14 | |
Fred Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 15 | atexit.register(handler1) |
| 16 | atexit.register(handler2) |
| 17 | atexit.register(handler2, 7, kw="abc") |
Tim Peters | 012b69c | 2002-07-16 19:30:59 +0000 | [diff] [blame] | 18 | """ |
Fred Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 19 | |
Tim Peters | 012b69c | 2002-07-16 19:30:59 +0000 | [diff] [blame] | 20 | fname = TESTFN + ".py" |
| 21 | f = file(fname, "w") |
| 22 | f.write(input) |
| 23 | f.close() |
Fred Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 24 | |
Tim Peters | 012b69c | 2002-07-16 19:30:59 +0000 | [diff] [blame] | 25 | p = os.popen("python " + fname) |
| 26 | output = p.read() |
| 27 | p.close() |
| 28 | vereq(output, """\ |
| 29 | handler2 (7,) {'kw': 'abc'} |
| 30 | handler2 () {} |
| 31 | handler1 |
| 32 | """) |
| 33 | |
| 34 | input = """\ |
| 35 | def direct(): |
| 36 | print "direct exit" |
| 37 | |
| 38 | import sys |
| 39 | sys.exitfunc = direct |
| 40 | |
| 41 | # Make sure atexit doesn't drop |
| 42 | def indirect(): |
| 43 | print "indirect exit" |
| 44 | |
| 45 | import atexit |
| 46 | atexit.register(indirect) |
| 47 | """ |
| 48 | |
| 49 | f = file(fname, "w") |
| 50 | f.write(input) |
| 51 | f.close() |
| 52 | |
| 53 | p = os.popen("python " + fname) |
| 54 | output = p.read() |
| 55 | p.close() |
| 56 | vereq(output, """\ |
| 57 | indirect exit |
| 58 | direct exit |
| 59 | """) |
| 60 | |
| 61 | os.unlink(fname) |