|
12 | 12 | import unittest
|
13 | 13 | from test.libregrtest.cmdline import _parse_args
|
14 | 14 | from test.libregrtest.runtest import (
|
15 |
| - findtests, runtest, get_abs_module, |
16 |
| - STDTESTS, NOTTESTS, PASSED, FAILED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED, |
17 |
| - INTERRUPTED, CHILD_ERROR, TEST_DID_NOT_RUN, TIMEOUT, |
18 |
| - PROGRESS_MIN_TIME, format_test_result, is_failed) |
| 15 | + findtests, runtest, get_abs_module, is_failed, |
| 16 | + STDTESTS, NOTTESTS, PROGRESS_MIN_TIME, |
| 17 | + Passed, Failed, EnvChanged, Skipped, ResourceDenied, Interrupted, |
| 18 | + ChildError, DidNotRun) |
19 | 19 | from test.libregrtest.setup import setup_tests
|
20 | 20 | from test.libregrtest.pgo import setup_pgo_tests
|
21 | 21 | from test.libregrtest.utils import removepy, count, format_duration, printlist
|
@@ -99,34 +99,32 @@ def get_executed(self):
|
99 | 99 | | set(self.run_no_tests))
|
100 | 100 |
|
101 | 101 | def accumulate_result(self, result, rerun=False):
|
102 |
| - test_name = result.test_name |
103 |
| - ok = result.result |
| 102 | + test_name = result.name |
104 | 103 |
|
105 |
| - if ok not in (CHILD_ERROR, INTERRUPTED) and not rerun: |
106 |
| - self.test_times.append((result.test_time, test_name)) |
| 104 | + if not isinstance(result, (ChildError, Interrupted)) and not rerun: |
| 105 | + self.test_times.append((result.duration_sec, test_name)) |
107 | 106 |
|
108 |
| - if ok == PASSED: |
| 107 | + if isinstance(result, Passed): |
109 | 108 | self.good.append(test_name)
|
110 |
| - elif ok in (FAILED, CHILD_ERROR): |
111 |
| - if not rerun: |
112 |
| - self.bad.append(test_name) |
113 |
| - elif ok == ENV_CHANGED: |
114 |
| - self.environment_changed.append(test_name) |
115 |
| - elif ok == SKIPPED: |
116 |
| - self.skipped.append(test_name) |
117 |
| - elif ok == RESOURCE_DENIED: |
| 109 | + elif isinstance(result, ResourceDenied): |
118 | 110 | self.skipped.append(test_name)
|
119 | 111 | self.resource_denieds.append(test_name)
|
120 |
| - elif ok == TEST_DID_NOT_RUN: |
| 112 | + elif isinstance(result, Skipped): |
| 113 | + self.skipped.append(test_name) |
| 114 | + elif isinstance(result, EnvChanged): |
| 115 | + self.environment_changed.append(test_name) |
| 116 | + elif isinstance(result, Failed): |
| 117 | + if not rerun: |
| 118 | + self.bad.append(test_name) |
| 119 | + self.rerun.append(result) |
| 120 | + elif isinstance(result, DidNotRun): |
121 | 121 | self.run_no_tests.append(test_name)
|
122 |
| - elif ok == INTERRUPTED: |
| 122 | + elif isinstance(result, Interrupted): |
123 | 123 | self.interrupted = True
|
124 |
| - elif ok == TIMEOUT: |
125 |
| - self.bad.append(test_name) |
126 | 124 | else:
|
127 |
| - raise ValueError("invalid test result: %r" % ok) |
| 125 | + raise ValueError("invalid test result: %r" % result) |
128 | 126 |
|
129 |
| - if rerun and ok not in {FAILED, CHILD_ERROR, INTERRUPTED}: |
| 127 | + if rerun and not isinstance(result, (Failed, Interrupted)): |
130 | 128 | self.bad.remove(test_name)
|
131 | 129 |
|
132 | 130 | xml_data = result.xml_data
|
@@ -311,15 +309,31 @@ def rerun_failed_tests(self):
|
311 | 309 |
|
312 | 310 | self.log()
|
313 | 311 | self.log("Re-running failed tests in verbose mode")
|
314 |
| - self.rerun = self.bad[:] |
315 |
| - for test_name in self.rerun: |
316 |
| - self.log(f"Re-running {test_name} in verbose mode") |
| 312 | + rerun_list = self.rerun[:] |
| 313 | + self.rerun = [] |
| 314 | + for result in rerun_list: |
| 315 | + test_name = result.name |
| 316 | + errors = result.errors or [] |
| 317 | + failures = result.failures or [] |
| 318 | + error_names = [test_full_name.split(" ")[0] for (test_full_name, *_) in errors] |
| 319 | + failure_names = [test_full_name.split(" ")[0] for (test_full_name, *_) in failures] |
317 | 320 | self.ns.verbose = True
|
| 321 | + orig_match_tests = self.ns.match_tests |
| 322 | + if errors or failures: |
| 323 | + if self.ns.match_tests is None: |
| 324 | + self.ns.match_tests = [] |
| 325 | + self.ns.match_tests.extend(error_names) |
| 326 | + self.ns.match_tests.extend(failure_names) |
| 327 | + matching = "matching: " + ", ".join(self.ns.match_tests) |
| 328 | + self.log(f"Re-running {test_name} in verbose mode ({matching})") |
| 329 | + else: |
| 330 | + self.log(f"Re-running {test_name} in verbose mode") |
318 | 331 | result = runtest(self.ns, test_name)
|
| 332 | + self.ns.match_tests = orig_match_tests |
319 | 333 |
|
320 | 334 | self.accumulate_result(result, rerun=True)
|
321 | 335 |
|
322 |
| - if result.result == INTERRUPTED: |
| 336 | + if isinstance(result, Interrupted): |
323 | 337 | break
|
324 | 338 |
|
325 | 339 | if self.bad:
|
@@ -380,7 +394,7 @@ def display_result(self):
|
380 | 394 | if self.rerun:
|
381 | 395 | print()
|
382 | 396 | print("%s:" % count(len(self.rerun), "re-run test"))
|
383 |
| - printlist(self.rerun) |
| 397 | + printlist(r.name for r in self.rerun) |
384 | 398 |
|
385 | 399 | if self.run_no_tests:
|
386 | 400 | print()
|
@@ -420,14 +434,14 @@ def run_tests_sequential(self):
|
420 | 434 | result = runtest(self.ns, test_name)
|
421 | 435 | self.accumulate_result(result)
|
422 | 436 |
|
423 |
| - if result.result == INTERRUPTED: |
| 437 | + if isinstance(result, Interrupted): |
424 | 438 | break
|
425 | 439 |
|
426 |
| - previous_test = format_test_result(result) |
| 440 | + previous_test = str(result) |
427 | 441 | test_time = time.monotonic() - start_time
|
428 | 442 | if test_time >= PROGRESS_MIN_TIME:
|
429 | 443 | previous_test = "%s in %s" % (previous_test, format_duration(test_time))
|
430 |
| - elif result.result == PASSED: |
| 444 | + elif isinstance(result, Passed): |
431 | 445 | # be quiet: say nothing if the test passed shortly
|
432 | 446 | previous_test = None
|
433 | 447 |
|
|
0 commit comments