Skip to content

Commit

Permalink
[4.6] Fix pytest.mark.parametrize when the argvalue is an iterator (#…
Browse files Browse the repository at this point in the history
…5357)

[4.6] Fix `pytest.mark.parametrize` when the argvalue is an iterator
  • Loading branch information
nicoddemus authored Jun 1, 2019
2 parents 917195e + f7bf914 commit dba62f8
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 3 deletions.
1 change: 1 addition & 0 deletions changelog/5354.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix ``pytest.mark.parametrize`` when the argvalues is an iterator.
10 changes: 7 additions & 3 deletions src/_pytest/mark/structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,14 +113,18 @@ def _parse_parametrize_args(argnames, argvalues, **_):
force_tuple = len(argnames) == 1
else:
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
]
return argnames, parameters

@classmethod
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

if parameters:
Expand Down
22 changes: 22 additions & 0 deletions testing/test_mark.py
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,28 @@ def test_func(a, b):
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):
def test_merging_markers_deep(self, testdir):
# issue 199 - propagate markers into nested classes
Expand Down

0 comments on commit dba62f8

Please sign in to comment.