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