5 from test
import test_support
7 class TestCase(unittest
.TestCase
):
9 # be sure args are handled properly
10 s
= StringIO
.StringIO()
11 sys
.stdout
= sys
.stderr
= s
12 save_handlers
= atexit
._exithandlers
13 atexit
._exithandlers
= []
15 atexit
.register(self
.h1
)
16 atexit
.register(self
.h4
)
17 atexit
.register(self
.h4
, 4, kw
="abc")
18 atexit
._run
_exitfuncs
()
20 sys
.stdout
= sys
.__stdout
__
21 sys
.stderr
= sys
.__stderr
__
22 atexit
._exithandlers
= save_handlers
23 self
.assertEqual(s
.getvalue(), "h4 (4,) {'kw': 'abc'}\nh4 () {}\nh1\n")
26 # be sure handlers are executed in reverse order
27 s
= StringIO
.StringIO()
28 sys
.stdout
= sys
.stderr
= s
29 save_handlers
= atexit
._exithandlers
30 atexit
._exithandlers
= []
32 atexit
.register(self
.h1
)
33 atexit
.register(self
.h2
)
34 atexit
.register(self
.h3
)
35 atexit
._run
_exitfuncs
()
37 sys
.stdout
= sys
.__stdout
__
38 sys
.stderr
= sys
.__stderr
__
39 atexit
._exithandlers
= save_handlers
40 self
.assertEqual(s
.getvalue(), "h3\nh2\nh1\n")
42 def test_sys_override(self
):
43 # be sure a preset sys.exitfunc is handled properly
44 save_handlers
= atexit
._exithandlers
45 atexit
._exithandlers
= []
47 sys
.exitfunc
= self
.h1
49 s
= StringIO
.StringIO()
50 sys
.stdout
= sys
.stderr
= s
52 atexit
.register(self
.h2
)
53 atexit
._run
_exitfuncs
()
55 sys
.stdout
= sys
.__stdout
__
56 sys
.stderr
= sys
.__stderr
__
57 atexit
._exithandlers
= save_handlers
59 self
.assertEqual(s
.getvalue(), "h2\nh1\n")
62 # be sure raises are handled properly
63 s
= StringIO
.StringIO()
64 sys
.stdout
= sys
.stderr
= s
65 save_handlers
= atexit
._exithandlers
66 atexit
._exithandlers
= []
68 atexit
.register(self
.raise1
)
69 atexit
.register(self
.raise2
)
70 self
.assertRaises(TypeError, atexit
._run
_exitfuncs
)
72 sys
.stdout
= sys
.__stdout
__
73 sys
.stderr
= sys
.__stderr
__
74 atexit
._exithandlers
= save_handlers
86 def h4(self
, *args
, **kwargs
):
87 print "h4", args
, kwargs
96 test_support
.run_unittest(TestCase
)
99 if __name__
== "__main__":