| Tim Peters | c7b6bed | 2002-07-17 00:34:26 +0000 | [diff] [blame] | 1 | import sys | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 2 | import unittest | 
 | 3 | import StringIO | 
| Fred Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 4 | import atexit | 
| Antoine Pitrou | 868817e | 2009-10-14 17:34:31 +0000 | [diff] [blame] | 5 | from imp import reload | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 6 | from test import test_support | 
| Fred Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 7 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 8 | class TestCase(unittest.TestCase): | 
| Skip Montanaro | 0d8372b | 2008-10-07 01:55:20 +0000 | [diff] [blame] | 9 |     def setUp(self): | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 10 |         s = StringIO.StringIO() | 
| Skip Montanaro | 7d9d7a2 | 2008-10-07 15:03:40 +0000 | [diff] [blame] | 11 |         self.save_stdout = sys.stdout | 
 | 12 |         self.save_stderr = sys.stderr | 
| Skip Montanaro | 0d8372b | 2008-10-07 01:55:20 +0000 | [diff] [blame] | 13 |         sys.stdout = sys.stderr = self.subst_io = s | 
 | 14 |         self.save_handlers = atexit._exithandlers | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 15 |         atexit._exithandlers = [] | 
| Skip Montanaro | 0d8372b | 2008-10-07 01:55:20 +0000 | [diff] [blame] | 16 |  | 
 | 17 |     def tearDown(self): | 
| Skip Montanaro | 7d9d7a2 | 2008-10-07 15:03:40 +0000 | [diff] [blame] | 18 |         sys.stdout = self.save_stdout | 
 | 19 |         sys.stderr = self.save_stderr | 
| Skip Montanaro | 0d8372b | 2008-10-07 01:55:20 +0000 | [diff] [blame] | 20 |         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 Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 29 |  | 
| Benjamin Peterson | a74d675 | 2008-09-23 20:43:09 +0000 | [diff] [blame] | 30 |     def test_badargs(self): | 
| Skip Montanaro | 0d8372b | 2008-10-07 01:55:20 +0000 | [diff] [blame] | 31 |         atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0) | 
 | 32 |         self.assertRaises(TypeError, atexit._run_exitfuncs) | 
| Benjamin Peterson | a74d675 | 2008-09-23 20:43:09 +0000 | [diff] [blame] | 33 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 34 |     def test_order(self): | 
| Skip Montanaro | 0d8372b | 2008-10-07 01:55:20 +0000 | [diff] [blame] | 35 |         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 Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 40 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 41 |     def test_sys_override(self): | 
 | 42 |         # be sure a preset sys.exitfunc is handled properly | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 43 |         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 Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 50 |             sys.exitfunc = exfunc | 
| Skip Montanaro | 0d8372b | 2008-10-07 01:55:20 +0000 | [diff] [blame] | 51 |         self.assertEqual(self.subst_io.getvalue(), "h2\nh1\n") | 
| Fred Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 52 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 53 |     def test_raise(self): | 
| Skip Montanaro | 0d8372b | 2008-10-07 01:55:20 +0000 | [diff] [blame] | 54 |         atexit.register(self.raise1) | 
 | 55 |         atexit.register(self.raise2) | 
 | 56 |         self.assertRaises(TypeError, atexit._run_exitfuncs) | 
| Tim Peters | 00afb07 | 2004-11-07 04:52:29 +0000 | [diff] [blame] | 57 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 58 |     ### helpers | 
 | 59 |     def h1(self): | 
 | 60 |         print "h1" | 
| Fred Drake | c19425d | 2000-06-28 15:07:31 +0000 | [diff] [blame] | 61 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 62 |     def h2(self): | 
 | 63 |         print "h2" | 
| Tim Peters | 012b69c | 2002-07-16 19:30:59 +0000 | [diff] [blame] | 64 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 65 |     def h3(self): | 
 | 66 |         print "h3" | 
| Tim Peters | 012b69c | 2002-07-16 19:30:59 +0000 | [diff] [blame] | 67 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 68 |     def h4(self, *args, **kwargs): | 
 | 69 |         print "h4", args, kwargs | 
| Tim Peters | 012b69c | 2002-07-16 19:30:59 +0000 | [diff] [blame] | 70 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 71 |     def raise1(self): | 
 | 72 |         raise TypeError | 
| Tim Peters | 012b69c | 2002-07-16 19:30:59 +0000 | [diff] [blame] | 73 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 74 |     def raise2(self): | 
 | 75 |         raise SystemError | 
| Tim Peters | 012b69c | 2002-07-16 19:30:59 +0000 | [diff] [blame] | 76 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 77 | def test_main(): | 
 | 78 |     test_support.run_unittest(TestCase) | 
| Tim Peters | 012b69c | 2002-07-16 19:30:59 +0000 | [diff] [blame] | 79 |  | 
| Tim Peters | 012b69c | 2002-07-16 19:30:59 +0000 | [diff] [blame] | 80 |  | 
| Skip Montanaro | 599bd5e | 2004-11-04 04:31:30 +0000 | [diff] [blame] | 81 | if __name__ == "__main__": | 
 | 82 |     test_main() |