From 7f690c3f3f58202f4aab541350d2873d678e3aaf Mon Sep 17 00:00:00 2001 From: Ryan Roden-Corrent Date: Sun, 3 Jul 2016 22:58:09 -0400 Subject: [PATCH] More unit test coverage for Completer. Test completion_item{next,prev} and change_completed_part. --- tests/helpers/stubs.py | 6 +++- tests/unit/completion/test_completer.py | 41 +++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/tests/helpers/stubs.py b/tests/helpers/stubs.py index ad699f10f..f5f50a0ec 100644 --- a/tests/helpers/stubs.py +++ b/tests/helpers/stubs.py @@ -376,6 +376,7 @@ class FakeStatusbarCommand(QObject): super().__init__(parent) self._cursor_pos = 0 self._text = "" + self._focus = False def cursorPosition(self): return self._cursor_pos @@ -386,8 +387,11 @@ class FakeStatusbarCommand(QObject): def prefix(self): return self._text[0] + def focus(self): + return self._focus + def setFocus(self): - return None + self._focus = True def setText(self, x): self._text = x diff --git a/tests/unit/completion/test_completer.py b/tests/unit/completion/test_completer.py index 6f613ce7c..bb058a9af 100644 --- a/tests/unit/completion/test_completer.py +++ b/tests/unit/completion/test_completer.py @@ -19,6 +19,8 @@ """Tests for the Completer Object.""" +import unittest.mock + import pytest from PyQt5.QtGui import QStandardItemModel @@ -145,3 +147,42 @@ def test_update_completion(txt, expected, cmd, completer_obj, arg = completion_widget_stub.set_model.call_args[0][0] # the outer model is just for sorting; srcmodel is the completion model assert arg.srcmodel.kind == expected + +def test_completion_item_prev(completer_obj, cmd, completion_widget_stub, + config_stub): + """Test that completion_item_prev emits next_prev_item.""" + cmd.setText(':') + slot = unittest.mock.Mock() + completer_obj.next_prev_item.connect(slot) + completer_obj.completion_item_prev() + slot.assert_called_with(True) + +def test_completion_item_next(completer_obj, cmd, completion_widget_stub, + config_stub): + """Test that completion_item_next emits next_prev_item.""" + cmd.setText(':') + slot = unittest.mock.Mock() + completer_obj.next_prev_item.connect(slot) + completer_obj.completion_item_next() + slot.assert_called_with(False) + +@pytest.mark.parametrize('before, newtxt, immediate, after', [ + (':foo |', 'bar', False, ':foo bar|'), + (':foo |', 'bar', True, ':foo bar |'), + (':foo | bar', 'baz', False, ':foo baz| bar'), + (':foo | bar', 'baz', True, ':foo baz |bar'), +]) +def test_change_completed_part(before, newtxt, after, immediate, completer_obj, + cmd, completion_widget_stub, config_stub): + """Test that change_completed_part modifies the cmd text properly.""" + before_pos = before.index('|') + after_pos = after.index('|') + before_txt = before.replace('|', '') + after_txt = after.replace('|', '') + cmd.setText(before_txt) + cmd.setCursorPosition(before_pos) + completer_obj.update_cursor_part() + completer_obj.change_completed_part(newtxt, immediate) + assert cmd.focus() + assert cmd.text() == after_txt + assert cmd.cursorPosition() == after_pos