+++ /dev/null
-import sys\r
-import unittest\r
-import StringIO\r
-import atexit\r
-from imp import reload\r
-from test import test_support\r
-\r
-class TestCase(unittest.TestCase):\r
- def setUp(self):\r
- s = StringIO.StringIO()\r
- self.save_stdout = sys.stdout\r
- self.save_stderr = sys.stderr\r
- sys.stdout = sys.stderr = self.subst_io = s\r
- self.save_handlers = atexit._exithandlers\r
- atexit._exithandlers = []\r
-\r
- def tearDown(self):\r
- sys.stdout = self.save_stdout\r
- sys.stderr = self.save_stderr\r
- atexit._exithandlers = self.save_handlers\r
-\r
- def test_args(self):\r
- atexit.register(self.h1)\r
- atexit.register(self.h4)\r
- atexit.register(self.h4, 4, kw="abc")\r
- atexit._run_exitfuncs()\r
- self.assertEqual(self.subst_io.getvalue(),\r
- "h4 (4,) {'kw': 'abc'}\nh4 () {}\nh1\n")\r
-\r
- def test_badargs(self):\r
- atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0)\r
- self.assertRaises(TypeError, atexit._run_exitfuncs)\r
-\r
- def test_order(self):\r
- atexit.register(self.h1)\r
- atexit.register(self.h2)\r
- atexit.register(self.h3)\r
- atexit._run_exitfuncs()\r
- self.assertEqual(self.subst_io.getvalue(), "h3\nh2\nh1\n")\r
-\r
- def test_sys_override(self):\r
- # be sure a preset sys.exitfunc is handled properly\r
- exfunc = sys.exitfunc\r
- sys.exitfunc = self.h1\r
- reload(atexit)\r
- try:\r
- atexit.register(self.h2)\r
- atexit._run_exitfuncs()\r
- finally:\r
- sys.exitfunc = exfunc\r
- self.assertEqual(self.subst_io.getvalue(), "h2\nh1\n")\r
-\r
- def test_raise(self):\r
- atexit.register(self.raise1)\r
- atexit.register(self.raise2)\r
- self.assertRaises(TypeError, atexit._run_exitfuncs)\r
-\r
- ### helpers\r
- def h1(self):\r
- print "h1"\r
-\r
- def h2(self):\r
- print "h2"\r
-\r
- def h3(self):\r
- print "h3"\r
-\r
- def h4(self, *args, **kwargs):\r
- print "h4", args, kwargs\r
-\r
- def raise1(self):\r
- raise TypeError\r
-\r
- def raise2(self):\r
- raise SystemError\r
-\r
-def test_main():\r
- test_support.run_unittest(TestCase)\r
-\r
-\r
-if __name__ == "__main__":\r
- test_main()\r