import pytest from argparse import ArgumentError from tiramisu_cmdline_parser import TiramisuCmdlineParser from tiramisu import StrOption, BoolOption, OptionDescription, Config from .utils import TestHelpFormatter def get_config(has_tree=False, default_verbosity=False): booloption = BoolOption('disabled', 'disabled', properties=('disabled',), ) booloption2 = BoolOption('verbosity', 'increase output verbosity', default=default_verbosity, ) stroption = StrOption('option', 'an option', ) root = OptionDescription('root', 'root', [booloption, booloption2, stroption], ) if has_tree: root = OptionDescription('root', 'root', [root], ) config = Config(root) config.property.read_write() return config def test_exit_boolean(): config = get_config(default_verbosity=True) parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter, color=False, exit_on_error=False) parser.parse_args(['--verbosity']) parser.parse_known_args(['--verbosity']) def test_exit_disabled(): config = get_config(default_verbosity=True) parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter, color=False, exit_on_error=False) error = None try: parser.parse_args(['--disabled']) except ArgumentError as err: error = err assert error assert str(error) == 'unrecognized arguments: --disabled (cannot access to option "disabled" because has property "disabled")' def test_exit_string(): config = get_config(default_verbosity=True) parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter, color=False, exit_on_error=False) parser.parse_args(['--option', 'value']) parser.parse_known_args(['--option', 'value']) def test_exit_unknown(): config = get_config(default_verbosity=True) parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter, color=False, exit_on_error=False) error = None try: parser.parse_args(['--unknown', 'value']) except ArgumentError as err: error = err assert error assert str(error) == 'unrecognized arguments: --unknown value' parser.parse_known_args(['--unknown', 'value']) def test_exit_known_unknown(): config = get_config(default_verbosity=True) parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter, color=False, exit_on_error=False) error = None try: parser.parse_args(['--option', 'value', '--unknown', 'value']) except ArgumentError as err: error = err assert error assert str(error) == 'unrecognized arguments: --unknown value' parser.parse_known_args(['--unknown', 'value'])