Check if all argnames are being used, by default values, or directly/indirectly. :param List[str] argnames: List of argument names passed to ``parametrize()``. :param indirect: Same as the ``indirect`` parameter of ``parametrize()``. :raises ValueError: If validation fails.
(
self,
argnames: Sequence[str],
indirect: bool | Sequence[str],
)
| 1490 | return list(itertools.islice(ids, num_ids)) |
| 1491 | |
| 1492 | def _validate_if_using_arg_names( |
| 1493 | self, |
| 1494 | argnames: Sequence[str], |
| 1495 | indirect: bool | Sequence[str], |
| 1496 | ) -> None: |
| 1497 | """Check if all argnames are being used, by default values, or directly/indirectly. |
| 1498 | |
| 1499 | :param List[str] argnames: List of argument names passed to ``parametrize()``. |
| 1500 | :param indirect: Same as the ``indirect`` parameter of ``parametrize()``. |
| 1501 | :raises ValueError: If validation fails. |
| 1502 | """ |
| 1503 | default_arg_names = set(get_default_arg_names(self.function)) |
| 1504 | nodeid = self.definition.nodeid |
| 1505 | for arg in argnames: |
| 1506 | if arg not in self.fixturenames: |
| 1507 | if arg in default_arg_names: |
| 1508 | fail( |
| 1509 | f"In {nodeid}: function already takes an argument '{arg}' with a default value", |
| 1510 | pytrace=False, |
| 1511 | ) |
| 1512 | else: |
| 1513 | if isinstance(indirect, Sequence): |
| 1514 | name = "fixture" if arg in indirect else "argument" |
| 1515 | else: |
| 1516 | name = "fixture" if indirect else "argument" |
| 1517 | fail( |
| 1518 | f"In {nodeid}: function uses no {name} '{arg}'", |
| 1519 | pytrace=False, |
| 1520 | ) |
| 1521 | |
| 1522 | def _recompute_direct_params_indices(self) -> None: |
| 1523 | for argname, param_type in self._params_directness.items(): |
no test coverage detected