Skip to content

Commit f9cdcc2

Browse files
author
Sylvain MARIE
committed
Fixed issues where the currentcases fixture would not return the correct case function. Fixed #212
1 parent 8486736 commit f9cdcc2

File tree

2 files changed

+72
-3
lines changed

2 files changed

+72
-3
lines changed

pytest_cases/case_parametrizer_new.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ class _LazyValueCaseParamValue(LazyValue, CaseParamValue):
341341
"""
342342

343343
def get_case_function(self, request):
344-
return self.valuegetter
344+
return _get_original_case_func(self.valuegetter)[0]
345345

346346
def as_lazy_tuple(self, nb_params):
347347
return _LazyTupleCaseParamValue(self, nb_params)
@@ -350,7 +350,7 @@ def as_lazy_tuple(self, nb_params):
350350
class _LazyTupleCaseParamValue(LazyTuple, CaseParamValue):
351351
"""A case representing a tuple"""
352352
def get_case_function(self, request):
353-
return self._lazyvalue.valuegetter
353+
return _get_original_case_func(self._lazyvalue.valuegetter)[0]
354354

355355

356356
class _FixtureRefCaseParamValue(fixture_ref, CaseParamValue):
@@ -929,7 +929,11 @@ def _possibly_add_cases_to_results(request, results, mp_fix_to_args, argname_or_
929929
case_func = current_param_value.argval.get_case_function(request)
930930
else:
931931
# a single value. continue: this will be handled similar to what is below
932-
current_param_value = current_param_value.argval
932+
argnames = current_param_value.argnames
933+
if len(argnames) == 1:
934+
current_param_value = current_param_value.argval[0]
935+
else:
936+
current_param_value = current_param_value.argval
933937

934938
# elif isinstance(current_param_value, ProductParamAlternative):
935939
# # This should not happen with cases, this is a tuple where a *member* is a fixture_ref
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import sys
2+
from pytest_cases import parametrize, parametrize_with_cases
3+
4+
5+
PY3 = sys.version_info >= (3,)
6+
7+
8+
class MyClassName:
9+
def case_foo(self):
10+
return "fooval"
11+
12+
13+
@parametrize_with_cases('val', cases=MyClassName)
14+
def test_function_basic_parametrize(val, current_cases):
15+
assert val == "fooval"
16+
17+
case_id, case_func = current_cases['val']
18+
assert case_id == "foo"
19+
if PY3:
20+
assert case_func is MyClassName.case_foo
21+
else:
22+
assert case_func == MyClassName.case_foo
23+
24+
25+
class MyClassNameTuple:
26+
def case_foo(self):
27+
return 1, 2
28+
29+
30+
@parametrize_with_cases('a,b', cases=MyClassNameTuple)
31+
def test_function_tuple_basic_parametrize(a, b, current_cases):
32+
assert (a, b) == (1, 2)
33+
34+
case_id, case_func = current_cases['a']
35+
assert case_id, case_func == current_cases['b']
36+
assert case_id == "foo"
37+
if PY3:
38+
assert case_func is MyClassNameTuple.case_foo
39+
else:
40+
assert case_func == MyClassNameTuple.case_foo
41+
42+
43+
class MyClassName2:
44+
def case_bar(self):
45+
return "barval"
46+
47+
@parametrize(dummy=['a'])
48+
def case_foo(self, dummy):
49+
return "fooval"
50+
51+
52+
@parametrize_with_cases('val', cases=MyClassName2)
53+
def test_function_nested_parametrize(val, current_cases):
54+
ref = {
55+
"barval": MyClassName2.case_bar,
56+
"fooval": MyClassName2.case_foo
57+
}
58+
59+
case_id, case_func = current_cases['val']
60+
assert case_id == val[:3]
61+
62+
if PY3:
63+
assert case_func is ref[val]
64+
else:
65+
assert case_func == ref[val]

0 commit comments

Comments
 (0)