cutekit/tests/test_cli.py

265 lines
7.3 KiB
Python
Raw Normal View History

2024-02-15 10:34:38 +00:00
from cutekit import cli, utils
from asserts import (
assert_is,
assert_true,
assert_equal,
assert_raises,
assert_is_instance,
)
# --- Parse Values ----------------------------------------------------------- #
def test_parse_int_val():
assert_equal(cli.parseValue("1"), 1)
assert_equal(cli.parseValue("2"), 2)
assert_equal(cli.parseValue("+2"), +2)
assert_equal(cli.parseValue("-2"), -2)
def test_parse_true_val():
assert_equal(cli.parseValue("true"), True)
assert_equal(cli.parseValue("True"), True)
assert_equal(cli.parseValue("y"), True)
assert_equal(cli.parseValue("yes"), True)
assert_equal(cli.parseValue("Y"), True)
assert_equal(cli.parseValue("Yes"), True)
def test_parse_false_val():
assert_equal(cli.parseValue("false"), False)
assert_equal(cli.parseValue("False"), False)
assert_equal(cli.parseValue("n"), False)
assert_equal(cli.parseValue("no"), False)
assert_equal(cli.parseValue("N"), False)
assert_equal(cli.parseValue("No"), False)
def test_parse_str_val():
assert_equal(cli.parseValue("foo"), "foo")
assert_equal(cli.parseValue("'foo'"), "foo")
assert_equal(cli.parseValue('"foo"'), "foo")
def test_parse_list_val():
assert_equal(cli.parseValue("foo,bar"), ["foo", "bar"])
assert_equal(cli.parseValue("'foo','bar'"), ["foo", "bar"])
assert_equal(cli.parseValue('"foo","bar"'), ["foo", "bar"])
# --- Parse Args ------------------------------------------------------------- #
def test_parse_short_arg():
args = cli.parseArg("-a")
assert_equal(len(args), 1)
arg = args[0]
assert_is_instance(arg, cli.ArgumentToken)
assert_equal(arg.key, "a")
assert_equal(arg.value, True)
def test_parse_short_args():
args = cli.parseArg("-abc")
assert_equal(len(args), 3)
arg = args[0]
assert_is_instance(arg, cli.ArgumentToken)
assert_equal(arg.key, "a")
assert_equal(arg.value, True)
arg = args[1]
assert_is_instance(arg, cli.ArgumentToken)
assert_equal(arg.key, "b")
assert_equal(arg.value, True)
arg = args[2]
assert_is_instance(arg, cli.ArgumentToken)
assert_equal(arg.key, "c")
assert_equal(arg.value, True)
def test_parse_long_arg():
args = cli.parseArg("--foo")
assert_equal(len(args), 1)
arg = args[0]
assert_is_instance(arg, cli.ArgumentToken)
assert_equal(arg.key, "foo")
assert_equal(arg.value, True)
def test_parse_long_arg_with_value():
args = cli.parseArg("--foo=bar")
assert_equal(len(args), 1)
arg = args[0]
assert_is_instance(arg, cli.ArgumentToken)
assert_equal(arg.key, "foo")
assert_equal(arg.value, "bar")
def test_parse_long_arg_with_value_list():
args = cli.parseArg("--foo=bar,baz")
assert_equal(len(args), 1)
arg = args[0]
assert_is_instance(arg, cli.ArgumentToken)
assert_equal(arg.key, "foo")
assert_equal(arg.value, ["bar", "baz"])
def test_parse_key_subkey_arg():
args = cli.parseArg("--foo:bar")
assert_equal(len(args), 1)
arg = args[0]
assert_is_instance(arg, cli.ArgumentToken)
assert_equal(arg.key, "foo")
assert_equal(arg.subkey, "bar")
assert_equal(arg.value, True)
def extractParse(type: type[utils.T], args: list[str]) -> utils.T:
schema = cli.Schema.extract(type)
return schema.parse(args)
class IntArg:
value: int = cli.arg(None, "value")
def test_cli_arg_int():
assert_equal(extractParse(IntArg, ["--value=-1"]).value, -1)
assert_equal(extractParse(IntArg, ["--value=0"]).value, 0)
assert_equal(extractParse(IntArg, ["--value=1"]).value, 1)
class StrArg:
value: str = cli.arg(None, "value")
def test_cli_arg_str1():
assert_equal(extractParse(StrArg, ["--value=foo"]).value, "foo")
assert_equal(extractParse(StrArg, ["--value='foo, bar'"]).value, "foo, bar")
class BoolArg:
value: bool = cli.arg(None, "value")
def test_cli_arg_bool():
assert_is(extractParse(BoolArg, ["--value"]).value, True)
assert_is(extractParse(BoolArg, ["--value=true"]).value, True)
assert_is(extractParse(BoolArg, ["--value=True"]).value, True)
assert_is(extractParse(BoolArg, ["--value=y"]).value, True)
assert_is(extractParse(BoolArg, ["--value=yes"]).value, True)
assert_is(extractParse(BoolArg, ["--value=Y"]).value, True)
assert_is(extractParse(BoolArg, ["--value=Yes"]).value, True)
assert_is(extractParse(BoolArg, ["--value=1"]).value, True)
assert_is(extractParse(BoolArg, ["--value=false"]).value, False)
assert_is(extractParse(BoolArg, ["--value=False"]).value, False)
assert_is(extractParse(BoolArg, ["--value=n"]).value, False)
assert_is(extractParse(BoolArg, ["--value=no"]).value, False)
assert_is(extractParse(BoolArg, ["--value=N"]).value, False)
assert_is(extractParse(BoolArg, ["--value=No"]).value, False)
assert_is(extractParse(BoolArg, ["--value=0"]).value, False)
class IntListArg:
value: list[int] = cli.arg(None, "value")
def test_cli_arg_list_int1():
assert_equal(extractParse(IntListArg, []).value, [])
assert_equal(extractParse(IntListArg, ["--value=1", "--value=2"]).value, [1, 2])
assert_equal(extractParse(IntListArg, ["--value=1,2"]).value, [1, 2])
class StrListArg:
value: list[str] = cli.arg(None, "value")
def test_cli_arg_list_str():
assert_equal(extractParse(StrListArg, []).value, [])
assert_equal(
extractParse(StrListArg, ["--value=foo", "--value=bar"]).value,
[
"foo",
"bar",
],
)
assert_equal(extractParse(StrListArg, ["--value=foo,bar"]).value, ["foo", "bar"])
assert_equal(extractParse(StrListArg, ["--value=foo,bar"]).value, ["foo", "bar"])
assert_equal(extractParse(StrListArg, ["--value='foo,bar'"]).value, ["foo,bar"])
assert_equal(extractParse(StrListArg, ["--value='foo, bar'"]).value, ["foo, bar"])
assert_equal(extractParse(StrListArg, ['--value="foo, bar"']).value, ["foo, bar"])
class StrDictArg:
value: dict[str, str] = cli.arg(None, "value")
def test_cli_arg_dict_str():
assert_equal(extractParse(StrDictArg, ["--value:foo=bar"]).value, {"foo": "bar"})
assert_equal(
extractParse(StrDictArg, ["--value:foo=bar", "--value:baz=qux"]).value,
{
"foo": "bar",
"baz": "qux",
},
)
class FooArg:
foo: str = cli.arg(None, "foo")
class BazArg:
baz: str = cli.arg(None, "baz")
class BarArg(FooArg, BazArg):
bar: str = cli.arg(None, "bar")
def test_cli_arg_inheritance():
res = extractParse(BarArg, ["--foo=foo", "--bar=bar", "--baz=baz"])
assert_equal(res.foo, "foo")
assert_equal(res.bar, "bar")
assert_equal(res.baz, "baz")
2024-02-15 14:28:50 +00:00
class ExtraArg:
value: str = cli.arg(None, "value")
extra: list[str] = cli.extra("extra")
def test_cli_extra_args():
res = extractParse(ExtraArg, ["--value=foo", "--", "bar", "baz"])
assert_equal(res.value, "foo")
assert_equal(res.extra, ["bar", "baz"])
class StrOperandArg:
value: str = cli.operand(None, "value")
def test_cli_operand_args():
res = extractParse(StrOperandArg, ["foo"])
assert_equal(res.value, "foo")
class ListOperandArg:
value: list[str] = cli.operand(None, "value")
def test_cli_operand_list_args():
res = extractParse(ListOperandArg, ["foo", "bar"])
assert_equal(res.value, ["foo", "bar"])
def test_cli_operand_list_args_empty():
res = extractParse(ListOperandArg, [])
assert_equal(res.value, [])