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') @unittest.expectedFailure def test__required_argument_missing(self): @argclass class A: arg1: str A.parse_args([]) @unittest.expectedFailure def test__required_argument_wrong_given(self): @argclass class A: arg1: str 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') @unittest.expectedFailure def test__optional_argument_wrong_given(self): @argclass class A: arg2: str = 'world' 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) @unittest.expectedFailure def test__int_malformed(self): @argclass class A: arg4: int 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()