From 676e01677183825d19107d3b2fbf1bb2c0684ede Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 14 Jun 2022 16:51:58 +0200 Subject: 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. --- qutebrowser/mainwindow/messageview.py | 8 +++--- tests/unit/mainwindow/test_messageview.py | 42 +++++++++++++++++++++++++++---- 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): -- cgit v1.2.3-54-g00ecf