Simplify message_mock usage and assert more things.
This commit is contained in:
parent
685bbaae6d
commit
086c6c81a1
@ -43,8 +43,11 @@ class MessageMock:
|
||||
Message: A namedtuple representing a message.
|
||||
messages: A list of Message tuples.
|
||||
caplog: The pytest-capturelog fixture.
|
||||
Level: The Level type for easier usage as a fixture.
|
||||
"""
|
||||
|
||||
Level = Level
|
||||
|
||||
def __init__(self, monkeypatch, caplog):
|
||||
self._monkeypatch = monkeypatch
|
||||
self._caplog = caplog
|
||||
@ -72,15 +75,25 @@ class MessageMock:
|
||||
def _handle_warning(self, *args, **kwargs):
|
||||
self._handle(Level.warning, *args, **kwargs)
|
||||
|
||||
def getmsg(self):
|
||||
def getmsg(self, level=None, *, win_id=0, immediate=False):
|
||||
"""Get the only message in self.messages.
|
||||
|
||||
Raises ValueError if there are multiple or no messages.
|
||||
|
||||
Args:
|
||||
level: The message level to check against, or None.
|
||||
win_id: The window id to check against.
|
||||
immediate: If the message has the immediate flag set.
|
||||
"""
|
||||
if len(self.messages) != 1:
|
||||
raise ValueError("Got {} messages but expected a single "
|
||||
"one.".format(len(self.messages)))
|
||||
return self.messages[0]
|
||||
assert len(self.messages) == 1
|
||||
msg = self.messages[0]
|
||||
|
||||
if level is not None:
|
||||
assert msg.level == level
|
||||
assert msg.win_id == win_id
|
||||
assert msg.immediate == immediate
|
||||
|
||||
return msg
|
||||
|
||||
def patch(self, module_path):
|
||||
"""Patch message.* in the given module (as a string)."""
|
||||
|
@ -26,7 +26,6 @@ from unittest import mock
|
||||
|
||||
from PyQt5.QtCore import QProcess
|
||||
import pytest
|
||||
from helpers import messagemock
|
||||
|
||||
from qutebrowser.misc import editor as editormod
|
||||
|
||||
@ -116,8 +115,7 @@ class TestFileHandling:
|
||||
os.chmod(filename, 0o077)
|
||||
editor._proc.finished.emit(0, QProcess.NormalExit)
|
||||
assert not os.path.exists(filename)
|
||||
msg = message_mock.getmsg()
|
||||
assert msg.level == messagemock.Level.error
|
||||
msg = message_mock.getmsg(message_mock.Level.error)
|
||||
assert msg.text.startswith("Failed to read back edited file: ")
|
||||
|
||||
def test_unwritable(self, monkeypatch, message_mock, editor, tmpdir):
|
||||
@ -126,8 +124,7 @@ class TestFileHandling:
|
||||
monkeypatch.setattr('qutebrowser.misc.editor.tempfile.tempdir',
|
||||
str(tmpdir))
|
||||
editor.edit("")
|
||||
msg = message_mock.getmsg()
|
||||
assert msg.level == messagemock.Level.error
|
||||
msg = message_mock.getmsg(message_mock.Level.error)
|
||||
assert msg.text.startswith("Failed to create initial file: ")
|
||||
assert editor._proc is None
|
||||
|
||||
|
@ -28,13 +28,9 @@ import logging
|
||||
import pytest
|
||||
from PyQt5.QtCore import QProcess, QIODevice
|
||||
|
||||
from helpers import messagemock # pylint: disable=import-error
|
||||
from qutebrowser.misc import guiprocess
|
||||
|
||||
|
||||
# FIXME check statusbar messages
|
||||
|
||||
|
||||
def _py_proc(code):
|
||||
"""Get a python executable and args list which executes the given code."""
|
||||
return (sys.executable, ['-c', textwrap.dedent(code.strip('\n'))])
|
||||
@ -92,8 +88,8 @@ def test_start_verbose(proc, qtbot, guiprocess_message_mock):
|
||||
proc.start(*argv)
|
||||
|
||||
msgs = guiprocess_message_mock.messages
|
||||
assert msgs[0].level == messagemock.Level.info
|
||||
assert msgs[1].level == messagemock.Level.info
|
||||
assert msgs[0].level == guiprocess_message_mock.Level.info
|
||||
assert msgs[1].level == guiprocess_message_mock.Level.info
|
||||
assert msgs[0].text.startswith("Executing:")
|
||||
assert msgs[1].text == "Testprocess exited successfully."
|
||||
assert bytes(proc._proc.readAll()).rstrip() == b'test'
|
||||
@ -151,8 +147,8 @@ def test_start_detached_error(fake_proc, guiprocess_message_mock):
|
||||
fake_proc._proc.startDetached.return_value = (False, 0)
|
||||
fake_proc._proc.error.return_value = "Error message"
|
||||
fake_proc.start_detached(*argv)
|
||||
msg = guiprocess_message_mock.getmsg()
|
||||
assert msg.level == messagemock.Level.error
|
||||
msg = guiprocess_message_mock.getmsg(guiprocess_message_mock.Level.error,
|
||||
immediate=True)
|
||||
assert msg.text == "Error while spawning testprocess: Error message."
|
||||
|
||||
|
||||
@ -193,8 +189,8 @@ def test_error(qtbot, proc, caplog, guiprocess_message_mock):
|
||||
with qtbot.waitSignal(proc.error, raising=True):
|
||||
proc.start('this_does_not_exist_either', [])
|
||||
|
||||
msg = guiprocess_message_mock.getmsg()
|
||||
assert msg.level == messagemock.Level.error
|
||||
msg = guiprocess_message_mock.getmsg(guiprocess_message_mock.Level.error,
|
||||
immediate=True)
|
||||
expected_msg = ("Error while spawning testprocess: The process failed to "
|
||||
"start.")
|
||||
assert msg.text == expected_msg
|
||||
@ -205,6 +201,5 @@ def test_exit_unsuccessful(qtbot, proc, guiprocess_message_mock):
|
||||
with qtbot.waitSignal(proc.finished, raising=True, timeout=10000):
|
||||
proc.start(*_py_proc('import sys; sys.exit(1)'))
|
||||
|
||||
msg = guiprocess_message_mock.getmsg()
|
||||
assert msg.level == messagemock.Level.error
|
||||
msg = guiprocess_message_mock.getmsg(guiprocess_message_mock.Level.error)
|
||||
assert msg.text == "Testprocess exited with status 1."
|
||||
|
@ -384,9 +384,7 @@ def test_invalid_url_error(urlutils_message_mock, url, valid, has_err_string):
|
||||
assert bool(qurl.errorString()) == has_err_string
|
||||
urlutils.invalid_url_error(0, qurl, 'frozzle')
|
||||
|
||||
msg = urlutils_message_mock.getmsg()
|
||||
assert msg.win_id == 0
|
||||
assert not msg.immediate
|
||||
msg = urlutils_message_mock.getmsg(urlutils_message_mock.Level.error)
|
||||
if has_err_string:
|
||||
expected_text = ("Trying to frozzle with invalid URL - " +
|
||||
qurl.errorString())
|
||||
|
Loading…
Reference in New Issue
Block a user