| | from __future__ import annotations |
| |
|
| | from _pytest.config import Config |
| | from _pytest.config import ExitCode |
| | from _pytest.config.argparsing import Parser |
| | from _pytest.fixtures import FixtureDef |
| | from _pytest.fixtures import SubRequest |
| | import pytest |
| |
|
| |
|
| | def pytest_addoption(parser: Parser) -> None: |
| | group = parser.getgroup("debugconfig") |
| | group.addoption( |
| | "--setupplan", |
| | "--setup-plan", |
| | action="store_true", |
| | help="Show what fixtures and tests would be executed but " |
| | "don't execute anything", |
| | ) |
| |
|
| |
|
| | @pytest.hookimpl(tryfirst=True) |
| | def pytest_fixture_setup( |
| | fixturedef: FixtureDef[object], request: SubRequest |
| | ) -> object | None: |
| | |
| | if request.config.option.setupplan: |
| | my_cache_key = fixturedef.cache_key(request) |
| | fixturedef.cached_result = (None, my_cache_key, None) |
| | return fixturedef.cached_result |
| | return None |
| |
|
| |
|
| | @pytest.hookimpl(tryfirst=True) |
| | def pytest_cmdline_main(config: Config) -> int | ExitCode | None: |
| | if config.option.setupplan: |
| | config.option.setuponly = True |
| | config.option.setupshow = True |
| | return None |
| |
|