summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-01-14 10:29:48 +0100
committerFlorian Bruhin <me@the-compiler.org>2021-01-14 10:29:48 +0100
commit32229f8b07a6773bdafff04ce2db582f9eefaf5e (patch)
tree79b78b0b9b713b5a6211696678407543c45bc8c3
parentf421eae5079c8e04f1c2adde5f733e6728760b1f (diff)
downloadqutebrowser-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.py9
-rw-r--r--tests/unit/misc/test_guiprocess.py12
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."""