summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTodd Leonhardt <todd.leonhardt@gmail.com>2018-01-20 18:04:43 -0500
committerTodd Leonhardt <todd.leonhardt@gmail.com>2018-01-20 18:04:43 -0500
commitbd948d727e0e13fa5fd77199c06fcd3dfdda9b39 (patch)
treebbb7ae35cb76becccddfe7dd4258c87b2c463b68 /tests
parent5550ab73a91d2834e6bda72eb3889998ad59be51 (diff)
downloadcmd2-git-bd948d727e0e13fa5fd77199c06fcd3dfdda9b39.tar.gz
Added unit tests for newly-overridden complete() method
Also added a section on Sub-commands to the documentation.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_completion.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/tests/test_completion.py b/tests/test_completion.py
index a0ee503c..f0efae62 100644
--- a/tests/test_completion.py
+++ b/tests/test_completion.py
@@ -10,9 +10,11 @@ Released under MIT license, see LICENSE file
"""
import argparse
import os
+import readline
import sys
import cmd2
+import mock
import pytest
@@ -36,6 +38,100 @@ def test_cmd2_command_completion_single_end(cmd2_app):
# It is at end of line, so extra space is present
assert cmd2_app.completenames(text, line, begidx, endidx) == ['help ']
+def test_complete_command_single_end(cmd2_app):
+ text = 'he'
+ line = 'he'
+ state = 0
+ endidx = len(line)
+ begidx = endidx - len(text)
+
+ def get_line():
+ return line
+
+ def get_begidx():
+ return begidx
+
+ def get_endidx():
+ return endidx
+
+ 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
+ completion = cmd2_app.complete(text, state)
+ assert completion == 'help '
+
+def test_complete_command_invalid_state(cmd2_app):
+ text = 'he'
+ line = 'he'
+ state = 1
+ endidx = len(line)
+ begidx = endidx - len(text)
+
+ def get_line():
+ return line
+
+ def get_begidx():
+ return begidx
+
+ def get_endidx():
+ return endidx
+
+ 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):
+ with pytest.raises(AttributeError):
+ # Run the readline tab-completion function with readline mocks in place and cause an exception
+ completion = cmd2_app.complete(text, state)
+
+def test_complete_empty_arg(cmd2_app):
+ text = ''
+ line = 'help '
+ state = 0
+ endidx = len(line)
+ begidx = endidx - len(text)
+
+ def get_line():
+ return line
+
+ def get_begidx():
+ return begidx
+
+ def get_endidx():
+ return endidx
+
+ 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
+ completion = cmd2_app.complete(text, state)
+
+ assert completion == cmd2_app.complete_help(text, line, begidx, endidx)[0]
+
+def test_complete_bogus_command(cmd2_app):
+ text = ''
+ line = 'fizbuzz '
+ state = 0
+ endidx = len(line)
+ begidx = endidx - len(text)
+
+ def get_line():
+ return line
+
+ def get_begidx():
+ return begidx
+
+ def get_endidx():
+ return endidx
+
+ 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
+ completion = cmd2_app.complete(text, state)
+
+ assert completion is None
+
def test_cmd2_command_completion_is_case_insensitive_by_default(cmd2_app):
text = 'HE'
line = 'HE'
@@ -420,3 +516,27 @@ def test_cmd2_subcommand_completion_after_subcommand(sc_app):
# It is at end of line, so extra space is present
assert sc_app.complete_subcommand(text, line, begidx, endidx) == []
+
+
+def test_complete_subcommand_single_end(sc_app):
+ text = 'f'
+ line = 'base f'
+ endidx = len(line)
+ begidx = endidx - len(text)
+ state = 0
+
+ def get_line():
+ return line
+
+ def get_begidx():
+ return begidx
+
+ def get_endidx():
+ return endidx
+
+ 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
+ completion = sc_app.complete(text, state)
+ assert completion == 'foo '