You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.9 KiB
Python
80 lines
2.9 KiB
Python
_fixture_functions = None # installed by plugin_base
|
|
|
|
|
|
def combinations(*comb, **kw):
|
|
r"""Deliver multiple versions of a test based on positional combinations.
|
|
|
|
This is a facade over pytest.mark.parametrize.
|
|
|
|
|
|
:param \*comb: argument combinations. These are tuples that will be passed
|
|
positionally to the decorated function.
|
|
|
|
:param argnames: optional list of argument names. These are the names
|
|
of the arguments in the test function that correspond to the entries
|
|
in each argument tuple. pytest.mark.parametrize requires this, however
|
|
the combinations function will derive it automatically if not present
|
|
by using ``inspect.getfullargspec(fn).args[1:]``. Note this assumes the
|
|
first argument is "self" which is discarded.
|
|
|
|
:param id\_: optional id template. This is a string template that
|
|
describes how the "id" for each parameter set should be defined, if any.
|
|
The number of characters in the template should match the number of
|
|
entries in each argument tuple. Each character describes how the
|
|
corresponding entry in the argument tuple should be handled, as far as
|
|
whether or not it is included in the arguments passed to the function, as
|
|
well as if it is included in the tokens used to create the id of the
|
|
parameter set.
|
|
|
|
If omitted, the argument combinations are passed to parametrize as is. If
|
|
passed, each argument combination is turned into a pytest.param() object,
|
|
mapping the elements of the argument tuple to produce an id based on a
|
|
character value in the same position within the string template using the
|
|
following scheme::
|
|
|
|
i - the given argument is a string that is part of the id only, don't
|
|
pass it as an argument
|
|
|
|
n - the given argument should be passed and it should be added to the
|
|
id by calling the .__name__ attribute
|
|
|
|
r - the given argument should be passed and it should be added to the
|
|
id by calling repr()
|
|
|
|
s - the given argument should be passed and it should be added to the
|
|
id by calling str()
|
|
|
|
a - (argument) the given argument should be passed and it should not
|
|
be used to generated the id
|
|
|
|
e.g.::
|
|
|
|
@testing.combinations(
|
|
(operator.eq, "eq"),
|
|
(operator.ne, "ne"),
|
|
(operator.gt, "gt"),
|
|
(operator.lt, "lt"),
|
|
id_="na"
|
|
)
|
|
def test_operator(self, opfunc, name):
|
|
pass
|
|
|
|
The above combination will call ``.__name__`` on the first member of
|
|
each tuple and use that as the "id" to pytest.param().
|
|
|
|
|
|
"""
|
|
return _fixture_functions.combinations(*comb, **kw)
|
|
|
|
|
|
def fixture(*arg, **kw):
|
|
return _fixture_functions.fixture(*arg, **kw)
|
|
|
|
|
|
def get_current_test_name():
|
|
return _fixture_functions.get_current_test_name()
|
|
|
|
|
|
def skip_test(msg):
|
|
raise _fixture_functions.skip_test_exception(msg)
|