Support multiple marks for individual parametrized argument set
--HG-- branch : multi-marks
This commit is contained in:
parent
9dec27371d
commit
7210e443ee
|
@ -693,16 +693,17 @@ class Metafunc(FuncargnamesCompatAttr):
|
|||
to set a dynamic scope using test context or configuration.
|
||||
"""
|
||||
|
||||
# individual parametrized argument sets can be wrapped in a
|
||||
# marker in which case we unwrap the values and apply the mark
|
||||
# individual parametrized argument sets can be wrapped in a series
|
||||
# of markers in which case we unwrap the values and apply the mark
|
||||
# at Function init
|
||||
newkeywords = {}
|
||||
unwrapped_argvalues = []
|
||||
for i, argval in enumerate(argvalues):
|
||||
if isinstance(argval, MarkDecorator):
|
||||
while isinstance(argval, MarkDecorator):
|
||||
newmark = MarkDecorator(argval.markname,
|
||||
argval.args[:-1], argval.kwargs)
|
||||
newkeywords[i] = {newmark.markname: newmark}
|
||||
newmarks = newkeywords.setdefault(i, {})
|
||||
newmarks[newmark.markname] = newmark
|
||||
argval = argval.args[-1]
|
||||
unwrapped_argvalues.append(argval)
|
||||
argvalues = unwrapped_argvalues
|
||||
|
|
|
@ -355,6 +355,21 @@ class TestFunction:
|
|||
rec = testdir.inline_run()
|
||||
rec.assertoutcome(passed=2)
|
||||
|
||||
def test_parametrize_with_mark(selfself, testdir):
|
||||
items = testdir.getitems("""
|
||||
import pytest
|
||||
@pytest.mark.foo
|
||||
@pytest.mark.parametrize('arg', [
|
||||
1,
|
||||
pytest.mark.bar(pytest.mark.baz(2))
|
||||
])
|
||||
def test_function(arg):
|
||||
pass
|
||||
""")
|
||||
keywords = [item.keywords for item in items]
|
||||
assert 'foo' in keywords[0] and 'bar' not in keywords[0] and 'baz' not in keywords[0]
|
||||
assert 'foo' in keywords[1] and 'bar' in keywords[1] and 'baz' in keywords[1]
|
||||
|
||||
def test_function_equality_with_callspec(self, testdir, tmpdir):
|
||||
items = testdir.getitems("""
|
||||
import pytest
|
||||
|
|
Loading…
Reference in New Issue