|
8 | 8 | @pytest.mark.parametrize( |
9 | 9 | "arguments, expected_args, expected_kwargs", |
10 | 10 | [ |
11 | | - ("arg1, arg2, arg3 ", ["arg1", "arg2", "arg3"], {}), # All positional arguments |
| 11 | + ("arg1, 2, 3.5 ", ["arg1", 2, 3.5], {}), # Cast positional arguments |
12 | 12 | ( # All keyworded arguments |
13 | | - "kwarg1=/val/1,kwarg2 = val2, kwarg3 = val3 ", |
| 13 | + "kwarg1=true,kwarg2 = val2, kwarg3 = 3 ", |
14 | 14 | [], |
15 | | - {"kwarg1": "/val/1", "kwarg2": "val2", "kwarg3": "val3"}, |
| 15 | + {"kwarg1": True, "kwarg2": "val2", "kwarg3": 3}, |
16 | 16 | ), |
17 | 17 | ("arg1, arg2, kwarg1=/val/1,kwarg2 = val2", ["arg1", "arg2"], {"kwarg1": "/val/1", "kwarg2": "val2"}), # Both |
| 18 | + # Edge cases for casting |
| 19 | + ("1e10, inf, nan", [1e10, float('inf'), float('nan')], {}), |
| 20 | + ("007, 0123", [7, 123], {}), # Leading zeros |
| 21 | + ("kwarg1=1.0,kwarg2=0.0", [], {"kwarg1": 1.0, "kwarg2": 0.0}), # Ensure float casting |
| 22 | + # Boolean edge cases |
| 23 | + ("True, FALSE, yes, no", [True, False, True, False], {}), |
| 24 | + ( |
| 25 | + "kwarg1=TRUE,kwarg2=false,kwarg3=1,kwarg4=0", |
| 26 | + [], |
| 27 | + {"kwarg1": True, "kwarg2": False, "kwarg3": 1, "kwarg4": 0}, |
| 28 | + ), |
18 | 29 | (None, [], {}), # No arguments |
19 | 30 | ], |
20 | 31 | ) |
21 | 32 | def test__parse_args(arguments, expected_args, expected_kwargs): |
22 | 33 | args, kwargs = parse_task_args(arguments=arguments) |
| 34 | + for received, expected in zip(args, expected_args): |
| 35 | + if isinstance(expected, float) and expected != expected: # NaN check |
| 36 | + assert received != received |
| 37 | + else: |
| 38 | + assert received == expected |
23 | 39 |
|
24 | | - assert args == expected_args |
25 | 40 | assert kwargs == expected_kwargs |
26 | 41 |
|
27 | 42 |
|
|
0 commit comments