Fix `pytest.mark.parametrize` when the argvalue is an iterator
This commit is contained in:
parent
917195ea8e
commit
cafb13c95f
|
@ -0,0 +1 @@
|
||||||
|
Fix ``pytest.mark.parametrize`` when the argvalues is an iterator.
|
|
@ -113,14 +113,18 @@ class ParameterSet(namedtuple("ParameterSet", "values, marks, id")):
|
||||||
force_tuple = len(argnames) == 1
|
force_tuple = len(argnames) == 1
|
||||||
else:
|
else:
|
||||||
force_tuple = False
|
force_tuple = False
|
||||||
parameters = [
|
return argnames, force_tuple
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _parse_parametrize_parameters(argvalues, force_tuple):
|
||||||
|
return [
|
||||||
ParameterSet.extract_from(x, force_tuple=force_tuple) for x in argvalues
|
ParameterSet.extract_from(x, force_tuple=force_tuple) for x in argvalues
|
||||||
]
|
]
|
||||||
return argnames, parameters
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _for_parametrize(cls, argnames, argvalues, func, config, function_definition):
|
def _for_parametrize(cls, argnames, argvalues, func, config, function_definition):
|
||||||
argnames, parameters = cls._parse_parametrize_args(argnames, argvalues)
|
argnames, force_tuple = cls._parse_parametrize_args(argnames, argvalues)
|
||||||
|
parameters = cls._parse_parametrize_parameters(argvalues, force_tuple)
|
||||||
del argvalues
|
del argvalues
|
||||||
|
|
||||||
if parameters:
|
if parameters:
|
||||||
|
|
|
@ -413,6 +413,28 @@ def test_parametrized_with_kwargs(testdir):
|
||||||
assert result.ret == 0
|
assert result.ret == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_parametrize_iterator(testdir):
|
||||||
|
"""parametrize should work with generators (#5354)."""
|
||||||
|
py_file = testdir.makepyfile(
|
||||||
|
"""\
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
def gen():
|
||||||
|
yield 1
|
||||||
|
yield 2
|
||||||
|
yield 3
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('a', gen())
|
||||||
|
def test(a):
|
||||||
|
assert a >= 1
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
result = testdir.runpytest(py_file)
|
||||||
|
assert result.ret == 0
|
||||||
|
# should not skip any tests
|
||||||
|
result.stdout.fnmatch_lines(["*3 passed*"])
|
||||||
|
|
||||||
|
|
||||||
class TestFunctional(object):
|
class TestFunctional(object):
|
||||||
def test_merging_markers_deep(self, testdir):
|
def test_merging_markers_deep(self, testdir):
|
||||||
# issue 199 - propagate markers into nested classes
|
# issue 199 - propagate markers into nested classes
|
||||||
|
|
Loading…
Reference in New Issue