diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index f364316e2..2904995c6 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -154,6 +154,14 @@ def pytest_addoption(parser: Parser) -> None: dest="no_summary", help="Disable summary", ) + group._addoption( + "--fold-skipped", + action="store", + dest="foldskipped", + choices=["no", "yes"], + default="yes", + help="Whether to fold skipped tests in short summary or not. " "Default: yes.", + ) group._addoption( "-q", "--quiet", @@ -371,6 +379,7 @@ class TerminalReporter: self._screen_width = self._tw.fullwidth self.currentfspath: None | Path | str | int = None self.reportchars = getreportopt(config) + self.foldskipped = True if config.option.foldskipped == "yes" else False self.hasmarkup = self._tw.hasmarkup self.isatty = file.isatty() self._progress_nodeids_reported: set[str] = set() @@ -1232,7 +1241,7 @@ class TerminalReporter: line += " - " + str(reason) lines.append(line) - def show_skipped(lines: list[str]) -> None: + def show_skipped_folded(lines: list[str]) -> None: skipped: list[CollectReport] = self.stats.get("skipped", []) fskips = _folded_skips(self.startpath, skipped) if skipped else [] if not fskips: @@ -1252,6 +1261,31 @@ class TerminalReporter: else: lines.append("%s [%d] %s: %s" % (markup_word, num, fspath, reason)) + def show_skipped_unfolded(lines: list[str]) -> None: + skipped: list[CollectReport] = self.stats.get("skipped", []) + + for rep in skipped: + assert rep.longrepr is not None + assert isinstance(rep.longrepr, tuple), (rep, rep.longrepr) + assert len(rep.longrepr) == 3, (rep, rep.longrepr) + + verbose_word, verbose_markup = rep._get_verbose_word_with_markup( + self.config, {_color_for_type["warnings"]: True} + ) + markup_word = self._tw.markup(verbose_word, **verbose_markup) + nodeid = _get_node_id_with_markup(self._tw, self.config, rep) + line = f"{markup_word} {nodeid}" + reason = rep.longrepr[2] + if reason: + line += " - " + str(reason) + lines.append(line) + + def show_skipped(lines: list[str]) -> None: + if self.foldskipped: + show_skipped_folded(lines) + else: + show_skipped_unfolded(lines) + REPORTCHAR_ACTIONS: Mapping[str, Callable[[list[str]], None]] = { "x": show_xfailed, "X": show_xpassed,