Skip to content

Commit 54d123f

Browse files
committed
Reformat failures to be failure first, easier visibility. Simplify formatting code some
1 parent e6e09bd commit 54d123f

1 file changed

Lines changed: 23 additions & 12 deletions

File tree

‎Lib/test/libregrtest/main.py‎

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import contextlib
2-
import io
31
import os
42
import random
53
import re
@@ -491,18 +489,31 @@ def write_github_summary(self) -> None:
491489
self.fail_rerun)
492490
if not filename or not exitcode:
493491
return
494-
with contextlib.redirect_stdout(io.StringIO()) as summary:
495-
self.display_summary()
496-
lines = ["## Test results",
497-
f"```\n{decolor(summary.getvalue()).strip()}\n```"]
498492
# Tests which failed in the last run (the re-run, if any)
499-
for result in self.results.rerun_results:
500-
lines.append(f"### {decolor(str(result))}")
501-
for name, traceback in (result.errors or []) + (result.failures or []):
502-
lines.append(f"<details><summary>{name}</summary>\n\n"
503-
f"```pytb\n{decolor(traceback)}\n```\n</details>")
493+
failed = self.results.rerun_results
494+
cases = [(result.errors or []) + (result.failures or [])
495+
for result in failed]
496+
ncase = sum(map(len, cases))
504497
with open(filename, "a", encoding="utf-8") as fp:
505-
fp.write("\n\n".join(lines) + "\n")
498+
def write(text: str) -> None:
499+
# Separate Markdown blocks with an empty line
500+
print(text, end="\n\n", file=fp)
501+
502+
write(f"## {decolor(self.get_state())}: "
503+
f"{count(len(failed), 'test file')} and "
504+
f"{count(ncase, 'test case')} failed")
505+
for result, result_cases in zip(failed, cases):
506+
write(f"### {decolor(str(result))}")
507+
if result.env_changed_reasons:
508+
write("\n".join(f"- {reason}"
509+
for reason in result.env_changed_reasons))
510+
for name, traceback in result_cases:
511+
# Expand short tracebacks when there are only a few
512+
is_open = ncase <= 5 and traceback.count("\n") < 30
513+
write(f"<details{' open' if is_open else ''}>"
514+
f"<summary>{name}</summary>")
515+
write(f"```pytb\n{decolor(traceback).rstrip()}\n```")
516+
write("</details>")
506517

507518
def display_summary(self) -> None:
508519
if self.first_runtests is None:

0 commit comments

Comments
 (0)