When testing my SBProgress DAP PR (#123826), I noticed Progress update messages aren't sent over DAP. This patch adds the lldb progress event's message to the body when sent over DAP. Before  Now  Tested with my [progress tester command](https://gist.github.com/Jlalond/48d85e75a91f7a137e3142e6a13d0947), testing 10 events 5 seconds apart 1-10
50 lines
1.8 KiB
Python
Executable File
50 lines
1.8 KiB
Python
Executable File
"""
|
|
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)
|