""" Test lldb-dap output events """ from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * import os import time import lldbdap_testcase class TestDAP_progress(lldbdap_testcase.DAPTestCaseBase): @skipIfWindows def test_output(self): program = self.getBuildArtifact("a.out") self.build_and_launch(program) progress_emitter = os.path.join(os.getcwd(), "Progress_emitter.py") print(f"Progress emitter path: {progress_emitter}") source = "main.cpp" # Set breakpoint in the thread function so we can step the threads breakpoint_ids = self.set_source_breakpoints( source, [line_number(source, "// break here")] ) self.continue_to_breakpoints(breakpoint_ids) self.dap_server.request_evaluate( f"`command script import {progress_emitter}", context="repl" ) self.dap_server.request_evaluate( "`test-progress --total 3 --seconds 1", context="repl" ) self.dap_server.wait_for_event("progressEnd", 15) # Expect at least a start, an update, and end event # However because the underlying Progress instance is an RAII object and we can't guaruntee # it's deterministic destruction in the python API, we verify just start and update # otherwise this test could be flakey. self.assertTrue(len(self.dap_server.progress_events) > 0) start_found = False update_found = False for event in self.dap_server.progress_events: event_type = event["event"] if "progressStart" in event_type: start_found = True if "progressUpdate" in event_type: update_found = True self.assertTrue(start_found) self.assertTrue(update_found)