summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/idle_test
diff options
context:
space:
mode:
authorKen <kenny2minecraft@gmail.com>2021-01-26 23:55:52 (GMT)
committerGitHub <noreply@github.com>2021-01-26 23:55:52 (GMT)
commit7a34380ad788886f5ad50d4175ceb2d5715b8cff (patch)
tree42800303219784df692b2da574a65e5700fa5557 /Lib/idlelib/idle_test
parent01faf4542a8652adfbd3b3f897ba718e8ce43f5e (diff)
downloadcpython-7a34380ad788886f5ad50d4175ceb2d5715b8cff.zip
cpython-7a34380ad788886f5ad50d4175ceb2d5715b8cff.tar.gz
cpython-7a34380ad788886f5ad50d4175ceb2d5715b8cff.tar.bz2
bpo-43008: Make IDLE respect sys.excepthook (GH-24302)
Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
Diffstat (limited to 'Lib/idlelib/idle_test')
-rw-r--r--Lib/idlelib/idle_test/test_run.py43
1 files changed, 39 insertions, 4 deletions
diff --git a/Lib/idlelib/idle_test/test_run.py b/Lib/idlelib/idle_test/test_run.py
index 37c0d45..a31671e 100644
--- a/Lib/idlelib/idle_test/test_run.py
+++ b/Lib/idlelib/idle_test/test_run.py
@@ -1,16 +1,18 @@
"Test run, coverage 49%."
from idlelib import run
+import io
+import sys
+from test.support import captured_output, captured_stderr
import unittest
from unittest import mock
+import idlelib
from idlelib.idle_test.mock_idle import Func
-from test.support import captured_output, captured_stderr
-import io
-import sys
+idlelib.testing = True # Use {} for executing test user code.
-class RunTest(unittest.TestCase):
+class PrintExceptionTest(unittest.TestCase):
def test_print_exception_unhashable(self):
class UnhashableException(Exception):
@@ -351,5 +353,38 @@ class HandleErrorTest(unittest.TestCase):
self.assertIn('IndexError', msg)
eq(func.called, 2)
+
+class ExecRuncodeTest(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls.addClassCleanup(setattr,run,'print_exception',run.print_exception)
+ cls.prt = Func() # Need reference.
+ run.print_exception = cls.prt
+ mockrpc = mock.Mock()
+ mockrpc.console.getvar = Func(result=False)
+ cls.ex = run.Executive(mockrpc)
+
+ @classmethod
+ def tearDownClass(cls):
+ assert sys.excepthook == sys.__excepthook__
+
+ def test_exceptions(self):
+ ex = self.ex
+ ex.runcode('1/0')
+ self.assertIs(ex.user_exc_info[0], ZeroDivisionError)
+
+ self.addCleanup(setattr, sys, 'excepthook', sys.__excepthook__)
+ sys.excepthook = lambda t, e, tb: run.print_exception(t)
+ ex.runcode('1/0')
+ self.assertIs(self.prt.args[0], ZeroDivisionError)
+
+ sys.excepthook = lambda: None
+ ex.runcode('1/0')
+ t, e, tb = ex.user_exc_info
+ self.assertIs(t, TypeError)
+ self.assertTrue(isinstance(e.__context__, ZeroDivisionError))
+
+
if __name__ == '__main__':
unittest.main(verbosity=2)