fix #2540, introduce mark.with_args
This commit is contained in:
parent
abb5d20841
commit
65b2de13a3
|
@ -335,6 +335,17 @@ class MarkDecorator:
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<MarkDecorator %r>" % (self.mark,)
|
return "<MarkDecorator %r>" % (self.mark,)
|
||||||
|
|
||||||
|
def with_args(self, *args, **kwargs):
|
||||||
|
""" return a MarkDecorator with extra arguments added
|
||||||
|
|
||||||
|
unlike call this can be used even if the sole argument is a callable/class
|
||||||
|
|
||||||
|
:return: MarkDecorator
|
||||||
|
"""
|
||||||
|
|
||||||
|
mark = Mark(self.name, args, kwargs)
|
||||||
|
return self.__class__(self.mark.combined_with(mark))
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
""" if passed a single callable argument: decorate it with mark info.
|
""" if passed a single callable argument: decorate it with mark info.
|
||||||
otherwise add *args/**kwargs in-place to mark information. """
|
otherwise add *args/**kwargs in-place to mark information. """
|
||||||
|
@ -348,9 +359,7 @@ class MarkDecorator:
|
||||||
store_legacy_markinfo(func, self.mark)
|
store_legacy_markinfo(func, self.mark)
|
||||||
store_mark(func, self.mark)
|
store_mark(func, self.mark)
|
||||||
return func
|
return func
|
||||||
|
return self.with_args(*args, **kwargs)
|
||||||
mark = Mark(self.name, args, kwargs)
|
|
||||||
return self.__class__(self.mark.combined_with(mark))
|
|
||||||
|
|
||||||
|
|
||||||
def get_unpacked_marks(obj):
|
def get_unpacked_marks(obj):
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Introduce ``mark.with_args`` in order to allow passing functions/classes as sole argument to marks.
|
|
@ -22,6 +22,19 @@ class TestMark(object):
|
||||||
mark = Mark()
|
mark = Mark()
|
||||||
pytest.raises((AttributeError, TypeError), mark)
|
pytest.raises((AttributeError, TypeError), mark)
|
||||||
|
|
||||||
|
def test_mark_with_param(self):
|
||||||
|
def some_function(abc):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class SomeClass(object):
|
||||||
|
pass
|
||||||
|
|
||||||
|
assert pytest.mark.fun(some_function) is some_function
|
||||||
|
assert pytest.mark.fun.with_args(some_function) is not some_function
|
||||||
|
|
||||||
|
assert pytest.mark.fun(SomeClass) is SomeClass
|
||||||
|
assert pytest.mark.fun.with_args(SomeClass) is not SomeClass
|
||||||
|
|
||||||
def test_pytest_mark_name_starts_with_underscore(self):
|
def test_pytest_mark_name_starts_with_underscore(self):
|
||||||
mark = Mark()
|
mark = Mark()
|
||||||
pytest.raises(AttributeError, getattr, mark, '_some_name')
|
pytest.raises(AttributeError, getattr, mark, '_some_name')
|
||||||
|
|
Loading…
Reference in New Issue