Skip to content

Commit 06029d1

Browse files
committed
Refactor into TerminalReporter.short_test_summary
1 parent c70ecd4 commit 06029d1

File tree

2 files changed

+96
-103
lines changed

2 files changed

+96
-103
lines changed

src/_pytest/terminal.py

Lines changed: 94 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,7 @@ def pytest_terminal_summary(self):
678678
self.summary_failures()
679679
self.summary_warnings()
680680
yield
681+
self.short_test_summary()
681682
self.summary_passes()
682683
# Display any extra warnings from teardown here (if any).
683684
self.summary_warnings()
@@ -873,58 +874,100 @@ def summary_stats(self):
873874
if self.verbosity == -1:
874875
self.write_line(msg, **markup)
875876

877+
def short_test_summary(self):
878+
if not self.reportchars:
879+
return
876880

877-
def pytest_terminal_summary(terminalreporter):
878-
tr = terminalreporter
879-
if not tr.reportchars:
880-
return
881-
882-
lines = []
883-
for char in tr.reportchars:
884-
action = REPORTCHAR_ACTIONS.get(char, lambda tr, lines: None)
885-
action(terminalreporter, lines)
886-
887-
if lines:
888-
tr._tw.sep("=", "short test summary info")
889-
for line in lines:
890-
tr._tw.line(line)
891-
892-
893-
def show_simple(terminalreporter, lines, stat):
894-
failed = terminalreporter.stats.get(stat)
895-
if failed:
896-
config = terminalreporter.config
897-
for rep in failed:
898-
verbose_word = _get_report_str(config, rep)
899-
pos = _get_pos(config, rep)
900-
lines.append("%s %s" % (verbose_word, pos))
901-
902-
903-
def show_xfailed(terminalreporter, lines):
904-
xfailed = terminalreporter.stats.get("xfailed")
905-
if xfailed:
906-
config = terminalreporter.config
907-
for rep in xfailed:
908-
verbose_word = _get_report_str(config, rep)
909-
pos = _get_pos(config, rep)
910-
lines.append("%s %s" % (verbose_word, pos))
911-
reason = rep.wasxfail
912-
if reason:
913-
lines.append(" " + str(reason))
914-
915-
916-
def show_xpassed(terminalreporter, lines):
917-
xpassed = terminalreporter.stats.get("xpassed")
918-
if xpassed:
919-
config = terminalreporter.config
920-
for rep in xpassed:
921-
verbose_word = _get_report_str(config, rep)
922-
pos = _get_pos(config, rep)
923-
reason = rep.wasxfail
924-
lines.append("%s %s %s" % (verbose_word, pos, reason))
925-
926-
927-
def folded_skips(skipped):
881+
def show_simple(lines, stat):
882+
failed = self.stats.get(stat)
883+
if failed:
884+
config = self.config
885+
for rep in failed:
886+
verbose_word = _get_report_str(config, rep)
887+
pos = _get_pos(config, rep)
888+
lines.append("%s %s" % (verbose_word, pos))
889+
890+
def show_xfailed(lines):
891+
xfailed = self.stats.get("xfailed")
892+
if xfailed:
893+
config = self.config
894+
for rep in xfailed:
895+
verbose_word = _get_report_str(config, rep)
896+
pos = _get_pos(config, rep)
897+
lines.append("%s %s" % (verbose_word, pos))
898+
reason = rep.wasxfail
899+
if reason:
900+
lines.append(" " + str(reason))
901+
902+
def show_xpassed(lines):
903+
xpassed = self.stats.get("xpassed")
904+
if xpassed:
905+
config = self.config
906+
for rep in xpassed:
907+
verbose_word = _get_report_str(config, rep)
908+
pos = _get_pos(config, rep)
909+
reason = rep.wasxfail
910+
lines.append("%s %s %s" % (verbose_word, pos, reason))
911+
912+
def show_skipped(lines):
913+
skipped = self.stats.get("skipped", [])
914+
if skipped:
915+
fskips = _folded_skips(skipped)
916+
if fskips:
917+
verbose_word = _get_report_str(self.config, report=skipped[0])
918+
for num, fspath, lineno, reason in fskips:
919+
if reason.startswith("Skipped: "):
920+
reason = reason[9:]
921+
if lineno is not None:
922+
lines.append(
923+
"%s [%d] %s:%d: %s"
924+
% (verbose_word, num, fspath, lineno + 1, reason)
925+
)
926+
else:
927+
lines.append(
928+
"%s [%d] %s: %s" % (verbose_word, num, fspath, reason)
929+
)
930+
931+
def shower(stat):
932+
def show_(lines):
933+
return show_simple(lines, stat)
934+
935+
return show_
936+
937+
def _get_report_str(config, report):
938+
_category, _short, verbose = config.hook.pytest_report_teststatus(
939+
report=report, config=config
940+
)
941+
return verbose
942+
943+
def _get_pos(config, rep):
944+
nodeid = config.cwd_relative_nodeid(rep.nodeid)
945+
return nodeid
946+
947+
REPORTCHAR_ACTIONS = {
948+
"x": show_xfailed,
949+
"X": show_xpassed,
950+
"f": shower("failed"),
951+
"F": shower("failed"),
952+
"s": show_skipped,
953+
"S": show_skipped,
954+
"p": shower("passed"),
955+
"E": shower("error"),
956+
}
957+
958+
lines = []
959+
for char in self.reportchars:
960+
action = REPORTCHAR_ACTIONS.get(char)
961+
if action: # skipping e.g. "P" (passed with output) here.
962+
action(lines)
963+
964+
if lines:
965+
self.write_sep("=", "short test summary info")
966+
for line in lines:
967+
self.write_line(line)
968+
969+
970+
def _folded_skips(skipped):
928971
d = {}
929972
for event in skipped:
930973
key = event.longrepr
@@ -946,56 +989,6 @@ def folded_skips(skipped):
946989
return values
947990

