Make 'S' and 'F' aliases to 's' and 'f' respectively (#6337)
Make 'S' and 'F' aliases to 's' and 'f' respectively
This commit is contained in:
commit
ecd1e43afb
|
@ -0,0 +1,3 @@
|
||||||
|
Fix summary entries appearing twice when ``f/F`` and ``s/S`` report chars were used at the same time in the ``-r`` command-line option (for example ``-rFf``).
|
||||||
|
|
||||||
|
The upper case variants were never documented and the preferred form should be the lower case.
|
|
@ -172,7 +172,11 @@ def getreportopt(config: Config) -> str:
|
||||||
reportchars += "w"
|
reportchars += "w"
|
||||||
elif config.option.disable_warnings and "w" in reportchars:
|
elif config.option.disable_warnings and "w" in reportchars:
|
||||||
reportchars = reportchars.replace("w", "")
|
reportchars = reportchars.replace("w", "")
|
||||||
|
aliases = {"F", "S"}
|
||||||
for char in reportchars:
|
for char in reportchars:
|
||||||
|
# handle old aliases
|
||||||
|
if char in aliases:
|
||||||
|
char = char.lower()
|
||||||
if char == "a":
|
if char == "a":
|
||||||
reportopts = "sxXwEf"
|
reportopts = "sxXwEf"
|
||||||
elif char == "A":
|
elif char == "A":
|
||||||
|
@ -185,19 +189,16 @@ def getreportopt(config: Config) -> str:
|
||||||
|
|
||||||
@pytest.hookimpl(trylast=True) # after _pytest.runner
|
@pytest.hookimpl(trylast=True) # after _pytest.runner
|
||||||
def pytest_report_teststatus(report: TestReport) -> Tuple[str, str, str]:
|
def pytest_report_teststatus(report: TestReport) -> Tuple[str, str, str]:
|
||||||
|
letter = "F"
|
||||||
if report.passed:
|
if report.passed:
|
||||||
letter = "."
|
letter = "."
|
||||||
elif report.skipped:
|
elif report.skipped:
|
||||||
letter = "s"
|
letter = "s"
|
||||||
elif report.failed:
|
|
||||||
letter = "F"
|
|
||||||
if report.when != "call":
|
|
||||||
letter = "f"
|
|
||||||
|
|
||||||
# Report failed CollectReports as "error" (in line with pytest_collectreport).
|
|
||||||
outcome = report.outcome
|
outcome = report.outcome
|
||||||
if report.when == "collect" and outcome == "failed":
|
if report.when in ("collect", "setup", "teardown") and outcome == "failed":
|
||||||
outcome = "error"
|
outcome = "error"
|
||||||
|
letter = "E"
|
||||||
|
|
||||||
return outcome, letter, outcome.upper()
|
return outcome, letter, outcome.upper()
|
||||||
|
|
||||||
|
@ -988,9 +989,7 @@ class TerminalReporter:
|
||||||
"x": show_xfailed,
|
"x": show_xfailed,
|
||||||
"X": show_xpassed,
|
"X": show_xpassed,
|
||||||
"f": partial(show_simple, "failed"),
|
"f": partial(show_simple, "failed"),
|
||||||
"F": partial(show_simple, "failed"),
|
|
||||||
"s": show_skipped,
|
"s": show_skipped,
|
||||||
"S": show_skipped,
|
|
||||||
"p": partial(show_simple, "passed"),
|
"p": partial(show_simple, "passed"),
|
||||||
"E": partial(show_simple, "error"),
|
"E": partial(show_simple, "error"),
|
||||||
} # type: Mapping[str, Callable[[List[str]], None]]
|
} # type: Mapping[str, Callable[[List[str]], None]]
|
||||||
|
|
|
@ -754,6 +754,35 @@ class TestTerminalFunctional:
|
||||||
result = testdir.runpytest(*params)
|
result = testdir.runpytest(*params)
|
||||||
result.stdout.fnmatch_lines(["collected 3 items", "hello from hook: 3 items"])
|
result.stdout.fnmatch_lines(["collected 3 items", "hello from hook: 3 items"])
|
||||||
|
|
||||||
|
def test_summary_f_alias(self, testdir):
|
||||||
|
"""Test that 'f' and 'F' report chars are aliases and don't show up twice in the summary (#6334)"""
|
||||||
|
testdir.makepyfile(
|
||||||
|
"""
|
||||||
|
def test():
|
||||||
|
assert False
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
result = testdir.runpytest("-rfF")
|
||||||
|
expected = "FAILED test_summary_f_alias.py::test - assert False"
|
||||||
|
result.stdout.fnmatch_lines([expected])
|
||||||
|
assert result.stdout.lines.count(expected) == 1
|
||||||
|
|
||||||
|
def test_summary_s_alias(self, testdir):
|
||||||
|
"""Test that 's' and 'S' report chars are aliases and don't show up twice in the summary"""
|
||||||
|
testdir.makepyfile(
|
||||||
|
"""
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
@pytest.mark.skip
|
||||||
|
def test():
|
||||||
|
pass
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
result = testdir.runpytest("-rsS")
|
||||||
|
expected = "SKIPPED [1] test_summary_s_alias.py:3: unconditional skip"
|
||||||
|
result.stdout.fnmatch_lines([expected])
|
||||||
|
assert result.stdout.lines.count(expected) == 1
|
||||||
|
|
||||||
|
|
||||||
def test_fail_extra_reporting(testdir, monkeypatch):
|
def test_fail_extra_reporting(testdir, monkeypatch):
|
||||||
monkeypatch.setenv("COLUMNS", "80")
|
monkeypatch.setenv("COLUMNS", "80")
|
||||||
|
@ -1685,12 +1714,16 @@ class TestProgressWithTeardown:
|
||||||
testdir.makepyfile(
|
testdir.makepyfile(
|
||||||
"""
|
"""
|
||||||
def test_foo(fail_teardown):
|
def test_foo(fail_teardown):
|
||||||
assert False
|
assert 0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
output = testdir.runpytest()
|
output = testdir.runpytest("-rfE")
|
||||||
output.stdout.re_match_lines(
|
output.stdout.re_match_lines(
|
||||||
[r"test_teardown_with_test_also_failing.py FE\s+\[100%\]"]
|
[
|
||||||
|
r"test_teardown_with_test_also_failing.py FE\s+\[100%\]",
|
||||||
|
"FAILED test_teardown_with_test_also_failing.py::test_foo - assert 0",
|
||||||
|
"ERROR test_teardown_with_test_also_failing.py::test_foo - assert False",
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_teardown_many(self, testdir, many_files):
|
def test_teardown_many(self, testdir, many_files):
|
||||||
|
|
Loading…
Reference in New Issue