(result: TestResult, test_func, runtests: RunTests)
| 107 | |
| 108 | |
| 109 | def regrtest_runner(result: TestResult, test_func, runtests: RunTests) -> None: |
| 110 | # Run test_func(), collect statistics, and detect reference and memory |
| 111 | # leaks. |
| 112 | if runtests.hunt_refleak: |
| 113 | from .refleak import runtest_refleak |
| 114 | refleak, test_result = runtest_refleak(result.test_name, test_func, |
| 115 | runtests.hunt_refleak, |
| 116 | runtests.quiet) |
| 117 | else: |
| 118 | test_result = test_func() |
| 119 | refleak = False |
| 120 | |
| 121 | if refleak: |
| 122 | result.state = State.REFLEAK |
| 123 | |
| 124 | stats: TestStats | None |
| 125 | |
| 126 | match test_result: |
| 127 | case TestStats(): |
| 128 | stats = test_result |
| 129 | case unittest.TestResult(): |
| 130 | stats = TestStats.from_unittest(test_result) |
| 131 | case None: |
| 132 | print_warning(f"{result.test_name} test runner returned None: {test_func}") |
| 133 | stats = None |
| 134 | case _: |
| 135 | # Don't import doctest at top level since only few tests return |
| 136 | # a doctest.TestResult instance. |
| 137 | import doctest |
| 138 | if isinstance(test_result, doctest.TestResults): |
| 139 | stats = TestStats.from_doctest(test_result) |
| 140 | else: |
| 141 | print_warning(f"Unknown test result type: {type(test_result)}") |
| 142 | stats = None |
| 143 | |
| 144 | result.stats = stats |
| 145 | |
| 146 | |
| 147 | # Storage of uncollectable GC objects (gc.garbage) |
no test coverage detected
searching dependent graphs…