(result: TestResult, runtests: RunTests)
| 268 | |
| 269 | |
| 270 | def _runtest(result: TestResult, runtests: RunTests) -> None: |
| 271 | # Capture stdout and stderr, set faulthandler timeout, |
| 272 | # and create JUnit XML report. |
| 273 | verbose = runtests.verbose |
| 274 | output_on_failure = runtests.output_on_failure |
| 275 | timeout = runtests.timeout |
| 276 | |
| 277 | if timeout is not None and threading_helper.can_start_thread: |
| 278 | use_timeout = True |
| 279 | faulthandler.dump_traceback_later(timeout, exit=True) |
| 280 | else: |
| 281 | use_timeout = False |
| 282 | |
| 283 | try: |
| 284 | setup_tests(runtests) |
| 285 | |
| 286 | if output_on_failure or runtests.pgo: |
| 287 | support.verbose = True |
| 288 | |
| 289 | stream = io.StringIO() |
| 290 | orig_stdout = sys.stdout |
| 291 | orig_stderr = sys.stderr |
| 292 | print_warning = support.print_warning |
| 293 | orig_print_warnings_stderr = print_warning.orig_stderr |
| 294 | |
| 295 | output = None |
| 296 | try: |
| 297 | sys.stdout = stream |
| 298 | sys.stderr = stream |
| 299 | # print_warning() writes into the temporary stream to preserve |
| 300 | # messages order. If support.environment_altered becomes true, |
| 301 | # warnings will be written to sys.stderr below. |
| 302 | print_warning.orig_stderr = stream |
| 303 | |
| 304 | _runtest_env_changed_exc(result, runtests, display_failure=False) |
| 305 | # Ignore output if the test passed successfully |
| 306 | if result.state != State.PASSED: |
| 307 | output = stream.getvalue() |
| 308 | finally: |
| 309 | sys.stdout = orig_stdout |
| 310 | sys.stderr = orig_stderr |
| 311 | print_warning.orig_stderr = orig_print_warnings_stderr |
| 312 | |
| 313 | if output is not None: |
| 314 | sys.stderr.write(output) |
| 315 | sys.stderr.flush() |
| 316 | else: |
| 317 | # Tell tests to be moderately quiet |
| 318 | support.verbose = verbose |
| 319 | _runtest_env_changed_exc(result, runtests, |
| 320 | display_failure=not verbose) |
| 321 | |
| 322 | xml_list = support.junit_xml_list |
| 323 | if xml_list: |
| 324 | result.xml_data = xml_list |
| 325 | finally: |
| 326 | if use_timeout: |
| 327 | faulthandler.cancel_dump_traceback_later() |
no test coverage detected
searching dependent graphs…