From c048a48b788af535d05ebb90288d76f2d3e308bf Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 31 Jul 2020 15:50:29 +0200 Subject: [PATCH] Add a test for ignoring _toggle_sel_translate --- qutebrowser/browser/webengine/webenginetab.py | 2 ++ tests/unit/browser/test_caret.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index ebce1e0fe..fe4d37745 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -535,6 +535,8 @@ class WebEngineCaret(browsertab.AbstractCaret): # This may happen if the user switches to another mode after # `:toggle-selection` is executed and before this callback function # is asynchronously called. + log.misc.debug("Ignoring caret selection callback in {}".format( + self._mode_manager.mode)) return if state_str is None: message.error("Error toggling caret selection") diff --git a/tests/unit/browser/test_caret.py b/tests/unit/browser/test_caret.py index 7d1325612..75d9fee09 100644 --- a/tests/unit/browser/test_caret.py +++ b/tests/unit/browser/test_caret.py @@ -99,6 +99,21 @@ def test_toggle(caret, selection, qtbot): assert selection.toggle() == browsertab.SelectionState.none +def test_selection_callback_wrong_mode(qtbot, caplog, + webengine_tab, mode_manager): + """Test what calling the selection callback outside of caret mode. + + It should be ignored, as something could have left caret mode while the + async callback was happening, so we don't want to mess with the status bar. + """ + assert mode_manager.mode == usertypes.KeyMode.normal + with qtbot.assertNotEmitted(webengine_tab.caret.selection_toggled): + webengine_tab.caret._toggle_sel_translate('normal') + + msg = 'Ignoring caret selection callback in KeyMode.normal' + assert caplog.messages == [msg] + + class TestDocument: def test_selecting_entire_document(self, caret, selection):