from idlelib import runscript
import unittest
+from unittest import mock
from test.support import requires
from tkinter import Tk
from idlelib.editor import EditorWindow
sb = runscript.ScriptBinding(ew)
ew._close()
+ def test_run_module_event_shell_busy_no_restart(self):
+ # gh-82183: running without restarting the busy shell aborts.
+ ew = EditorWindow(root=self.root)
+ sb = runscript.ScriptBinding(ew)
+ sb.getfilename = mock.Mock(return_value='test.py')
+ sb.checksyntax = mock.Mock(return_value='code')
+ sb.tabnanny = mock.Mock(return_value=True)
+ sb.shell = shell = mock.Mock()
+ shell.executing = True
+ interp = shell.interp
+ with mock.patch.object(runscript, 'CustomRun') as customrun:
+ # Restart shell unchecked.
+ customrun.return_value.result = (['arg'], False)
+ result = sb.run_module_event(None, customize=True)
+ self.assertEqual(result, 'break')
+ interp.display_executing_dialog.assert_called_once()
+ interp.restart_subprocess.assert_not_called()
+ interp.runcode.assert_not_called()
+ ew._close()
+
if __name__ == '__main__':
unittest.main(verbosity=2)
return 'break'
self.cli_args, restart = run_args if customize else ([], True)
interp = self.shell.interp
+ if self.shell.executing and not restart:
+ # Cannot run without restarting the busy shell (gh-82183).
+ interp.display_executing_dialog()
+ return 'break'
if pyshell.use_subprocess and restart:
interp.restart_subprocess(
with_cwd=False, filename=filename)