146 lines
5 KiB
Python
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")
|
|
"""
|