bpo-41468: Improve and test IDLE run error exit (GH-21798)

A message box pops up when an unexpected error stops the run process.  Tell users it is likely a random glitch, but report it if not.
(cherry picked from commit f2e161c279)

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
This commit is contained in:
Miss Islington (bot) 2020-08-09 13:26:21 -07:00 committed by GitHub
parent 6860cf5387
commit a9fa66377f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 49 additions and 10 deletions

View file

@ -1,9 +1,10 @@
"Test run, coverage 42%."
"Test run, coverage 49%."
from idlelib import run
import unittest
from unittest import mock
from test.support import captured_stderr
from idlelib.idle_test.mock_idle import Func
from test.support import captured_output, captured_stderr
import io
import sys
@ -323,5 +324,32 @@ class RecursionLimitTest(unittest.TestCase):
self.assertEqual(func.__doc__, "more")
class HandleErrorTest(unittest.TestCase):
# Method of MyRPCServer
func = Func()
@mock.patch('idlelib.run.thread.interrupt_main', new=func)
def test_error(self):
eq = self.assertEqual
with captured_output('__stderr__') as err:
try:
raise EOFError
except EOFError:
run.MyRPCServer.handle_error(None, 'abc', '123')
eq(run.exit_now, True)
run.exit_now = False
eq(err.getvalue(), '')
try:
raise IndexError
except IndexError:
run.MyRPCServer.handle_error(None, 'abc', '123')
eq(run.quitting, True)
run.quitting = False
msg = err.getvalue()
self.assertIn('abc', msg)
self.assertIn('123', msg)
self.assertIn('IndexError', msg)
eq(self.func.called, 2)
if __name__ == '__main__':
unittest.main(verbosity=2)