summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2022-06-14 16:51:58 +0200
committerFlorian Bruhin <me@the-compiler.org>2022-06-14 17:05:46 +0200
commit676e01677183825d19107d3b2fbf1bb2c0684ede (patch)
treea1ae1298c96b343decea1546cea05356c5545052
parent1d7b89fd0038198548c0a335d2d8676e8c5e0d9d (diff)
downloadqutebrowser-676e01677183825d19107d3b2fbf1bb2c0684ede.tar.gz
qutebrowser-676e01677183825d19107d3b2fbf1bb2c0684ede.zip
Only replace the exact same message
If we have a error message followed by an info message with the same text, they should both be shown, not replaced automatically.
-rw-r--r--qutebrowser/mainwindow/messageview.py8
-rw-r--r--tests/unit/mainwindow/test_messageview.py42
2 files changed, 41 insertions, 9 deletions
diff --git a/qutebrowser/mainwindow/messageview.py b/qutebrowser/mainwindow/messageview.py
index 752cc9db7..b3df0211a 100644
--- a/qutebrowser/mainwindow/messageview.py
+++ b/qutebrowser/mainwindow/messageview.py
@@ -120,7 +120,7 @@ class MessageView(QWidget):
self._clear_timer.timeout.connect(self.clear_messages)
config.instance.changed.connect(self._set_clear_timer_interval)
- self._last_text = None
+ self._last_info = None
@config.change_filter('messages.timeout')
def _set_clear_timer_interval(self):
@@ -142,14 +142,14 @@ class MessageView(QWidget):
for widget in self._messages:
self._remove_message(widget)
self._messages = []
- self._last_text = None
+ self._last_info = None
self.hide()
self._clear_timer.stop()
@pyqtSlot(message.MessageInfo)
def show_message(self, info: message.MessageInfo) -> None:
"""Show the given message with the given MessageLevel."""
- if info.text == self._last_text:
+ if info == self._last_info:
return
if info.replace is not None:
@@ -164,7 +164,7 @@ class MessageView(QWidget):
self._vbox.addWidget(widget)
widget.show()
self._messages.append(widget)
- self._last_text = info.text
+ self._last_info = info
self.show()
self.update_geometry.emit()
if config.val.messages.timeout != 0:
diff --git a/tests/unit/mainwindow/test_messageview.py b/tests/unit/mainwindow/test_messageview.py
index 32bd638c7..5ba0e4ffc 100644
--- a/tests/unit/mainwindow/test_messageview.py
+++ b/tests/unit/mainwindow/test_messageview.py
@@ -122,11 +122,43 @@ def test_rich_text(view, qtbot, rich, higher, expected_format, replace):
assert height2 == height1
-def test_show_message_twice(view):
- """Show the same message twice -> only one should be shown."""
- view.show_message(message.MessageInfo(usertypes.MessageLevel.info, 'test'))
- view.show_message(message.MessageInfo(usertypes.MessageLevel.info, 'test'))
- assert len(view._messages) == 1
+@pytest.mark.parametrize("info1, info2, count", [
+ # same
+ (
+ message.MessageInfo(usertypes.MessageLevel.info, 'test'),
+ message.MessageInfo(usertypes.MessageLevel.info, 'test'),
+ 1,
+ ),
+ # different text
+ (
+ message.MessageInfo(usertypes.MessageLevel.info, 'test'),
+ message.MessageInfo(usertypes.MessageLevel.info, 'test2'),
+ 2,
+ ),
+ # different level
+ (
+ message.MessageInfo(usertypes.MessageLevel.info, 'test'),
+ message.MessageInfo(usertypes.MessageLevel.error, 'test'),
+ 2,
+ ),
+ # different rich text
+ (
+ message.MessageInfo(usertypes.MessageLevel.info, 'test', rich=True),
+ message.MessageInfo(usertypes.MessageLevel.info, 'test', rich=False),
+ 2,
+ ),
+ # different replaces
+ (
+ message.MessageInfo(usertypes.MessageLevel.info, 'test'),
+ message.MessageInfo(usertypes.MessageLevel.info, 'test', replace='test'),
+ 2,
+ ),
+])
+def test_show_message_twice(view, info1, info2, count):
+ """Show the exact same message twice -> only one should be shown."""
+ view.show_message(info1)
+ view.show_message(info2)
+ assert len(view._messages) == count
def test_show_message_twice_after_first_disappears(qtbot, view):