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