aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/pytest/py3/_pytest/setupplan.py
blob: 09d90763e791de4ee2f175767be2ffe4301be52a (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