| 269 | print(f"{yellow}Test suite interrupted by signal SIGINT.{reset}") |
| 270 | |
| 271 | def display_summary(self, first_runtests: RunTests, filtered: bool) -> None: |
| 272 | # Total tests |
| 273 | ansi = get_colors() |
| 274 | red, reset, yellow = ansi.RED, ansi.RESET, ansi.YELLOW |
| 275 | |
| 276 | stats = self.stats |
| 277 | text = f'run={stats.tests_run:,}' |
| 278 | if filtered: |
| 279 | text = f"{text} (filtered)" |
| 280 | report = [text] |
| 281 | if stats.failures: |
| 282 | report.append(f'{red}failures={stats.failures:,}{reset}') |
| 283 | if stats.skipped: |
| 284 | report.append(f'{yellow}skipped={stats.skipped:,}{reset}') |
| 285 | print(f"Total tests: {' '.join(report)}") |
| 286 | |
| 287 | # Total test files |
| 288 | all_tests = [self.good, self.bad, self.rerun, |
| 289 | self.skipped, |
| 290 | self.env_changed, self.run_no_tests] |
| 291 | run = sum(map(len, all_tests)) |
| 292 | text = f'run={run}' |
| 293 | if not first_runtests.forever: |
| 294 | ntest = len(first_runtests.tests) |
| 295 | text = f"{text}/{ntest}" |
| 296 | if filtered: |
| 297 | text = f"{text} (filtered)" |
| 298 | report = [text] |
| 299 | for name, tests, color in ( |
| 300 | ('failed', self.bad, red), |
| 301 | ('env_changed', self.env_changed, yellow), |
| 302 | ('skipped', self.skipped, yellow), |
| 303 | ('resource_denied', self.resource_denied, yellow), |
| 304 | ('rerun', self.rerun, yellow), |
| 305 | ('run_no_tests', self.run_no_tests, yellow), |
| 306 | ): |
| 307 | if tests: |
| 308 | report.append(f'{color}{name}={len(tests)}{reset}') |
| 309 | print(f"Total test files: {' '.join(report)}") |