948991

949-
def show_skipped(terminalreporter, lines):
950-
tr = terminalreporter
951-
skipped = tr.stats.get("skipped", [])
952-
if skipped:
953-
fskips = folded_skips(skipped)
954-
if fskips:
955-
verbose_word = _get_report_str(terminalreporter.config, report=skipped[0])
956-
for num, fspath, lineno, reason in fskips:
957-
if reason.startswith("Skipped: "):
958-
reason = reason[9:]
959-
if lineno is not None:
960-
lines.append(
961-
"%s [%d] %s:%d: %s"
962-
% (verbose_word, num, fspath, lineno + 1, reason)
963-
)
964-
else:
965-
lines.append("%s [%d] %s: %s" % (verbose_word, num, fspath, reason))
966-
967-
968-
def shower(stat):
969-
def show_(terminalreporter, lines):
970-
return show_simple(terminalreporter, lines, stat)
971-
972-
return show_
973-
974-
975-
def _get_report_str(config, report):
976-
_category, _short, verbose = config.hook.pytest_report_teststatus(
977-
report=report, config=config
978-
)
979-
return verbose
980-
981-
982-
def _get_pos(config, rep):
983-
nodeid = config.cwd_relative_nodeid(rep.nodeid)
984-
return nodeid
985-
986-
987-
REPORTCHAR_ACTIONS = {
988-
"x": show_xfailed,
989-
"X": show_xpassed,
990-
"f": shower("failed"),
991-
"F": shower("failed"),
992-
"s": show_skipped,
993-
"S": show_skipped,
994-
"p": shower("passed"),
995-
"E": shower("error"),
996-
}
997-
998-
999992
def build_summary_stats_line(stats):
1000993
known_types = (
1001994
"failed passed skipped deselected xfailed xpassed warnings error".split()

testing/test_terminal.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
import pytest
1717
from _pytest.main import EXIT_NOTESTSCOLLECTED
1818
from _pytest.reports import BaseReport
19+
from _pytest.terminal import _folded_skips
1920
from _pytest.terminal import _plugin_nameversions
2021
from _pytest.terminal import build_summary_stats_line
21-
from _pytest.terminal import folded_skips
2222
from _pytest.terminal import getreportopt
2323
from _pytest.terminal import TerminalReporter
2424

@@ -1552,7 +1552,7 @@ class X(object):
15521552
ev3.longrepr = longrepr
15531553
ev3.skipped = True
15541554

1555-
values = folded_skips([ev1, ev2, ev3])
1555+
values = _folded_skips([ev1, ev2, ev3])
15561556
assert len(values) == 1
15571557
num, fspath, lineno, reason = values[0]
15581558
assert num == 3

0 commit comments

Comments
 (0)