]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #12400: fix test_faulthandler if regrtest captures sys.stderr
authorVictor Stinner <victor.stinner@haypocalc.com>
Wed, 29 Jun 2011 11:44:05 +0000 (13:44 +0200)
committerVictor Stinner <victor.stinner@haypocalc.com>
Wed, 29 Jun 2011 11:44:05 +0000 (13:44 +0200)
faulthandler.enable() requires that sys.stderr has a fileno() method.

Lib/test/test_faulthandler.py

index 0ddfc7f66fa2564262775b76d95881a399431eca..291fac5126a4d7c0d4be5a624e233dbe43afc360 100644 (file)
@@ -1,6 +1,7 @@
 from contextlib import contextmanager
 import datetime
 import faulthandler
+import os
 import re
 import signal
 import subprocess
@@ -230,17 +231,30 @@ faulthandler._read_null()
         self.assertNotEqual(exitcode, 0)
 
     def test_is_enabled(self):
-        was_enabled = faulthandler.is_enabled()
+        null_stderr = None
+        orig_stderr = sys.stderr
         try:
-            faulthandler.enable()
-            self.assertTrue(faulthandler.is_enabled())
-            faulthandler.disable()
-            self.assertFalse(faulthandler.is_enabled())
-        finally:
-            if was_enabled:
+            # regrtest may replace sys.stderr by io.StringIO object, but
+            # faulthandler.enable() requires that sys.stderr has a fileno()
+            # method
+            null_stderr = open(os.devnull, 'w')
+            sys.stderr = null_stderr
+
+            was_enabled = faulthandler.is_enabled()
+            try:
                 faulthandler.enable()
-            else:
+                self.assertTrue(faulthandler.is_enabled())
                 faulthandler.disable()
+                self.assertFalse(faulthandler.is_enabled())
+            finally:
+                if was_enabled:
+                    faulthandler.enable()
+                else:
+                    faulthandler.disable()
+        finally:
+            sys.stderr = orig_stderr
+            if null_stderr is not None:
+                null_stderr.close()
 
     def check_dump_traceback(self, filename):
         """