Merge pull request #10219 from bluetech/parametrize-argnames-type
mark: allow any Sequence[str] for parametrize(argnames), not just list/tuple
This commit is contained in:
commit
b6eaf319d1
|
@ -0,0 +1,5 @@
|
||||||
|
``@pytest.mark.parametrize()`` (and similar functions) now accepts any ``Sequence[str]`` for the argument names,
|
||||||
|
instead of just ``list[str]`` and ``tuple[str, ...]``.
|
||||||
|
|
||||||
|
(Note that ``str``, which is itself a ``Sequence[str]``, is still treated as a
|
||||||
|
comma-delimited name list, as before).
|
|
@ -126,12 +126,12 @@ class ParameterSet(NamedTuple):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _parse_parametrize_args(
|
def _parse_parametrize_args(
|
||||||
argnames: Union[str, List[str], Tuple[str, ...]],
|
argnames: Union[str, Sequence[str]],
|
||||||
argvalues: Iterable[Union["ParameterSet", Sequence[object], object]],
|
argvalues: Iterable[Union["ParameterSet", Sequence[object], object]],
|
||||||
*args,
|
*args,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> Tuple[Union[List[str], Tuple[str, ...]], bool]:
|
) -> Tuple[Sequence[str], bool]:
|
||||||
if not isinstance(argnames, (tuple, list)):
|
if isinstance(argnames, str):
|
||||||
argnames = [x.strip() for x in argnames.split(",") if x.strip()]
|
argnames = [x.strip() for x in argnames.split(",") if x.strip()]
|
||||||
force_tuple = len(argnames) == 1
|
force_tuple = len(argnames) == 1
|
||||||
else:
|
else:
|
||||||
|
@ -150,12 +150,12 @@ class ParameterSet(NamedTuple):
|
||||||
@classmethod
|
@classmethod
|
||||||
def _for_parametrize(
|
def _for_parametrize(
|
||||||
cls,
|
cls,
|
||||||
argnames: Union[str, List[str], Tuple[str, ...]],
|
argnames: Union[str, Sequence[str]],
|
||||||
argvalues: Iterable[Union["ParameterSet", Sequence[object], object]],
|
argvalues: Iterable[Union["ParameterSet", Sequence[object], object]],
|
||||||
func,
|
func,
|
||||||
config: Config,
|
config: Config,
|
||||||
nodeid: str,
|
nodeid: str,
|
||||||
) -> Tuple[Union[List[str], Tuple[str, ...]], List["ParameterSet"]]:
|
) -> Tuple[Sequence[str], List["ParameterSet"]]:
|
||||||
argnames, force_tuple = cls._parse_parametrize_args(argnames, argvalues)
|
argnames, force_tuple = cls._parse_parametrize_args(argnames, argvalues)
|
||||||
parameters = cls._parse_parametrize_parameters(argvalues, force_tuple)
|
parameters = cls._parse_parametrize_parameters(argvalues, force_tuple)
|
||||||
del argvalues
|
del argvalues
|
||||||
|
@ -434,7 +434,7 @@ if TYPE_CHECKING:
|
||||||
class _ParametrizeMarkDecorator(MarkDecorator):
|
class _ParametrizeMarkDecorator(MarkDecorator):
|
||||||
def __call__( # type: ignore[override]
|
def __call__( # type: ignore[override]
|
||||||
self,
|
self,
|
||||||
argnames: Union[str, List[str], Tuple[str, ...]],
|
argnames: Union[str, Sequence[str]],
|
||||||
argvalues: Iterable[Union[ParameterSet, Sequence[object], object]],
|
argvalues: Iterable[Union[ParameterSet, Sequence[object], object]],
|
||||||
*,
|
*,
|
||||||
indirect: Union[bool, Sequence[str]] = ...,
|
indirect: Union[bool, Sequence[str]] = ...,
|
||||||
|
|
|
@ -1207,7 +1207,7 @@ class Metafunc:
|
||||||
|
|
||||||
def parametrize(
|
def parametrize(
|
||||||
self,
|
self,
|
||||||
argnames: Union[str, List[str], Tuple[str, ...]],
|
argnames: Union[str, Sequence[str]],
|
||||||
argvalues: Iterable[Union[ParameterSet, Sequence[object], object]],
|
argvalues: Iterable[Union[ParameterSet, Sequence[object], object]],
|
||||||
indirect: Union[bool, Sequence[str]] = False,
|
indirect: Union[bool, Sequence[str]] = False,
|
||||||
ids: Optional[
|
ids: Optional[
|
||||||
|
|
Loading…
Reference in New Issue