diff options
author | kotfu <kotfu@kotfu.net> | 2018-04-19 21:51:24 -0600 |
---|---|---|
committer | kotfu <kotfu@kotfu.net> | 2018-04-19 21:51:24 -0600 |
commit | 477666d0b3e097fb831729644b8861a983805981 (patch) | |
tree | 02217d3d2bb03499e511d8dd1774d161bb019a0f /tests/conftest.py | |
parent | b7cfb130c7c914478936366b748b04234b031119 (diff) | |
parent | 58fdd089cc064e71502dc1f094fd906d30523886 (diff) | |
download | cmd2-git-477666d0b3e097fb831729644b8861a983805981.tar.gz |
Merge branch 'master' into ply
Diffstat (limited to 'tests/conftest.py')
-rw-r--r-- | tests/conftest.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/conftest.py b/tests/conftest.py index 837e7504..ed76cba9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -8,9 +8,21 @@ Released under MIT license, see LICENSE file import sys from pytest import fixture +from unittest import mock import cmd2 +# Prefer statically linked gnureadline if available (for macOS compatibility due to issues with libedit) +try: + import gnureadline as readline +except ImportError: + # Try to import readline, but allow failure for convenience in Windows unit testing + # Note: If this actually fails, you should install readline on Linux or Mac or pyreadline on Windows + try: + # noinspection PyUnresolvedReferences + import readline + except ImportError: + pass # Help text for base cmd2.Cmd application BASE_HELP = """Documented commands (type help <topic>): @@ -141,3 +153,38 @@ def base_app(): c = cmd2.Cmd() c.stdout = StdOut() return c + + +def complete_tester(text, line, begidx, endidx, app): + """ + This is a convenience function to test cmd2.complete() since + in a unit test environment there is no actual console readline + is monitoring. Therefore we use mock to provide readline data + to complete(). + + :param text: str - the string prefix we are attempting to match + :param line: str - the current input line with leading whitespace removed + :param begidx: int - the beginning index of the prefix text + :param endidx: int - the ending index of the prefix text + :param app: the cmd2 app that will run completions + :return: The first matched string or None if there are no matches + Matches are stored in app.completion_matches + These matches also have been sorted by complete() + """ + def get_line(): + return line + + def get_begidx(): + return begidx + + def get_endidx(): + return endidx + + first_match = None + with mock.patch.object(readline, 'get_line_buffer', get_line): + with mock.patch.object(readline, 'get_begidx', get_begidx): + with mock.patch.object(readline, 'get_endidx', get_endidx): + # Run the readline tab-completion function with readline mocks in place + first_match = app.complete(text, 0) + + return first_match |