From 1ce234dc783c92e8ffc70c726c2fb109573c0461 Mon Sep 17 00:00:00 2001 From: Fabian Sturm Date: Wed, 1 Nov 2023 15:41:46 +0100 Subject: [PATCH] Add summary for xfails with -rxX option --- src/_pytest/terminal.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index ea26d9368..7a8839afb 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -878,8 +878,10 @@ class TerminalReporter: def pytest_terminal_summary(self) -> Generator[None, None, None]: self.summary_errors() self.summary_failures() + self.summary_xfailures() self.summary_warnings() self.summary_passes() + self.summary_xpasses() try: return (yield) finally: @@ -1022,6 +1024,20 @@ class TerminalReporter: self._outrep_summary(rep) self._handle_teardown_sections(rep.nodeid) + def summary_xpasses(self) -> None: + if self.config.option.tbstyle != "no": + if self.hasopt("X"): + reports: List[TestReport] = self.getreports("xpassed") + if not reports: + return + self.write_sep("=", "XPASSES") + for rep in reports: + if rep.sections: + msg = self._getfailureheadline(rep) + self.write_sep("_", msg, green=True, bold=True) + self._outrep_summary(rep) + self._handle_teardown_sections(rep.nodeid) + def _get_teardown_reports(self, nodeid: str) -> List[TestReport]: reports = self.getreports("") return [ @@ -1064,6 +1080,25 @@ class TerminalReporter: self._outrep_summary(rep) self._handle_teardown_sections(rep.nodeid) + def summary_xfailures(self) -> None: + if self.config.option.tbstyle != "no": + if self.hasopt("x"): + reports: List[BaseReport] = self.getreports("xfailed") + if not reports: + return + self.write_sep("=", "XFAILURES") + if self.config.option.tbstyle == "line": + for rep in reports: + line = self._getcrashline(rep) + self.write_line(line) + else: + for rep in reports: + msg = self._getfailureheadline(rep) + self.write_sep("_", msg, red=True, bold=True) + self._outrep_summary(rep) + self._handle_teardown_sections(rep.nodeid) + + def summary_errors(self) -> None: if self.config.option.tbstyle != "no": reports: List[BaseReport] = self.getreports("error")