Support multiple marks for individual parametrized argument set

--HG--
branch : multi-marks
This commit is contained in:
James Lan 2013-11-01 21:10:13 -07:00
parent 9dec27371d
commit 7210e443ee
2 changed files with 20 additions and 4 deletions

View File

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

View File

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