summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-01-16 11:06:39 +0100
committerFlorian Bruhin <me@the-compiler.org>2021-01-16 11:06:39 +0100
commit4aa0194b722bd25a52189997230817209b9e0e0b (patch)
tree87e73c0bca75616cae881a294ece22693641ed07
parent8431eecebb31af42628bf8a9906fcf1ea1b1cda3 (diff)
downloadqutebrowser-4aa0194b722bd25a52189997230817209b9e0e0b.tar.gz
qutebrowser-4aa0194b722bd25a52189997230817209b9e0e0b.zip
tests: Add question/signal support to messagemock
-rw-r--r--tests/helpers/messagemock.py48
1 files changed, 37 insertions, 11 deletions
diff --git a/tests/helpers/messagemock.py b/tests/helpers/messagemock.py
index 8eae9129c..a5642ef4d 100644
--- a/tests/helpers/messagemock.py
+++ b/tests/helpers/messagemock.py
@@ -23,6 +23,7 @@ import logging
import dataclasses
import pytest
+from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject
from qutebrowser.utils import usertypes, message
@@ -36,19 +37,28 @@ class Message:
text: str
-class MessageMock:
+class MessageMock(QObject):
"""Helper object for message_mock.
Attributes:
- Message: A object representing a message.
messages: A list of Message objects.
+ questions: A list of Question objects.
+ _logger: The logger to use for messages/questions.
"""
- def __init__(self):
+ got_message = pyqtSignal(usertypes.MessageLevel, str)
+ got_question = pyqtSignal(usertypes.Question)
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
self.messages = []
+ self.questions = []
+ self._logger = logging.getLogger('messagemock')
+ @pyqtSlot(usertypes.MessageLevel, str)
def _record_message(self, level, text):
+ self.got_message.emit(level, text)
log_levels = {
usertypes.MessageLevel.error: logging.ERROR,
usertypes.MessageLevel.info: logging.INFO,
@@ -56,13 +66,19 @@ class MessageMock:
}
log_level = log_levels[level]
- logging.getLogger('messagemock').log(log_level, text)
+ self._logger.log(log_level, text)
self.messages.append(Message(level, text))
+ @pyqtSlot(usertypes.Question)
+ def _record_question(self, question):
+ self.got_question.emit(question)
+ self._logger.debug(question)
+ self.questions.append(question)
+
def getmsg(self, level=None):
"""Get the only message in self.messages.
- Raises ValueError if there are multiple or no messages.
+ Raises AssertionError if there are multiple or no messages.
Args:
level: The message level to check against, or None.
@@ -73,20 +89,30 @@ class MessageMock:
assert msg.level == level
return msg
- def patch(self):
- """Start recording messages."""
+ def get_question(self):
+ """Get the only question in self.questions.
+
+ Raises AssertionError if there are multiple or no questions.
+ """
+ assert len(self.questions) == 1
+ return self.questions[0]
+
+ def connect(self):
+ """Start recording messages / questions."""
message.global_bridge.show_message.connect(self._record_message)
+ message.global_bridge.ask_question.connect(self._record_question)
message.global_bridge._connected = True
- def unpatch(self):
- """Stop recording messages."""
+ def disconnect(self):
+ """Stop recording messages/questions."""
message.global_bridge.show_message.disconnect(self._record_message)
+ message.global_bridge.ask_question.disconnect(self._record_question)
@pytest.fixture
def message_mock():
"""Fixture to get a MessageMock."""
mmock = MessageMock()
- mmock.patch()
+ mmock.connect()
yield mmock
- mmock.unpatch()
+ mmock.disconnect()