Skip to content

Commit 5e1473b

Browse files
committed
Added tuple handling, exceptions and tests
1 parent 1737a13 commit 5e1473b

3 files changed

Lines changed: 42 additions & 2 deletions

File tree

pytest_cases/case_parametrizer_new.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
pass
4040

4141

42-
def parametrize_with_cases(argnames, # type: Union[str, List[str]]
42+
def parametrize_with_cases(argnames, # type: Union[str, List[str], Tuple[str, ...]]
4343
cases=AUTO, # type: Union[Callable, Type, ModuleRef]
4444
prefix=CASE_PREFIX_FUN, # type: str
4545
glob=None, # type: str

pytest_cases/fixture_parametrize_plus.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -802,10 +802,16 @@ def _get_argnames_argvalues(argnames=None, argvalues=None, **args):
802802
argvalues = [l[0] if not is_marked_parameter_value(l) else l for l in argvalues]
803803
return argnames, argvalues
804804

805-
elif isinstance(argnames, string_types):
805+
if isinstance(argnames, string_types):
806806
# (2) argnames + argvalues, as usual. However **args can also be passed and should be added
807807
argnames = get_param_argnames_as_list(argnames)
808808

809+
if not isinstance(argnames, (list, tuple)):
810+
raise TypeError("argnames should be a string, list or a tuple")
811+
812+
if any([not isinstance(argname, str) for argname in argnames]):
813+
raise TypeError("all argnames should be a strings")
814+
809815
if argvalues is None:
810816
raise ValueError("No argvalues provided while argnames are provided")
811817

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import pytest
2+
3+
from pytest_cases import parametrize_with_cases
4+
5+
6+
def case_sum_one_plus_two():
7+
a = 1
8+
b = 2
9+
c = 3
10+
return a, b, c
11+
12+
13+
@parametrize_with_cases(argnames=["a", "b", "c"], cases=".")
14+
def test_argnames_as_list(a, b, c):
15+
assert a + b == c
16+
17+
18+
@parametrize_with_cases(argnames=("a", "b", "c"), cases=".")
19+
def test_argnames_as_tuple(a, b, c):
20+
assert a + b == c
21+
22+
23+
def test_argnames_from_invalid_type():
24+
with pytest.raises(
25+
TypeError, match="^argnames should be a string, list or a tuple$"
26+
):
27+
parametrize_with_cases(argnames=42, cases=".")(lambda _: None)
28+
29+
30+
def test_argnames_element_from_invalid_type():
31+
with pytest.raises(
32+
TypeError, match="^all argnames should be a strings$"
33+
):
34+
parametrize_with_cases(argnames=["a", 2, "c"], cases=".")(lambda _: None)

0 commit comments

Comments
 (0)