blob: a60dfa85b6bd953b3c5ffafeabb4e8752d02b8f3 [file] [log] [blame]
Tim Petersc7b6bed2002-07-17 00:34:26 +00001import sys
Skip Montanaro599bd5e2004-11-04 04:31:30 +00002import unittest
3import StringIO
Fred Drakec19425d2000-06-28 15:07:31 +00004import atexit
Skip Montanaro599bd5e2004-11-04 04:31:30 +00005from test import test_support
Fred Drakec19425d2000-06-28 15:07:31 +00006
Skip Montanaro599bd5e2004-11-04 04:31:30 +00007class TestCase(unittest.TestCase):
8 def test_args(self):
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 = []
14 try:
15 atexit.register(self.h1)
16 atexit.register(self.h4)
17 atexit.register(self.h4, 4, kw="abc")
18 atexit._run_exitfuncs()
19 finally:
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")
Fred Drakec19425d2000-06-28 15:07:31 +000024
Benjamin Petersona74d6752008-09-23 20:43:09 +000025 def test_badargs(self):
26 s = StringIO.StringIO()
27 sys.stdout = sys.stderr = s
28 save_handlers = atexit._exithandlers
29 atexit._exithandlers = []
30 try:
31 atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0)
32 self.assertRaises(TypeError, atexit._run_exitfuncs)
33 finally:
34 sys.stdout = sys.__stdout__
35 sys.stderr = sys.__stderr__
36 atexit._exithandlers = save_handlers
37
Skip Montanaro599bd5e2004-11-04 04:31:30 +000038 def test_order(self):
39 # be sure handlers are executed in reverse order
40 s = StringIO.StringIO()
41 sys.stdout = sys.stderr = s
42 save_handlers = atexit._exithandlers
43 atexit._exithandlers = []
44 try:
45 atexit.register(self.h1)
46 atexit.register(self.h2)
47 atexit.register(self.h3)
48 atexit._run_exitfuncs()
49 finally:
50 sys.stdout = sys.__stdout__
51 sys.stderr = sys.__stderr__
52 atexit._exithandlers = save_handlers
53 self.assertEqual(s.getvalue(), "h3\nh2\nh1\n")
Fred Drakec19425d2000-06-28 15:07:31 +000054
Skip Montanaro599bd5e2004-11-04 04:31:30 +000055 def test_sys_override(self):
56 # be sure a preset sys.exitfunc is handled properly
Skip Montanaro599bd5e2004-11-04 04:31:30 +000057 save_handlers = atexit._exithandlers
58 atexit._exithandlers = []
59 exfunc = sys.exitfunc
60 sys.exitfunc = self.h1
61 reload(atexit)
Steven Betharda7a3e282008-03-18 19:59:14 +000062 s = StringIO.StringIO()
63 sys.stdout = sys.stderr = s
Skip Montanaro599bd5e2004-11-04 04:31:30 +000064 try:
65 atexit.register(self.h2)
66 atexit._run_exitfuncs()
67 finally:
68 sys.stdout = sys.__stdout__
69 sys.stderr = sys.__stderr__
70 atexit._exithandlers = save_handlers
71 sys.exitfunc = exfunc
72 self.assertEqual(s.getvalue(), "h2\nh1\n")
Fred Drakec19425d2000-06-28 15:07:31 +000073
Skip Montanaro599bd5e2004-11-04 04:31:30 +000074 def test_raise(self):
75 # be sure raises are handled properly
76 s = StringIO.StringIO()
77 sys.stdout = sys.stderr = s
78 save_handlers = atexit._exithandlers
79 atexit._exithandlers = []
80 try:
81 atexit.register(self.raise1)
82 atexit.register(self.raise2)
83 self.assertRaises(TypeError, atexit._run_exitfuncs)
84 finally:
85 sys.stdout = sys.__stdout__
86 sys.stderr = sys.__stderr__
87 atexit._exithandlers = save_handlers
Tim Peters00afb072004-11-07 04:52:29 +000088
Skip Montanaro599bd5e2004-11-04 04:31:30 +000089 ### helpers
90 def h1(self):
91 print "h1"
Fred Drakec19425d2000-06-28 15:07:31 +000092
Skip Montanaro599bd5e2004-11-04 04:31:30 +000093 def h2(self):
94 print "h2"
Tim Peters012b69c2002-07-16 19:30:59 +000095
Skip Montanaro599bd5e2004-11-04 04:31:30 +000096 def h3(self):
97 print "h3"
Tim Peters012b69c2002-07-16 19:30:59 +000098
Skip Montanaro599bd5e2004-11-04 04:31:30 +000099 def h4(self, *args, **kwargs):
100 print "h4", args, kwargs
Tim Peters012b69c2002-07-16 19:30:59 +0000101
Skip Montanaro599bd5e2004-11-04 04:31:30 +0000102 def raise1(self):
103 raise TypeError
Tim Peters012b69c2002-07-16 19:30:59 +0000104
Skip Montanaro599bd5e2004-11-04 04:31:30 +0000105 def raise2(self):
106 raise SystemError
Tim Peters012b69c2002-07-16 19:30:59 +0000107
Skip Montanaro599bd5e2004-11-04 04:31:30 +0000108def test_main():
109 test_support.run_unittest(TestCase)
Tim Peters012b69c2002-07-16 19:30:59 +0000110
Tim Peters012b69c2002-07-16 19:30:59 +0000111
Skip Montanaro599bd5e2004-11-04 04:31:30 +0000112if __name__ == "__main__":
113 test_main()