summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/conftest.py18
-rw-r--r--tests/test_argparse.py2
-rw-r--r--tests/test_cmd2.py37
-rw-r--r--tests/test_completion.py66
-rw-r--r--tests/test_pyscript.py10
5 files changed, 81 insertions, 52 deletions
diff --git a/tests/conftest.py b/tests/conftest.py
index 949d5419..93348098 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -38,16 +38,16 @@ Documented commands (type help <topic>):
================================================================================
alias Manage aliases
edit Edit a file in a text editor
-help List available commands with "help" or detailed help with "help cmd"
+help List available commands or provide detailed help for a specific command
history View, run, edit, save, or clear previously entered commands
-load Runs commands in script file that is encoded as either ASCII or UTF-8 text
+load Run commands in script file that is encoded as either ASCII or UTF-8 text
macro Manage macros
-py Invoke python command, shell, or script
-pyscript Runs a python script file inside the console
-quit Exits this application
-set Sets a settable parameter or shows current settings of parameters
+py Invoke Python command or shell
+pyscript Run a Python script file inside the console
+quit Exit this application
+set Set a settable parameter or show current settings of parameters
shell Execute a command as if at the OS prompt
-shortcuts Lists shortcuts available
+shortcuts List available shortcuts
"""
# Help text for the history command
@@ -66,12 +66,12 @@ optional arguments:
-h, --help show this help message and exit
-r, --run run selected history items
-e, --edit edit and then run selected history items
- -s, --script script format; no separation lines
+ -s, --script output commands in script format
-o, --output-file FILE
output commands to a script file
-t, --transcript TRANSCRIPT
output commands and results to a transcript file
- -c, --clear clears all history
+ -c, --clear clear all history
"""
# Output from the shortcuts command with default built-in shortcuts
diff --git a/tests/test_argparse.py b/tests/test_argparse.py
index 0939859a..fdd16bcc 100644
--- a/tests/test_argparse.py
+++ b/tests/test_argparse.py
@@ -217,7 +217,7 @@ class SubcommandApp(cmd2.Cmd):
func(self, args)
else:
# No subcommand was provided, so call help
- self.do_help(['base'])
+ self.do_help('base')
@pytest.fixture
def subcommand_app():
diff --git a/tests/test_cmd2.py b/tests/test_cmd2.py
index daca3087..a87cba18 100644
--- a/tests/test_cmd2.py
+++ b/tests/test_cmd2.py
@@ -70,7 +70,7 @@ def test_base_argparse_help(base_app, capsys):
assert out1 == out2
assert out1[0].startswith('Usage: set')
assert out1[1] == ''
- assert out1[2].startswith('Sets a settable parameter')
+ assert out1[2].startswith('Set a settable parameter')
def test_base_invalid_option(base_app, capsys):
run_cmd(base_app, 'set -z')
@@ -247,7 +247,7 @@ def test_pyscript_with_exception(base_app, capsys, request):
def test_pyscript_requires_an_argument(base_app, capsys):
run_cmd(base_app, "pyscript")
out, err = capsys.readouterr()
- assert err.startswith('ERROR: pyscript command requires at least 1 argument ...')
+ assert "the following arguments are required: script_path" in err
def test_base_error(base_app):
@@ -477,7 +477,7 @@ def test_load_with_empty_args(base_app, capsys):
out, err = capsys.readouterr()
# The load command requires a file path argument, so we should get an error message
- assert "load command requires a file path" in str(err)
+ assert "the following arguments are required" in str(err)
assert base_app.cmdqueue == []
@@ -614,8 +614,7 @@ def test_base_relative_load(base_app, request):
def test_relative_load_requires_an_argument(base_app, capsys):
run_cmd(base_app, '_relative_load')
out, err = capsys.readouterr()
- assert out == ''
- assert err.startswith('ERROR: _relative_load command requires a file path:\n')
+ assert 'Error: the following arguments' in err
assert base_app.cmdqueue == []
@@ -858,7 +857,8 @@ def test_edit_file(base_app, request, monkeypatch):
run_cmd(base_app, 'edit {}'.format(filename))
# We think we have an editor, so should expect a system call
- m.assert_called_once_with('"{}" "{}"'.format(base_app.editor, filename))
+ m.assert_called_once_with('{} {}'.format(utils.quote_string_if_needed(base_app.editor),
+ utils.quote_string_if_needed(filename)))
def test_edit_file_with_spaces(base_app, request, monkeypatch):
# Set a fake editor just to make sure we have one. We aren't really going to call it due to the mock
@@ -874,7 +874,8 @@ def test_edit_file_with_spaces(base_app, request, monkeypatch):
run_cmd(base_app, 'edit "{}"'.format(filename))
# We think we have an editor, so should expect a system call
- m.assert_called_once_with('"{}" "{}"'.format(base_app.editor, filename))
+ m.assert_called_once_with('{} {}'.format(utils.quote_string_if_needed(base_app.editor),
+ utils.quote_string_if_needed(filename)))
def test_edit_blank(base_app, monkeypatch):
# Set a fake editor just to make sure we have one. We aren't really going to call it due to the mock
@@ -1250,16 +1251,16 @@ diddly This command does diddly
Other
================================================================================
alias Manage aliases
-help List available commands with "help" or detailed help with "help cmd"
+help List available commands or provide detailed help for a specific command
history View, run, edit, save, or clear previously entered commands
-load Runs commands in script file that is encoded as either ASCII or UTF-8 text
+load Run commands in script file that is encoded as either ASCII or UTF-8 text
macro Manage macros
-py Invoke python command, shell, or script
-pyscript Runs a python script file inside the console
-quit Exits this application
-set Sets a settable parameter or shows current settings of parameters
+py Invoke Python command or shell
+pyscript Run a Python script file inside the console
+quit Exit this application
+set Set a settable parameter or show current settings of parameters
shell Execute a command as if at the OS prompt
-shortcuts Lists shortcuts available
+shortcuts List available shortcuts
Undocumented commands:
======================
@@ -1556,7 +1557,7 @@ def test_is_text_file_bad_input(base_app):
def test_eof(base_app):
# Only thing to verify is that it returns True
- assert base_app.do_eof('dont care')
+ assert base_app.do_eof('')
def test_eos(base_app):
sdir = 'dummy_dir'
@@ -1564,7 +1565,7 @@ def test_eos(base_app):
assert len(base_app._script_dir) == 1
# Assert that it does NOT return true
- assert not base_app.do_eos('dont care')
+ assert not base_app.do_eos('')
# And make sure it reduced the length of the script dir list
assert len(base_app._script_dir) == 0
@@ -1803,7 +1804,7 @@ def test_alias_create(base_app, capsys):
# Use the alias
run_cmd(base_app, 'fake')
out, err = capsys.readouterr()
- assert "pyscript command requires at least 1 argument" in err
+ assert "the following arguments are required: script_path" in err
# See a list of aliases
out = run_cmd(base_app, 'alias list')
@@ -1905,7 +1906,7 @@ def test_macro_create(base_app, capsys):
# Use the macro
run_cmd(base_app, 'fake')
out, err = capsys.readouterr()
- assert "pyscript command requires at least 1 argument" in err
+ assert "the following arguments are required: script_path" in err
# See a list of macros
out = run_cmd(base_app, 'macro list')
diff --git a/tests/test_completion.py b/tests/test_completion.py
index 8741fbd5..8bf0cc02 100644
--- a/tests/test_completion.py
+++ b/tests/test_completion.py
@@ -98,7 +98,7 @@ def test_complete_empty_arg(cmd2_app):
endidx = len(line)
begidx = endidx - len(text)
- expected = sorted(cmd2_app.complete_help(text, line, begidx, endidx))
+ expected = sorted(cmd2_app.get_visible_commands())
first_match = complete_tester(text, line, begidx, endidx, cmd2_app)
assert first_match is not None and \
@@ -151,7 +151,11 @@ def test_cmd2_help_completion_single(cmd2_app):
line = 'help {}'.format(text)
endidx = len(line)
begidx = endidx - len(text)
- assert cmd2_app.complete_help(text, line, begidx, endidx) == ['help']
+
+ first_match = complete_tester(text, line, begidx, endidx, cmd2_app)
+
+ # It is at end of line, so extra space is present
+ assert first_match is not None and cmd2_app.completion_matches == ['help ']
def test_cmd2_help_completion_multiple(cmd2_app):
text = 'h'
@@ -159,15 +163,18 @@ def test_cmd2_help_completion_multiple(cmd2_app):
endidx = len(line)
begidx = endidx - len(text)
- matches = sorted(cmd2_app.complete_help(text, line, begidx, endidx))
- assert matches == ['help', 'history']
+ first_match = complete_tester(text, line, begidx, endidx, cmd2_app)
+ assert first_match is not None and cmd2_app.completion_matches == ['help', 'history']
+
def test_cmd2_help_completion_nomatch(cmd2_app):
text = 'fakecommand'
line = 'help {}'.format(text)
endidx = len(line)
begidx = endidx - len(text)
- assert cmd2_app.complete_help(text, line, begidx, endidx) == []
+
+ first_match = complete_tester(text, line, begidx, endidx, cmd2_app)
+ assert first_match is None
def test_shell_command_completion_shortcut(cmd2_app):
@@ -201,7 +208,9 @@ def test_shell_command_completion_doesnt_match_wildcards(cmd2_app):
line = 'shell {}'.format(text)
endidx = len(line)
begidx = endidx - len(text)
- assert cmd2_app.complete_shell(text, line, begidx, endidx) == []
+
+ first_match = complete_tester(text, line, begidx, endidx, cmd2_app)
+ assert first_match is None
def test_shell_command_completion_multiple(cmd2_app):
if sys.platform == "win32":
@@ -214,21 +223,27 @@ def test_shell_command_completion_multiple(cmd2_app):
line = 'shell {}'.format(text)
endidx = len(line)
begidx = endidx - len(text)
- assert expected in cmd2_app.complete_shell(text, line, begidx, endidx)
+
+ first_match = complete_tester(text, line, begidx, endidx, cmd2_app)
+ assert first_match is not None and expected in cmd2_app.completion_matches
def test_shell_command_completion_nomatch(cmd2_app):
text = 'zzzz'
line = 'shell {}'.format(text)
endidx = len(line)
begidx = endidx - len(text)
- assert cmd2_app.complete_shell(text, line, begidx, endidx) == []
+
+ first_match = complete_tester(text, line, begidx, endidx, cmd2_app)
+ assert first_match is None
def test_shell_command_completion_doesnt_complete_when_just_shell(cmd2_app):
text = ''
line = 'shell {}'.format(text)
endidx = len(line)
begidx = endidx - len(text)
- assert cmd2_app.complete_shell(text, line, begidx, endidx) == []
+
+ first_match = complete_tester(text, line, begidx, endidx, cmd2_app)
+ assert first_match is None
def test_shell_command_completion_does_path_completion_when_after_command(cmd2_app, request):
test_dir = os.path.dirname(request.module.__file__)
@@ -239,7 +254,8 @@ def test_shell_command_completion_does_path_completion_when_after_command(cmd2_a
endidx = len(line)
begidx = endidx - len(text)
- assert cmd2_app.complete_shell(text, line, begidx, endidx) == [text + '.py']
+ first_match = complete_tester(text, line, begidx, endidx, cmd2_app)
+ assert first_match is not None and cmd2_app.completion_matches == [text + '.py ']
def test_path_completion_single_end(cmd2_app, request):
@@ -742,7 +758,11 @@ def test_cmd2_help_subcommand_completion_single(sc_app):
line = 'help {}'.format(text)
endidx = len(line)
begidx = endidx - len(text)
- assert sc_app.complete_help(text, line, begidx, endidx) == ['base']
+
+ first_match = complete_tester(text, line, begidx, endidx, sc_app)
+
+ # It is at end of line, so extra space is present
+ assert first_match is not None and sc_app.completion_matches == ['base ']
def test_cmd2_help_subcommand_completion_multiple(sc_app):
text = ''
@@ -750,8 +770,8 @@ def test_cmd2_help_subcommand_completion_multiple(sc_app):
endidx = len(line)
begidx = endidx - len(text)
- matches = sorted(sc_app.complete_help(text, line, begidx, endidx))
- assert matches == ['bar', 'foo', 'sport']
+ first_match = complete_tester(text, line, begidx, endidx, sc_app)
+ assert first_match is not None and sc_app.completion_matches == ['bar', 'foo', 'sport']
def test_cmd2_help_subcommand_completion_nomatch(sc_app):
@@ -759,7 +779,9 @@ def test_cmd2_help_subcommand_completion_nomatch(sc_app):
line = 'help base {}'.format(text)
endidx = len(line)
begidx = endidx - len(text)
- assert sc_app.complete_help(text, line, begidx, endidx) == []
+
+ first_match = complete_tester(text, line, begidx, endidx, sc_app)
+ assert first_match is None
def test_subcommand_tab_completion(sc_app):
# This makes sure the correct completer for the sport subcommand is called
@@ -852,7 +874,7 @@ class SubcommandsWithUnknownExample(cmd2.Cmd):
func(self, args)
else:
# No subcommand was provided, so call help
- self.do_help(['base'])
+ self.do_help('base')
@pytest.fixture
@@ -901,7 +923,11 @@ def test_cmd2_help_subcommand_completion_single_scu(scu_app):
line = 'help {}'.format(text)
endidx = len(line)
begidx = endidx - len(text)
- assert scu_app.complete_help(text, line, begidx, endidx) == ['base']
+
+ first_match = complete_tester(text, line, begidx, endidx, scu_app)
+
+ # It is at end of line, so extra space is present
+ assert first_match is not None and scu_app.completion_matches == ['base ']
def test_cmd2_help_subcommand_completion_multiple_scu(scu_app):
@@ -910,8 +936,8 @@ def test_cmd2_help_subcommand_completion_multiple_scu(scu_app):
endidx = len(line)
begidx = endidx - len(text)
- matches = sorted(scu_app.complete_help(text, line, begidx, endidx))
- assert matches == ['bar', 'foo', 'sport']
+ first_match = complete_tester(text, line, begidx, endidx, scu_app)
+ assert first_match is not None and scu_app.completion_matches == ['bar', 'foo', 'sport']
def test_cmd2_help_subcommand_completion_nomatch_scu(scu_app):
@@ -919,7 +945,9 @@ def test_cmd2_help_subcommand_completion_nomatch_scu(scu_app):
line = 'help base {}'.format(text)
endidx = len(line)
begidx = endidx - len(text)
- assert scu_app.complete_help(text, line, begidx, endidx) == []
+
+ first_match = complete_tester(text, line, begidx, endidx, scu_app)
+ assert first_match == None
def test_subcommand_tab_completion_scu(scu_app):
diff --git a/tests/test_pyscript.py b/tests/test_pyscript.py
index 84abc965..36e48598 100644
--- a/tests/test_pyscript.py
+++ b/tests/test_pyscript.py
@@ -18,16 +18,16 @@ class PyscriptExample(Cmd):
def _do_media_movies(self, args) -> None:
if not args.command:
- self.do_help(['media movies'])
+ self.do_help('media movies')
else:
self.poutput('media movies ' + str(args.__dict__))
def _do_media_shows(self, args) -> None:
if not args.command:
- self.do_help(['media shows'])
+ self.do_help('media shows')
if not args.command:
- self.do_help(['media shows'])
+ self.do_help('media shows')
else:
self.poutput('media shows ' + str(args.__dict__))
@@ -72,7 +72,7 @@ class PyscriptExample(Cmd):
func(self, args)
else:
# No subcommand was provided, so call help
- self.do_help(['media'])
+ self.do_help('media')
foo_parser = argparse_completer.ACArgumentParser(prog='foo')
foo_parser.add_argument('-c', dest='counter', action='count')
@@ -84,7 +84,7 @@ class PyscriptExample(Cmd):
@with_argparser(foo_parser)
def do_foo(self, args):
- self.poutput('foo ' + str(args.__dict__))
+ self.poutput('foo ' + str(sorted(args.__dict__)))
if self._in_py:
FooResult = namedtuple_with_defaults('FooResult',
['counter', 'trueval', 'constval',