aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/pytest/py3/_pytest/setupplan.py
blob: 782c2cd861f821043282f0f38e84963628cc2643 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from typing import Optional 
from typing import Union 
 
import pytest
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 


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 
) -> Optional[object]: 
    # Will return a dummy fixture if the setuponly option is provided.
    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) -> Optional[Union[int, ExitCode]]: 
    if config.option.setupplan:
        config.option.setuponly = True
        config.option.setupshow = True
    return None