summaryrefslogtreecommitdiff
path: root/lib/python2.7/test/test_atexit.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/test/test_atexit.py')
-rw-r--r--lib/python2.7/test/test_atexit.py82
1 files changed, 82 insertions, 0 deletions
diff --git a/lib/python2.7/test/test_atexit.py b/lib/python2.7/test/test_atexit.py
new file mode 100644
index 0000000..bf85b75
--- /dev/null
+++ b/lib/python2.7/test/test_atexit.py
@@ -0,0 +1,82 @@
+import sys
+import unittest
+import StringIO
+import atexit
+from imp import reload
+from test import test_support
+
+class TestCase(unittest.TestCase):
+ def setUp(self):
+ s = StringIO.StringIO()
+ self.save_stdout = sys.stdout
+ self.save_stderr = sys.stderr
+ sys.stdout = sys.stderr = self.subst_io = s
+ self.save_handlers = atexit._exithandlers
+ atexit._exithandlers = []
+
+ def tearDown(self):
+ sys.stdout = self.save_stdout
+ sys.stderr = self.save_stderr
+ atexit._exithandlers = self.save_handlers
+
+ def test_args(self):
+ atexit.register(self.h1)
+ atexit.register(self.h4)
+ atexit.register(self.h4, 4, kw="abc")
+ atexit._run_exitfuncs()
+ self.assertEqual(self.subst_io.getvalue(),
+ "h4 (4,) {'kw': 'abc'}\nh4 () {}\nh1\n")
+
+ def test_badargs(self):
+ atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0)
+ self.assertRaises(TypeError, atexit._run_exitfuncs)
+
+ def test_order(self):
+ atexit.register(self.h1)
+ atexit.register(self.h2)
+ atexit.register(self.h3)
+ atexit._run_exitfuncs()
+ self.assertEqual(self.subst_io.getvalue(), "h3\nh2\nh1\n")
+
+ def test_sys_override(self):
+ # be sure a preset sys.exitfunc is handled properly
+ exfunc = sys.exitfunc
+ sys.exitfunc = self.h1
+ reload(atexit)
+ try:
+ atexit.register(self.h2)
+ atexit._run_exitfuncs()
+ finally:
+ sys.exitfunc = exfunc
+ self.assertEqual(self.subst_io.getvalue(), "h2\nh1\n")
+
+ def test_raise(self):
+ atexit.register(self.raise1)
+ atexit.register(self.raise2)
+ self.assertRaises(TypeError, atexit._run_exitfuncs)
+
+ ### helpers
+ def h1(self):
+ print "h1"
+
+ def h2(self):
+ print "h2"
+
+ def h3(self):
+ print "h3"
+
+ def h4(self, *args, **kwargs):
+ print "h4", args, kwargs
+
+ def raise1(self):
+ raise TypeError
+
+ def raise2(self):
+ raise SystemError
+
+def test_main():
+ test_support.run_unittest(TestCase)
+
+
+if __name__ == "__main__":
+ test_main()