blob: 3c6043d10c989e6dc47c4f840c03adcfb1a594c1 [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):
Skip Montanaro0d8372b2008-10-07 01:55:20 +00008 def setUp(self):
Skip Montanaro599bd5e2004-11-04 04:31:30 +00009 s = StringIO.StringIO()
Skip Montanaro0d8372b2008-10-07 01:55:20 +000010 sys.stdout = sys.stderr = self.subst_io = s
11 self.save_handlers = atexit._exithandlers
Skip Montanaro599bd5e2004-11-04 04:31:30 +000012 atexit._exithandlers = []
Skip Montanaro0d8372b2008-10-07 01:55:20 +000013
14 def tearDown(self):
15 sys.stdout = sys.__stdout__
16 sys.stderr = sys.__stderr__
17 atexit._exithandlers = self.save_handlers
18
19 def test_args(self):
20 atexit.register(self.h1)
21 atexit.register(self.h4)
22 atexit.register(self.h4, 4, kw="abc")
23 atexit._run_exitfuncs()
24 self.assertEqual(self.subst_io.getvalue(),
25 "h4 (4,) {'kw': 'abc'}\nh4 () {}\nh1\n")
Fred Drakec19425d2000-06-28 15:07:31 +000026
Benjamin Petersona74d6752008-09-23 20:43:09 +000027 def test_badargs(self):
Skip Montanaro0d8372b2008-10-07 01:55:20 +000028 atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0)
29 self.assertRaises(TypeError, atexit._run_exitfuncs)
Benjamin Petersona74d6752008-09-23 20:43:09 +000030
Skip Montanaro599bd5e2004-11-04 04:31:30 +000031 def test_order(self):
Skip Montanaro0d8372b2008-10-07 01:55:20 +000032 atexit.register(self.h1)
33 atexit.register(self.h2)
34 atexit.register(self.h3)
35 atexit._run_exitfuncs()
36 self.assertEqual(self.subst_io.getvalue(), "h3\nh2\nh1\n")
Fred Drakec19425d2000-06-28 15:07:31 +000037
Skip Montanaro599bd5e2004-11-04 04:31:30 +000038 def test_sys_override(self):
39 # be sure a preset sys.exitfunc is handled properly
Skip Montanaro599bd5e2004-11-04 04:31:30 +000040 exfunc = sys.exitfunc
41 sys.exitfunc = self.h1
42 reload(atexit)
43 try:
44 atexit.register(self.h2)
45 atexit._run_exitfuncs()
46 finally:
Skip Montanaro599bd5e2004-11-04 04:31:30 +000047 sys.exitfunc = exfunc
Skip Montanaro0d8372b2008-10-07 01:55:20 +000048 self.assertEqual(self.subst_io.getvalue(), "h2\nh1\n")
Fred Drakec19425d2000-06-28 15:07:31 +000049
Skip Montanaro599bd5e2004-11-04 04:31:30 +000050 def test_raise(self):
Skip Montanaro0d8372b2008-10-07 01:55:20 +000051 atexit.register(self.raise1)
52 atexit.register(self.raise2)
53 self.assertRaises(TypeError, atexit._run_exitfuncs)
Tim Peters00afb072004-11-07 04:52:29 +000054
Skip Montanaro599bd5e2004-11-04 04:31:30 +000055 ### helpers
56 def h1(self):
57 print "h1"
Fred Drakec19425d2000-06-28 15:07:31 +000058
Skip Montanaro599bd5e2004-11-04 04:31:30 +000059 def h2(self):
60 print "h2"
Tim Peters012b69c2002-07-16 19:30:59 +000061
Skip Montanaro599bd5e2004-11-04 04:31:30 +000062 def h3(self):
63 print "h3"
Tim Peters012b69c2002-07-16 19:30:59 +000064
Skip Montanaro599bd5e2004-11-04 04:31:30 +000065 def h4(self, *args, **kwargs):
66 print "h4", args, kwargs
Tim Peters012b69c2002-07-16 19:30:59 +000067
Skip Montanaro599bd5e2004-11-04 04:31:30 +000068 def raise1(self):
69 raise TypeError
Tim Peters012b69c2002-07-16 19:30:59 +000070
Skip Montanaro599bd5e2004-11-04 04:31:30 +000071 def raise2(self):
72 raise SystemError
Tim Peters012b69c2002-07-16 19:30:59 +000073
Skip Montanaro599bd5e2004-11-04 04:31:30 +000074def test_main():
75 test_support.run_unittest(TestCase)
Tim Peters012b69c2002-07-16 19:30:59 +000076
Tim Peters012b69c2002-07-16 19:30:59 +000077
Skip Montanaro599bd5e2004-11-04 04:31:30 +000078if __name__ == "__main__":
79 test_main()