diff --git a/test.py b/test.py new file mode 100644 index 0000000..0a50c4f --- /dev/null +++ b/test.py @@ -0,0 +1,123 @@ +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()