from argparse import ArgumentError, ArgumentTypeError import unittest from typing import List from argclass import argclass class TestArgClass(unittest.TestCase): def test__required_argument(self): @argclass class A: arg1: str assert A.parse_args(["--arg1", "hello"]) == A(arg1="hello") def test__required_argument_missing(self): @argclass class A: arg1: str self.assertRaises(SystemExit, A.parse_args, []) def test__required_argument_wrong_given(self): @argclass class A: arg1: str self.assertRaises(SystemExit, A.parse_args, ["--arg2", "hello"]) def test__optional_argument_missing(self): @argclass class A: arg2: str = "world" assert A.parse_args([]) == A(arg2="world") def test__optional_argument_given(self): @argclass class A: arg2: str = "world" assert A.parse_args(["--arg2", "welt"]) == A(arg2="welt") def test__optional_argument_wrong_given(self): @argclass class A: arg2: str = "world" self.assertRaises(SystemExit, A.parse_args, ["--arg3", "welt"]) def test__boolean_true(self): @argclass class A: arg3: bool assert A.parse_args(["--arg3"]) == A(arg3=True) def test__boolean_false(self): @argclass class A: arg3: bool assert A.parse_args(["--no-arg3"]) == A(arg3=False) def test__int(self): @argclass class A: arg4: int assert A.parse_args(["--arg4", "42"]) == A(arg4=42) def test__int_malformed(self): @argclass class A: arg4: int self.assertRaises(SystemExit, A.parse_args, ["--arg4", "4e2"]) def test__list(self): @argclass class A: arg5: List assert A.parse_args(["--arg5", "hello", "world"]) == A( arg5=["hello", "world"] ) def test__list_str(self): @argclass class A: arg5: List[str] assert A.parse_args(["--arg5", "hello", "world"]) == A( arg5=["hello", "world"] ) def test__list_int(self): @argclass class A: arg5: List[int] assert A.parse_args(["--arg5", "23", "42"]) == A(arg5=[23, 42]) if __name__ == "__main__": unittest.main()