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.
|
to set a dynamic scope using test context or configuration.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# individual parametrized argument sets can be wrapped in a
|
# individual parametrized argument sets can be wrapped in a series
|
||||||
# marker in which case we unwrap the values and apply the mark
|
# of markers in which case we unwrap the values and apply the mark
|
||||||
# at Function init
|
# at Function init
|
||||||
newkeywords = {}
|
newkeywords = {}
|
||||||
unwrapped_argvalues = []
|
unwrapped_argvalues = []
|
||||||
for i, argval in enumerate(argvalues):
|
for i, argval in enumerate(argvalues):
|
||||||
if isinstance(argval, MarkDecorator):
|
while isinstance(argval, MarkDecorator):
|
||||||
newmark = MarkDecorator(argval.markname,
|
newmark = MarkDecorator(argval.markname,
|
||||||
argval.args[:-1], argval.kwargs)
|
argval.args[:-1], argval.kwargs)
|
||||||
newkeywords[i] = {newmark.markname: newmark}
|
newmarks = newkeywords.setdefault(i, {})
|
||||||
|
newmarks[newmark.markname] = newmark
|
||||||
argval = argval.args[-1]
|
argval = argval.args[-1]
|
||||||
unwrapped_argvalues.append(argval)
|
unwrapped_argvalues.append(argval)
|
||||||
argvalues = unwrapped_argvalues
|
argvalues = unwrapped_argvalues
|
||||||
|
|
|
@ -355,6 +355,21 @@ class TestFunction:
|
||||||
rec = testdir.inline_run()
|
rec = testdir.inline_run()
|
||||||
rec.assertoutcome(passed=2)
|
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):
|
def test_function_equality_with_callspec(self, testdir, tmpdir):
|
||||||
items = testdir.getitems("""
|
items = testdir.getitems("""
|
||||||
import pytest
|
import pytest
|
||||||
|
|
Loading…
Reference in New Issue