blob: bf85b75253617426f043d3ffef8e23b8d487d322 [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
Antoine Pitrou868817e2009-10-14 17:34:31 +00005from imp import reload
Skip Montanaro599bd5e2004-11-04 04:31:30 +00006from test import test_support
Fred Drakec19425d2000-06-28 15:07:31 +00007
Skip Montanaro599bd5e2004-11-04 04:31:30 +00008class TestCase(unittest.TestCase):
Skip Montanaro0d8372b2008-10-07 01:55:20 +00009 def setUp(self):
Skip Montanaro599bd5e2004-11-04 04:31:30 +000010 s = StringIO.StringIO()
Skip Montanaro7d9d7a22008-10-07 15:03:40 +000011 self.save_stdout = sys.stdout
12 self.save_stderr = sys.stderr
Skip Montanaro0d8372b2008-10-07 01:55:20 +000013 sys.stdout = sys.stderr = self.subst_io = s
14 self.save_handlers = atexit._exithandlers
Skip Montanaro599bd5e2004-11-04 04:31:30 +000015 atexit._exithandlers = []
Skip Montanaro0d8372b2008-10-07 01:55:20 +000016
17 def tearDown(self):
Skip Montanaro7d9d7a22008-10-07 15:03:40 +000018 sys.stdout = self.save_stdout
19 sys.stderr = self.save_stderr
Skip Montanaro0d8372b2008-10-07 01:55:20 +000020 atexit._exithandlers = self.save_handlers
21
22 def test_args(self):
23 atexit.register(self.h1)
24 atexit.register(self.h4)
25 atexit.register(self.h4, 4, kw="abc")
26 atexit._run_exitfuncs()
27 self.assertEqual(self.subst_io.getvalue(),
28 "h4 (4,) {'kw': 'abc'}\nh4 () {}\nh1\n")
Fred Drakec19425d2000-06-28 15:07:31 +000029
Benjamin Petersona74d6752008-09-23 20:43:09 +000030 def test_badargs(self):
Skip Montanaro0d8372b2008-10-07 01:55:20 +000031 atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0)
32 self.assertRaises(TypeError, atexit._run_exitfuncs)
Benjamin Petersona74d6752008-09-23 20:43:09 +000033
Skip Montanaro599bd5e2004-11-04 04:31:30 +000034 def test_order(self):
Skip Montanaro0d8372b2008-10-07 01:55:20 +000035 atexit.register(self.h1)
36 atexit.register(self.h2)
37 atexit.register(self.h3)
38 atexit._run_exitfuncs()
39 self.assertEqual(self.subst_io.getvalue(), "h3\nh2\nh1\n")
Fred Drakec19425d2000-06-28 15:07:31 +000040
Skip Montanaro599bd5e2004-11-04 04:31:30 +000041 def test_sys_override(self):
42 # be sure a preset sys.exitfunc is handled properly
Skip Montanaro599bd5e2004-11-04 04:31:30 +000043 exfunc = sys.exitfunc
44 sys.exitfunc = self.h1
45 reload(atexit)
46 try:
47 atexit.register(self.h2)
48 atexit._run_exitfuncs()
49 finally:
Skip Montanaro599bd5e2004-11-04 04:31:30 +000050 sys.exitfunc = exfunc
Skip Montanaro0d8372b2008-10-07 01:55:20 +000051 self.assertEqual(self.subst_io.getvalue(), "h2\nh1\n")
Fred Drakec19425d2000-06-28 15:07:31 +000052
Skip Montanaro599bd5e2004-11-04 04:31:30 +000053 def test_raise(self):
Skip Montanaro0d8372b2008-10-07 01:55:20 +000054 atexit.register(self.raise1)
55 atexit.register(self.raise2)
56 self.assertRaises(TypeError, atexit._run_exitfuncs)
Tim Peters00afb072004-11-07 04:52:29 +000057
Skip Montanaro599bd5e2004-11-04 04:31:30 +000058 ### helpers
59 def h1(self):
60 print "h1"
Fred Drakec19425d2000-06-28 15:07:31 +000061
Skip Montanaro599bd5e2004-11-04 04:31:30 +000062 def h2(self):
63 print "h2"
Tim Peters012b69c2002-07-16 19:30:59 +000064
Skip Montanaro599bd5e2004-11-04 04:31:30 +000065 def h3(self):
66 print "h3"
Tim Peters012b69c2002-07-16 19:30:59 +000067
Skip Montanaro599bd5e2004-11-04 04:31:30 +000068 def h4(self, *args, **kwargs):
69 print "h4", args, kwargs
Tim Peters012b69c2002-07-16 19:30:59 +000070
Skip Montanaro599bd5e2004-11-04 04:31:30 +000071 def raise1(self):
72 raise TypeError
Tim Peters012b69c2002-07-16 19:30:59 +000073
Skip Montanaro599bd5e2004-11-04 04:31:30 +000074 def raise2(self):
75 raise SystemError
Tim Peters012b69c2002-07-16 19:30:59 +000076
Skip Montanaro599bd5e2004-11-04 04:31:30 +000077def test_main():
78 test_support.run_unittest(TestCase)
Tim Peters012b69c2002-07-16 19:30:59 +000079
Tim Peters012b69c2002-07-16 19:30:59 +000080
Skip Montanaro599bd5e2004-11-04 04:31:30 +000081if __name__ == "__main__":
82 test_main()