123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- import pytest
- import click.types
- # Common (obj, expect) pairs used to construct multiple tests.
- STRING_PARAM_TYPE = (click.STRING, {"param_type": "String", "name": "text"})
- INT_PARAM_TYPE = (click.INT, {"param_type": "Int", "name": "integer"})
- BOOL_PARAM_TYPE = (click.BOOL, {"param_type": "Bool", "name": "boolean"})
- HELP_OPTION = (
- None,
- {
- "name": "help",
- "param_type_name": "option",
- "opts": ["--help"],
- "secondary_opts": [],
- "type": BOOL_PARAM_TYPE[1],
- "required": False,
- "nargs": 1,
- "multiple": False,
- "default": False,
- "envvar": None,
- "help": "Show this message and exit.",
- "prompt": None,
- "is_flag": True,
- "flag_value": True,
- "count": False,
- "hidden": False,
- },
- )
- NAME_ARGUMENT = (
- click.Argument(["name"]),
- {
- "name": "name",
- "param_type_name": "argument",
- "opts": ["name"],
- "secondary_opts": [],
- "type": STRING_PARAM_TYPE[1],
- "required": True,
- "nargs": 1,
- "multiple": False,
- "default": None,
- "envvar": None,
- },
- )
- NUMBER_OPTION = (
- click.Option(["-c", "--count", "number"], default=1),
- {
- "name": "number",
- "param_type_name": "option",
- "opts": ["-c", "--count"],
- "secondary_opts": [],
- "type": INT_PARAM_TYPE[1],
- "required": False,
- "nargs": 1,
- "multiple": False,
- "default": 1,
- "envvar": None,
- "help": None,
- "prompt": None,
- "is_flag": False,
- "flag_value": False,
- "count": False,
- "hidden": False,
- },
- )
- HELLO_COMMAND = (
- click.Command("hello", params=[NUMBER_OPTION[0]]),
- {
- "name": "hello",
- "params": [NUMBER_OPTION[1], HELP_OPTION[1]],
- "help": None,
- "epilog": None,
- "short_help": None,
- "hidden": False,
- "deprecated": False,
- },
- )
- HELLO_GROUP = (
- click.Group("cli", [HELLO_COMMAND[0]]),
- {
- "name": "cli",
- "params": [HELP_OPTION[1]],
- "help": None,
- "epilog": None,
- "short_help": None,
- "hidden": False,
- "deprecated": False,
- "commands": {"hello": HELLO_COMMAND[1]},
- "chain": False,
- },
- )
- @pytest.mark.parametrize(
- ("obj", "expect"),
- [
- pytest.param(
- click.types.FuncParamType(range),
- {"param_type": "Func", "name": "range", "func": range},
- id="Func ParamType",
- ),
- pytest.param(
- click.UNPROCESSED,
- {"param_type": "Unprocessed", "name": "text"},
- id="UNPROCESSED ParamType",
- ),
- pytest.param(*STRING_PARAM_TYPE, id="STRING ParamType"),
- pytest.param(
- click.Choice(["a", "b"]),
- {
- "param_type": "Choice",
- "name": "choice",
- "choices": ["a", "b"],
- "case_sensitive": True,
- },
- id="Choice ParamType",
- ),
- pytest.param(
- click.DateTime(["%Y-%m-%d"]),
- {"param_type": "DateTime", "name": "datetime", "formats": ["%Y-%m-%d"]},
- id="DateTime ParamType",
- ),
- pytest.param(*INT_PARAM_TYPE, id="INT ParamType"),
- pytest.param(
- click.IntRange(0, 10, clamp=True),
- {
- "param_type": "IntRange",
- "name": "integer range",
- "min": 0,
- "max": 10,
- "min_open": False,
- "max_open": False,
- "clamp": True,
- },
- id="IntRange ParamType",
- ),
- pytest.param(
- click.FLOAT, {"param_type": "Float", "name": "float"}, id="FLOAT ParamType"
- ),
- pytest.param(
- click.FloatRange(-0.5, 0.5),
- {
- "param_type": "FloatRange",
- "name": "float range",
- "min": -0.5,
- "max": 0.5,
- "min_open": False,
- "max_open": False,
- "clamp": False,
- },
- id="FloatRange ParamType",
- ),
- pytest.param(*BOOL_PARAM_TYPE, id="Bool ParamType"),
- pytest.param(
- click.UUID, {"param_type": "UUID", "name": "uuid"}, id="UUID ParamType"
- ),
- pytest.param(
- click.File(),
- {"param_type": "File", "name": "filename", "mode": "r", "encoding": None},
- id="File ParamType",
- ),
- pytest.param(
- click.Path(),
- {
- "param_type": "Path",
- "name": "path",
- "exists": False,
- "file_okay": True,
- "dir_okay": True,
- "writable": False,
- "readable": True,
- "allow_dash": False,
- },
- id="Path ParamType",
- ),
- pytest.param(
- click.Tuple((click.STRING, click.INT)),
- {
- "param_type": "Tuple",
- "name": "<text integer>",
- "types": [STRING_PARAM_TYPE[1], INT_PARAM_TYPE[1]],
- },
- id="Tuple ParamType",
- ),
- pytest.param(*NUMBER_OPTION, id="Option"),
- pytest.param(
- click.Option(["--cache/--no-cache", "-c/-u"]),
- {
- "name": "cache",
- "param_type_name": "option",
- "opts": ["--cache", "-c"],
- "secondary_opts": ["--no-cache", "-u"],
- "type": BOOL_PARAM_TYPE[1],
- "required": False,
- "nargs": 1,
- "multiple": False,
- "default": False,
- "envvar": None,
- "help": None,
- "prompt": None,
- "is_flag": True,
- "flag_value": True,
- "count": False,
- "hidden": False,
- },
- id="Flag Option",
- ),
- pytest.param(*NAME_ARGUMENT, id="Argument"),
- ],
- )
- def test_parameter(obj, expect):
- out = obj.to_info_dict()
- assert out == expect
- @pytest.mark.parametrize(
- ("obj", "expect"),
- [
- pytest.param(*HELLO_COMMAND, id="Command"),
- pytest.param(*HELLO_GROUP, id="Group"),
- pytest.param(
- click.Group(
- "base",
- [click.Command("test", params=[NAME_ARGUMENT[0]]), HELLO_GROUP[0]],
- ),
- {
- "name": "base",
- "params": [HELP_OPTION[1]],
- "help": None,
- "epilog": None,
- "short_help": None,
- "hidden": False,
- "deprecated": False,
- "commands": {
- "cli": HELLO_GROUP[1],
- "test": {
- "name": "test",
- "params": [NAME_ARGUMENT[1], HELP_OPTION[1]],
- "help": None,
- "epilog": None,
- "short_help": None,
- "hidden": False,
- "deprecated": False,
- },
- },
- "chain": False,
- },
- id="Nested Group",
- ),
- ],
- )
- def test_command(obj, expect):
- ctx = click.Context(obj)
- out = obj.to_info_dict(ctx)
- assert out == expect
- def test_context():
- ctx = click.Context(HELLO_COMMAND[0])
- out = ctx.to_info_dict()
- assert out == {
- "command": HELLO_COMMAND[1],
- "info_name": None,
- "allow_extra_args": False,
- "allow_interspersed_args": True,
- "ignore_unknown_options": False,
- "auto_envvar_prefix": None,
- }
- def test_paramtype_no_name():
- class TestType(click.ParamType):
- pass
- assert TestType().to_info_dict()["name"] == "TestType"
|