tiramisu-cmdline-parser/tests/test_boolean.py

146 lines
5 KiB
Python

from io import StringIO
from contextlib import redirect_stdout, redirect_stderr
import pytest
from tiramisu_cmdline_parser import TiramisuCmdlineParser
from tiramisu import BoolOption, OptionDescription, Config
from .utils import TestHelpFormatter, to_dict
def get_config(has_tree=False, default_verbosity=False):
booloption = BoolOption('disabled',
'disabled',
properties=('disabled',),
)
booloption2 = BoolOption('verbosity',
'increase output verbosity',
default=default_verbosity,
)
root = OptionDescription('root',
'root',
[booloption, booloption2],
)
if has_tree:
root = OptionDescription('root',
'root',
[root],
)
config = Config(root)
config.property.read_write()
return config
def test_boolean_help_tree():
output = """usage: prog.py [-h] [--root.verbosity] [--root.no-verbosity]
options:
-h, --help show this help message and exit
root:
--root.verbosity increase output verbosity (default: False)
--root.no-verbosity
"""
parser = TiramisuCmdlineParser(get_config(has_tree=True), 'prog.py', formatter_class=TestHelpFormatter)
f = StringIO()
with redirect_stdout(f):
parser.print_help()
assert f.getvalue() == output
def test_boolean_help():
output = """usage: prog.py [-h] [--verbosity] [--no-verbosity]
options:
-h, --help show this help message and exit
--verbosity increase output verbosity (default: False)
--no-verbosity
"""
parser = TiramisuCmdlineParser(get_config(), 'prog.py', formatter_class=TestHelpFormatter)
f = StringIO()
with redirect_stdout(f):
parser.print_help()
assert f.getvalue() == output
def test_boolean_help2():
output = """usage: prog.py [-h] [--verbosity] [--no-verbosity]
options:
-h, --help show this help message and exit
--verbosity increase output verbosity (default: True)
--no-verbosity
"""
parser = TiramisuCmdlineParser(get_config(default_verbosity=True), 'prog.py', formatter_class=TestHelpFormatter)
f = StringIO()
with redirect_stdout(f):
parser.print_help()
assert f.getvalue() == output
def test_boolean_true():
config = get_config(default_verbosity=True)
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter)
assert to_dict(config.value.get()) == {'verbosity': True}
def test_boolean_false():
config = get_config()
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter)
assert to_dict(config.value.get()) == {'verbosity': False}
def test_boolean_true_to_false():
config = get_config(default_verbosity=True)
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter)
parser.parse_args(['--no-verbosity'])
assert to_dict(config.value.get()) == {'verbosity': False}
def test_boolean_true_to_true():
config = get_config(default_verbosity=True)
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter)
parser.parse_args(['--verbosity'])
assert to_dict(config.value.get()) == {'verbosity': True}
def test_boolean_false_to_true():
config = get_config()
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter)
parser.parse_args(['--verbosity'])
assert to_dict(config.value.get()) == {'verbosity': True}
def test_boolean_false_to_false():
config = get_config()
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter)
parser.parse_args(['--verbosity'])
assert to_dict(config.value.get()) == {'verbosity': True}
def test_boolean_disabled():
config = get_config(default_verbosity=True)
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter)
f = StringIO()
with redirect_stderr(f):
try:
parser.parse_args(['--disabled'])
except SystemExit as err:
assert str(err) == "2"
assert f.getvalue() == """usage: prog.py [-h] [--verbosity] [--no-verbosity]
prog.py: error: unrecognized arguments: --disabled (cannot access to option "disabled" because has property "disabled")
"""
def test_boolean_no_disabled():
config = get_config(default_verbosity=True)
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter)
f = StringIO()
with redirect_stderr(f):
try:
parser.parse_args(['--no-disabled'])
except SystemExit as err:
assert str(err) == "2"
assert f.getvalue() == """usage: prog.py [-h] [--verbosity] [--no-verbosity]
prog.py: error: unrecognized arguments: --no-disabled (cannot access to option "disabled" because has property "disabled")
"""