diff options
Diffstat (limited to 'tests/test_autocompletion.py')
-rw-r--r-- | tests/test_autocompletion.py | 275 |
1 files changed, 0 insertions, 275 deletions
diff --git a/tests/test_autocompletion.py b/tests/test_autocompletion.py deleted file mode 100644 index 30cb5dad..00000000 --- a/tests/test_autocompletion.py +++ /dev/null @@ -1,275 +0,0 @@ -# coding=utf-8 -# flake8: noqa E302 -""" -Unit/functional testing for argparse completer in cmd2 -""" -import argparse -from typing import List - -import pytest - -import cmd2 -from cmd2 import with_argparser -from cmd2.argparse_custom import Cmd2ArgParser -from cmd2.utils import StdSim -from .conftest import run_cmd, complete_tester - -# Lists used in our tests -static_choices_list = ['static', 'choices'] -choices_from_function = ['choices', 'function'] -choices_from_method = ['choices', 'method'] - - -def choices_function() -> List[str]: - """Function that provides choices""" - return choices_from_function - - -class AutoCompleteTester(cmd2.Cmd): - """Cmd2 app that exercises AutoCompleter class""" - def __init__(self): - super().__init__() - - def choices_method(self) -> List[str]: - """Method that provides choices""" - return choices_from_method - - # Basic command with no subcommands that exercises tab completing choices from various sources - basic_parser = Cmd2ArgParser() - basic_parser.add_argument("-n", "--no_choices", help="a flag with no choices") - basic_parser.add_argument("-l", "--choices_list", help="a flag populated with a choices list", - choices=static_choices_list) - basic_parser.add_argument("-f", "--choices_function", help="a flag populated with a choices function", - choices_function=choices_function) - basic_parser.add_argument("-m", "--choices_method", help="a flag populated with a choices method", - choices_method=choices_method) - - basic_parser.add_argument("no_choice_pos", help="a positional with no choices") - basic_parser.add_argument("choices_list_pos", help="a positional populated with a choices list", - choices=static_choices_list) - basic_parser.add_argument("choices_function_pos", help="a positional populated with a choices function", - choices_function=choices_function) - basic_parser.add_argument("choices_method_pos", help="a positional populated with a choices method", - choices_method=choices_method) - - @with_argparser(basic_parser) - def do_basic(self, args: argparse.Namespace) -> None: - pass - - -@pytest.fixture -def ac_app(): - app = AutoCompleteTester() - app.stdout = StdSim(app.stdout) - return app - - -def test_help_basic(ac_app): - out1, err1 = run_cmd(ac_app, 'basic -h') - out2, err2 = run_cmd(ac_app, 'help basic') - assert out1 == out2 - - -def test_autocomp_flags(ac_app): - text = '-' - line = 'basic {}'.format(text) - endidx = len(line) - begidx = endidx - len(text) - - first_match = complete_tester(text, line, begidx, endidx, ac_app) - assert first_match is not None and \ - ac_app.completion_matches == ['--choices_function', '--choices_list', '--choices_method', '--help', - '--no_choices', '-f', '-h', '-l', '-m', '-n'] - - -def test_autcomp_hint(ac_app, capsys): - text = '' - line = 'basic -n {}'.format(text) - endidx = len(line) - begidx = endidx - len(text) - - first_match = complete_tester(text, line, begidx, endidx, ac_app) - out, err = capsys.readouterr() - - assert first_match is None - assert 'a flag with no choices' in out - - -def test_autcomp_flag_comp(ac_app): - text = '--ch' - line = 'basic {}'.format(text) - endidx = len(line) - begidx = endidx - len(text) - - first_match = complete_tester(text, line, begidx, endidx, ac_app) - assert first_match is not None and \ - ac_app.completion_matches == ['--choices_function', '--choices_list', '--choices_method'] - - -@pytest.mark.parametrize('flag, completions', [ - ('-l', static_choices_list), - ('--choices_list', static_choices_list), - ('-f', choices_from_function), - ('--choices_function', choices_from_function), - ('-m', choices_from_method), - ('--choices_method', choices_from_method), -]) -def test_autocomp_flags_choices(ac_app, flag, completions): - text = '' - line = 'basic {} {}'.format(flag, text) - endidx = len(line) - begidx = endidx - len(text) - - first_match = complete_tester(text, line, begidx, endidx, ac_app) - assert first_match is not None and \ - ac_app.completion_matches == sorted(completions, key=ac_app.matches_sort_key) - - -# def test_autcomp_hint_in_narg_range(cmd2_app, capsys): -# text = '' -# line = 'suggest -d 2 {}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# first_match = complete_tester(text, line, begidx, endidx, cmd2_app) -# out, err = capsys.readouterr() -# -# assert out == ''' -# Hint: -# -d, --duration DURATION Duration constraint in minutes. -# single value - maximum duration -# [a, b] - duration range -# -# ''' -# -# def test_autocomp_flags_narg_max(cmd2_app): -# text = '' -# line = 'suggest d 2 3 {}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# first_match = complete_tester(text, line, begidx, endidx, cmd2_app) -# assert first_match is None -# -# -# def test_autcomp_narg_beyond_max(cmd2_app): -# out, err = run_cmd(cmd2_app, 'suggest -t movie -d 3 4 5') -# assert 'Error: unrecognized arguments: 5' in err[1] -# -# -# def test_autocomp_subcmd_flag_comp_func_attr(cmd2_app): -# text = 'A' -# line = 'video movies list -a "{}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# first_match = complete_tester(text, line, begidx, endidx, cmd2_app) -# assert first_match is not None and \ -# cmd2_app.completion_matches == ['Adam Driver', 'Alec Guinness', 'Andy Serkis', 'Anthony Daniels'] -# -# -# def test_autocomp_subcmd_flag_comp_list_attr(cmd2_app): -# text = 'G' -# line = 'video movies list -d {}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# first_match = complete_tester(text, line, begidx, endidx, cmd2_app) -# assert first_match is not None and first_match == '"Gareth Edwards' -# -# -# def test_autocomp_pos_consumed(cmd2_app): -# text = '' -# line = 'library movie add SW_EP01 {}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# first_match = complete_tester(text, line, begidx, endidx, cmd2_app) -# assert first_match is None -# -# -# def test_autocomp_pos_after_flag(cmd2_app): -# text = 'Joh' -# line = 'video movies add -d "George Lucas" -- "Han Solo" PG "Emilia Clarke" "{}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# first_match = complete_tester(text, line, begidx, endidx, cmd2_app) -# assert first_match is not None and \ -# cmd2_app.completion_matches == ['John Boyega" '] -# -# -# def test_autocomp_custom_func_dict_arg(cmd2_app): -# text = '/home/user/' -# line = 'video movies load {}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# first_match = complete_tester(text, line, begidx, endidx, cmd2_app) -# assert first_match is not None and \ -# cmd2_app.completion_matches == ['/home/user/another.db', '/home/user/file space.db', '/home/user/file.db'] -# -# -# def test_argparse_remainder_flag_completion(cmd2_app): -# import cmd2 -# import argparse -# -# # Test flag completion as first arg of positional with nargs=argparse.REMAINDER -# text = '--h' -# line = 'help command {}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# # --h should not complete into --help because we are in the argparse.REMAINDER section -# assert complete_tester(text, line, begidx, endidx, cmd2_app) is None -# -# # Test flag completion within an already started positional with nargs=argparse.REMAINDER -# text = '--h' -# line = 'help command subcommand {}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# # --h should not complete into --help because we are in the argparse.REMAINDER section -# assert complete_tester(text, line, begidx, endidx, cmd2_app) is None -# -# # Test a flag with nargs=argparse.REMAINDER -# parser = argparse.ArgumentParser() -# parser.add_argument('-f', nargs=argparse.REMAINDER) -# -# # Overwrite eof's parser for this test -# cmd2.Cmd.do_eof.argparser = parser -# -# text = '--h' -# line = 'eof -f {}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# # --h should not complete into --help because we are in the argparse.REMAINDER section -# assert complete_tester(text, line, begidx, endidx, cmd2_app) is None -# -# -# def test_completion_after_double_dash(cmd2_app): -# """ -# Test completion after --, which argparse says (all args after -- are non-options) -# All of these tests occur outside of an argparse.REMAINDER section since those tests -# are handled in test_argparse_remainder_flag_completion -# """ -# -# # Test -- as the last token -# text = '--' -# line = 'help {}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# # Since -- is the last token, then it should show flag choices -# first_match = complete_tester(text, line, begidx, endidx, cmd2_app) -# assert first_match is not None and '--help' in cmd2_app.completion_matches -# -# # Test -- to end all flag completion -# text = '--' -# line = 'help -- {}'.format(text) -# endidx = len(line) -# begidx = endidx - len(text) -# -# # Since -- appeared before the -- being completed, nothing should be completed -# assert complete_tester(text, line, begidx, endidx, cmd2_app) is None |