(self, writer_class, wait_for_port=True, wait_for_initialization=True, dap=False)
| 444 | |
| 445 | @contextmanager |
| 446 | def check_case(self, writer_class, wait_for_port=True, wait_for_initialization=True, dap=False): |
| 447 | try: |
| 448 | if callable(writer_class): |
| 449 | writer = writer_class() |
| 450 | else: |
| 451 | writer = writer_class |
| 452 | try: |
| 453 | writer.start() |
| 454 | if wait_for_port: |
| 455 | wait_for_condition(lambda: hasattr(writer, "port")) |
| 456 | self.writer = writer |
| 457 | |
| 458 | args = self.get_command_line() |
| 459 | |
| 460 | args = self.add_command_line_args(args, dap=dap) |
| 461 | |
| 462 | if SHOW_OTHER_DEBUG_INFO: |
| 463 | print("executing: %s" % (" ".join(args),)) |
| 464 | |
| 465 | with self.run_process(args, writer) as dct_with_stdout_stder: |
| 466 | try: |
| 467 | if not wait_for_initialization: |
| 468 | # The use-case for this is that the debugger can't even start-up in this |
| 469 | # scenario, as such, sleep a bit so that the output can be collected. |
| 470 | time.sleep(1) |
| 471 | elif wait_for_port: |
| 472 | wait_for_condition(lambda: writer.finished_initialization) |
| 473 | except TimeoutError: |
| 474 | sys.stderr.write("Timed out waiting for initialization\n") |
| 475 | sys.stderr.write( |
| 476 | "stdout:\n%s\n\nstderr:\n%s\n" |
| 477 | % ( |
| 478 | "".join(dct_with_stdout_stder["stdout"]), |
| 479 | "".join(dct_with_stdout_stder["stderr"]), |
| 480 | ) |
| 481 | ) |
| 482 | raise |
| 483 | finally: |
| 484 | writer.get_stdout = lambda: "".join(dct_with_stdout_stder["stdout"]) |
| 485 | writer.get_stderr = lambda: "".join(dct_with_stdout_stder["stderr"]) |
| 486 | |
| 487 | yield writer |
| 488 | finally: |
| 489 | writer.do_kill() |
| 490 | writer.log = [] |
| 491 | |
| 492 | stdout = dct_with_stdout_stder["stdout"] |
| 493 | stderr = dct_with_stdout_stder["stderr"] |
| 494 | writer.additional_output_checks("".join(stdout), "".join(stderr)) |
| 495 | except IgnoreFailureError: |
| 496 | sys.stderr.write("Test finished with ignored failure.\n") |
| 497 | return |
| 498 | |
| 499 | def create_process(self, args, writer): |
| 500 | env = writer.get_environ() if writer is not None else None |
no test coverage detected