diff --git a/bec_widgets/widgets/vscode/vscode.py b/bec_widgets/widgets/vscode/vscode.py index 63de3a68..a9c97052 100644 --- a/bec_widgets/widgets/vscode/vscode.py +++ b/bec_widgets/widgets/vscode/vscode.py @@ -60,7 +60,7 @@ class VSCodeEditor(WebsiteWidget): """ Cleanup the VSCode editor. """ - if not self.process: + if not self.process or self.process.poll() is not None: return os.killpg(os.getpgid(self.process.pid), signal.SIGTERM) self.process.wait() diff --git a/tests/unit_tests/test_vscode_widget.py b/tests/unit_tests/test_vscode_widget.py index bdd30093..641b3777 100644 --- a/tests/unit_tests/test_vscode_widget.py +++ b/tests/unit_tests/test_vscode_widget.py @@ -46,7 +46,8 @@ def test_start_server(qtbot, mocked_client): ) -def test_close_event(qtbot, vscode_widget): +@pytest.fixture +def patched_vscode_process(qtbot, vscode_widget): with mock.patch("bec_widgets.widgets.vscode.vscode.os.killpg") as mock_killpg: with mock.patch("bec_widgets.widgets.vscode.vscode.os.getpgid") as mock_getpgid: with mock.patch( @@ -54,8 +55,24 @@ def test_close_event(qtbot, vscode_widget): ) as mock_close_event: mock_getpgid.return_value = 123 vscode_widget.process = mock.Mock() - vscode_widget.process.pid = 123 - vscode_widget.closeEvent(None) - mock_killpg.assert_called_once_with(123, 15) - vscode_widget.process.wait.assert_called_once() - mock_close_event.assert_called_once() + yield vscode_widget, mock_killpg, mock_close_event + + +def test_close_event(qtbot, patched_vscode_process): + vscode_patched, mock_killpg, mock_close_event = patched_vscode_process + vscode_patched.process.pid = 123 + vscode_patched.process.poll.return_value = None + vscode_patched.closeEvent(None) + mock_killpg.assert_called_once_with(123, 15) + vscode_patched.process.wait.assert_called_once() + mock_close_event.assert_called_once() + + +def test_close_event_on_terminated_code(qtbot, patched_vscode_process): + vscode_patched, mock_killpg, mock_close_event = patched_vscode_process + vscode_patched.process.pid = 123 + vscode_patched.process.poll.return_value = 0 + vscode_patched.closeEvent(None) + mock_killpg.assert_not_called() + vscode_patched.process.wait.assert_not_called() + mock_close_event.assert_called_once()