blob: 0ff6e53bdc5d790a3f43b2e44c6c66a2de9672c0 [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 Montanaro7d9d7a22008-10-07 15:03:40 +000010 self.save_stdout = sys.stdout
11 self.save_stderr = sys.stderr
Skip Montanaro0d8372b2008-10-07 01:55:20 +000012 sys.stdout = sys.stderr = self.subst_io = s
13 self.save_handlers = atexit._exithandlers
Skip Montanaro599bd5e2004-11-04 04:31:30 +000014 atexit._exithandlers = []
Skip Montanaro0d8372b2008-10-07 01:55:20 +000015
16 def tearDown(self):
Skip Montanaro7d9d7a22008-10-07 15:03:40 +000017 sys.stdout = self.save_stdout
18 sys.stderr = self.save_stderr
Skip Montanaro0d8372b2008-10-07 01:55:20 +000019 atexit._exithandlers = self.save_handlers
20
21 def test_args(self):
22 atexit.register(self.h1)
23 atexit.register(self.h4)
24 atexit.register(self.h4, 4, kw="abc")
25 atexit._run_exitfuncs()
26 self.assertEqual(self.subst_io.getvalue(),
27 "h4 (4,) {'kw': 'abc'}\nh4 () {}\nh1\n")
Fred Drakec19425d2000-06-28 15:07:31 +000028
Benjamin Petersona74d6752008-09-23 20:43:09 +000029 def test_badargs(self):
Skip Montanaro0d8372b2008-10-07 01:55:20 +000030 atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0)
31 self.assertRaises(TypeError, atexit._run_exitfuncs)
Benjamin Petersona74d6752008-09-23 20:43:09 +000032
Skip Montanaro599bd5e2004-11-04 04:31:30 +000033 def test_order(self):
Skip Montanaro0d8372b2008-10-07 01:55:20 +000034 atexit.register(self.h1)
35 atexit.register(self.h2)
36 atexit.register(self.h3)
37 atexit._run_exitfuncs()
38 self.assertEqual(self.subst_io.getvalue(), "h3\nh2\nh1\n")
Fred Drakec19425d2000-06-28 15:07:31 +000039
Skip Montanaro599bd5e2004-11-04 04:31:30 +000040 def test_sys_override(self):
41 # be sure a preset sys.exitfunc is handled properly
Skip Montanaro599bd5e2004-11-04 04:31:30 +000042 exfunc = sys.exitfunc
43 sys.exitfunc = self.h1
44 reload(atexit)
45 try:
46 atexit.register(self.h2)
47 atexit._run_exitfuncs()
48 finally:
Skip Montanaro599bd5e2004-11-04 04:31:30 +000049 sys.exitfunc = exfunc
Skip Montanaro0d8372b2008-10-07 01:55:20 +000050 self.assertEqual(self.subst_io.getvalue(), "h2\nh1\n")
Fred Drakec19425d2000-06-28 15:07:31 +000051
Skip Montanaro599bd5e2004-11-04 04:31:30 +000052 def test_raise(self):
Skip Montanaro0d8372b2008-10-07 01:55:20 +000053 atexit.register(self.raise1)
54 atexit.register(self.raise2)
55 self.assertRaises(TypeError, atexit._run_exitfuncs)
Tim Peters00afb072004-11-07 04:52:29 +000056
Skip Montanaro599bd5e2004-11-04 04:31:30 +000057 ### helpers
58 def h1(self):
59 print "h1"
Fred Drakec19425d2000-06-28 15:07:31 +000060
Skip Montanaro599bd5e2004-11-04 04:31:30 +000061 def h2(self):
62 print "h2"
Tim Peters012b69c2002-07-16 19:30:59 +000063
Skip Montanaro599bd5e2004-11-04 04:31:30 +000064 def h3(self):
65 print "h3"
Tim Peters012b69c2002-07-16 19:30:59 +000066
Skip Montanaro599bd5e2004-11-04 04:31:30 +000067 def h4(self, *args, **kwargs):
68 print "h4", args, kwargs
Tim Peters012b69c2002-07-16 19:30:59 +000069
Skip Montanaro599bd5e2004-11-04 04:31:30 +000070 def raise1(self):
71 raise TypeError
Tim Peters012b69c2002-07-16 19:30:59 +000072
Skip Montanaro599bd5e2004-11-04 04:31:30 +000073 def raise2(self):
74 raise SystemError
Tim Peters012b69c2002-07-16 19:30:59 +000075
Skip Montanaro599bd5e2004-11-04 04:31:30 +000076def test_main():
77 test_support.run_unittest(TestCase)
Tim Peters012b69c2002-07-16 19:30:59 +000078
Tim Peters012b69c2002-07-16 19:30:59 +000079
Skip Montanaro599bd5e2004-11-04 04:31:30 +000080if __name__ == "__main__":
81 test_main()