Merge pull request #7017 from bluetech/doc-pytest_report_teststatus
Document the pytest_report_teststatus hook better and test uncovered functionality
This commit is contained in:
		
						commit
						cb06bc7d6e
					
				| 
						 | 
				
			
			@ -1,6 +1,9 @@
 | 
			
		|||
""" hook specifications for pytest plugins, invoked from main.py and builtin plugins.  """
 | 
			
		||||
from typing import Any
 | 
			
		||||
from typing import Mapping
 | 
			
		||||
from typing import Optional
 | 
			
		||||
from typing import Tuple
 | 
			
		||||
from typing import Union
 | 
			
		||||
 | 
			
		||||
from pluggy import HookspecMarker
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -8,7 +11,9 @@ from .deprecated import COLLECT_DIRECTORY_HOOK
 | 
			
		|||
from _pytest.compat import TYPE_CHECKING
 | 
			
		||||
 | 
			
		||||
if TYPE_CHECKING:
 | 
			
		||||
    from _pytest.config import Config
 | 
			
		||||
    from _pytest.main import Session
 | 
			
		||||
    from _pytest.reports import BaseReport
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
hookspec = HookspecMarker("pytest")
 | 
			
		||||
| 
						 | 
				
			
			@ -546,12 +551,32 @@ def pytest_report_collectionfinish(config, startdir, items):
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
@hookspec(firstresult=True)
 | 
			
		||||
def pytest_report_teststatus(report, config):
 | 
			
		||||
    """ return result-category, shortletter and verbose word for reporting.
 | 
			
		||||
def pytest_report_teststatus(
 | 
			
		||||
    report: "BaseReport", config: "Config"
 | 
			
		||||
) -> Tuple[
 | 
			
		||||
    str, str, Union[str, Mapping[str, bool]],
 | 
			
		||||
]:
 | 
			
		||||
    """Return result-category, shortletter and verbose word for status
 | 
			
		||||
    reporting.
 | 
			
		||||
 | 
			
		||||
    :param _pytest.config.Config config: pytest config object
 | 
			
		||||
    The result-category is a category in which to count the result, for
 | 
			
		||||
    example "passed", "skipped", "error" or the empty string.
 | 
			
		||||
 | 
			
		||||
    Stops at first non-None result, see :ref:`firstresult` """
 | 
			
		||||
    The shortletter is shown as testing progresses, for example ".", "s",
 | 
			
		||||
    "E" or the empty string.
 | 
			
		||||
 | 
			
		||||
    The verbose word is shown as testing progresses in verbose mode, for
 | 
			
		||||
    example "PASSED", "SKIPPED", "ERROR" or the empty string.
 | 
			
		||||
 | 
			
		||||
    pytest may style these implicitly according to the report outcome.
 | 
			
		||||
    To provide explicit styling, return a tuple for the verbose word,
 | 
			
		||||
    for example ``"rerun", "R", ("RERUN", {"yellow": True})``.
 | 
			
		||||
 | 
			
		||||
    :param report: The report object whose status is to be returned.
 | 
			
		||||
    :param _pytest.config.Config config: The pytest config object.
 | 
			
		||||
 | 
			
		||||
    Stops at first non-None result, see :ref:`firstresult`.
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def pytest_terminal_summary(terminalreporter, exitstatus, config):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -306,6 +306,29 @@ class TestTerminal:
 | 
			
		|||
        tr.rewrite("hey", erase=True)
 | 
			
		||||
        assert f.getvalue() == "hello" + "\r" + "hey" + (6 * " ")
 | 
			
		||||
 | 
			
		||||
    def test_report_teststatus_explicit_markup(
 | 
			
		||||
        self, testdir: Testdir, color_mapping
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        """Test that TerminalReporter handles markup explicitly provided by
 | 
			
		||||
        a pytest_report_teststatus hook."""
 | 
			
		||||
        testdir.monkeypatch.setenv("PY_COLORS", "1")
 | 
			
		||||
        testdir.makeconftest(
 | 
			
		||||
            """
 | 
			
		||||
            def pytest_report_teststatus(report):
 | 
			
		||||
                return 'foo', 'F', ('FOO', {'red': True})
 | 
			
		||||
        """
 | 
			
		||||
        )
 | 
			
		||||
        testdir.makepyfile(
 | 
			
		||||
            """
 | 
			
		||||
            def test_foobar():
 | 
			
		||||
                pass
 | 
			
		||||
        """
 | 
			
		||||
        )
 | 
			
		||||
        result = testdir.runpytest("-v")
 | 
			
		||||
        result.stdout.fnmatch_lines(
 | 
			
		||||
            color_mapping.format_for_fnmatch(["*{red}FOO{reset}*"])
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestCollectonly:
 | 
			
		||||
    def test_collectonly_basic(self, testdir):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue