diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-01-14 10:29:48 +0100 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-01-14 10:29:48 +0100 |
commit | 32229f8b07a6773bdafff04ce2db582f9eefaf5e (patch) | |
tree | 79b78b0b9b713b5a6211696678407543c45bc8c3 | |
parent | f421eae5079c8e04f1c2adde5f733e6728760b1f (diff) | |
download | qutebrowser-32229f8b07a6773bdafff04ce2db582f9eefaf5e.tar.gz qutebrowser-32229f8b07a6773bdafff04ce2db582f9eefaf5e.zip |
guiprocess: Improve output for crashing processes
Before this change, we displayed two different error messages, one in
_on_error, one in _on_finished. See the screenshot here:
https://www.reddit.com/r/qutebrowser/comments/kwvaw8/setting_vim_as_editor_creates_error_message/
-rw-r--r-- | qutebrowser/misc/guiprocess.py | 9 | ||||
-rw-r--r-- | tests/unit/misc/test_guiprocess.py | 12 |
2 files changed, 18 insertions, 3 deletions
diff --git a/qutebrowser/misc/guiprocess.py b/qutebrowser/misc/guiprocess.py index 872a594f3..00948fe13 100644 --- a/qutebrowser/misc/guiprocess.py +++ b/qutebrowser/misc/guiprocess.py @@ -75,9 +75,12 @@ class GUIProcess(QObject): procenv.insert(k, v) self._proc.setProcessEnvironment(procenv) - @pyqtSlot() - def _on_error(self): + @pyqtSlot(QProcess.ProcessError) + def _on_error(self, error): """Show a message if there was an error while spawning.""" + if error == QProcess.Crashed: + # Already handled via ExitStatus in _on_finished + return msg = self._proc.errorString() message.error("Error while spawning {}: {}".format(self._what, msg)) @@ -101,7 +104,7 @@ class GUIProcess(QObject): message.error(stderr.strip()) if status == QProcess.CrashExit: - exitinfo = "{} crashed!".format(self._what.capitalize()) + exitinfo = "{} crashed.".format(self._what.capitalize()) message.error(exitinfo) elif status == QProcess.NormalExit and code == 0: exitinfo = "{} exited successfully.".format( diff --git a/tests/unit/misc/test_guiprocess.py b/tests/unit/misc/test_guiprocess.py index 4ed19f64e..e86eda5c4 100644 --- a/tests/unit/misc/test_guiprocess.py +++ b/tests/unit/misc/test_guiprocess.py @@ -237,6 +237,18 @@ def test_exit_unsuccessful(qtbot, proc, message_mock, py_proc, caplog): assert msg.text == expected +def test_exit_crash(qtbot, proc, message_mock, py_proc, caplog): + with caplog.at_level(logging.ERROR): + with qtbot.waitSignal(proc.finished, timeout=10000): + proc.start(*py_proc(""" + import os, signal + os.kill(os.getpid(), signal.SIGSEGV) + """)) + + msg = message_mock.getmsg(usertypes.MessageLevel.error) + assert msg.text == "Testprocess crashed." + + @pytest.mark.parametrize('stream', ['stdout', 'stderr']) def test_exit_unsuccessful_output(qtbot, proc, caplog, py_proc, stream): """When a process fails, its output should be logged.""" |