From 8cf7ef4333838e0812cdb25e13b60207b2146d7a Mon Sep 17 00:00:00 2001
From: Skip Montanaro <skip@pobox.com>
Date: Tue, 7 Oct 2008 02:05:00 +0000
Subject: [PATCH] backport

---
 Lib/test/test_atexit.py | 88 +++++++++++++----------------------------
 1 file changed, 27 insertions(+), 61 deletions(-)

diff --git a/Lib/test/test_atexit.py b/Lib/test/test_atexit.py
index a60dfa85b6b..3c6043d10c9 100644
--- a/Lib/test/test_atexit.py
+++ b/Lib/test/test_atexit.py
@@ -5,86 +5,52 @@ import atexit
 from test import test_support
 
 class TestCase(unittest.TestCase):
-    def test_args(self):
-        # be sure args are handled properly
+    def setUp(self):
         s = StringIO.StringIO()
-        sys.stdout = sys.stderr = s
-        save_handlers = atexit._exithandlers
+        sys.stdout = sys.stderr = self.subst_io = s
+        self.save_handlers = atexit._exithandlers
         atexit._exithandlers = []
-        try:
-            atexit.register(self.h1)
-            atexit.register(self.h4)
-            atexit.register(self.h4, 4, kw="abc")
-            atexit._run_exitfuncs()
-        finally:
-            sys.stdout = sys.__stdout__
-            sys.stderr = sys.__stderr__
-            atexit._exithandlers = save_handlers
-        self.assertEqual(s.getvalue(), "h4 (4,) {'kw': 'abc'}\nh4 () {}\nh1\n")
+
+    def tearDown(self):
+        sys.stdout = sys.__stdout__
+        sys.stderr = sys.__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):
-        s = StringIO.StringIO()
-        sys.stdout = sys.stderr = s
-        save_handlers = atexit._exithandlers
-        atexit._exithandlers = []
-        try:
-            atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0)
-            self.assertRaises(TypeError, atexit._run_exitfuncs)
-        finally:
-            sys.stdout = sys.__stdout__
-            sys.stderr = sys.__stderr__
-            atexit._exithandlers = save_handlers
+        atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0)
+        self.assertRaises(TypeError, atexit._run_exitfuncs)
 
     def test_order(self):
-        # be sure handlers are executed in reverse order
-        s = StringIO.StringIO()
-        sys.stdout = sys.stderr = s
-        save_handlers = atexit._exithandlers
-        atexit._exithandlers = []
-        try:
-            atexit.register(self.h1)
-            atexit.register(self.h2)
-            atexit.register(self.h3)
-            atexit._run_exitfuncs()
-        finally:
-            sys.stdout = sys.__stdout__
-            sys.stderr = sys.__stderr__
-            atexit._exithandlers = save_handlers
-        self.assertEqual(s.getvalue(), "h3\nh2\nh1\n")
+        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
-        save_handlers = atexit._exithandlers
-        atexit._exithandlers = []
         exfunc = sys.exitfunc
         sys.exitfunc = self.h1
         reload(atexit)
-        s = StringIO.StringIO()
-        sys.stdout = sys.stderr = s
         try:
             atexit.register(self.h2)
             atexit._run_exitfuncs()
         finally:
-            sys.stdout = sys.__stdout__
-            sys.stderr = sys.__stderr__
-            atexit._exithandlers = save_handlers
             sys.exitfunc = exfunc
-        self.assertEqual(s.getvalue(), "h2\nh1\n")
+        self.assertEqual(self.subst_io.getvalue(), "h2\nh1\n")
 
     def test_raise(self):
-        # be sure raises are handled properly
-        s = StringIO.StringIO()
-        sys.stdout = sys.stderr = s
-        save_handlers = atexit._exithandlers
-        atexit._exithandlers = []
-        try:
-            atexit.register(self.raise1)
-            atexit.register(self.raise2)
-            self.assertRaises(TypeError, atexit._run_exitfuncs)
-        finally:
-            sys.stdout = sys.__stdout__
-            sys.stderr = sys.__stderr__
-            atexit._exithandlers = save_handlers
+        atexit.register(self.raise1)
+        atexit.register(self.raise2)
+        self.assertRaises(TypeError, atexit._run_exitfuncs)
 
     ### helpers
     def h1(self):
-- 
2.30.9