Custom DAP events can be detected using https://code.visualstudio.com/api/references/vscode-api#debug.onDidReceiveDebugSessionCustomEvent. This API allows an lldb python script to send events to the DAP client to allow extensions to handle these custom events.
68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
"""
|
|
Test lldb-dap send-event integration.
|
|
"""
|
|
|
|
import json
|
|
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
import lldbdap_testcase
|
|
|
|
|
|
class TestDAP_sendEvent(lldbdap_testcase.DAPTestCaseBase):
|
|
def test_send_event(self):
|
|
"""
|
|
Test sending a custom event.
|
|
"""
|
|
program = self.getBuildArtifact("a.out")
|
|
source = "main.c"
|
|
custom_event_body = {
|
|
"key": 321,
|
|
"arr": [True],
|
|
}
|
|
self.build_and_launch(
|
|
program,
|
|
stopCommands=[
|
|
"lldb-dap send-event my-custom-event-no-body",
|
|
"lldb-dap send-event my-custom-event '{}'".format(
|
|
json.dumps(custom_event_body)
|
|
),
|
|
],
|
|
)
|
|
|
|
breakpoint_line = line_number(source, "// breakpoint")
|
|
|
|
self.set_source_breakpoints(source, [breakpoint_line])
|
|
self.continue_to_next_stop()
|
|
|
|
custom_event = self.dap_server.wait_for_event(
|
|
filter=["my-custom-event-no-body"]
|
|
)
|
|
self.assertEquals(custom_event["event"], "my-custom-event-no-body")
|
|
self.assertIsNone(custom_event.get("body", None))
|
|
|
|
custom_event = self.dap_server.wait_for_event(filter=["my-custom-event"])
|
|
self.assertEquals(custom_event["event"], "my-custom-event")
|
|
self.assertEquals(custom_event["body"], custom_event_body)
|
|
|
|
def test_send_internal_event(self):
|
|
"""
|
|
Test sending an internal event produces an error.
|
|
"""
|
|
program = self.getBuildArtifact("a.out")
|
|
source = "main.c"
|
|
self.build_and_launch(program)
|
|
|
|
breakpoint_line = line_number(source, "// breakpoint")
|
|
|
|
self.set_source_breakpoints(source, [breakpoint_line])
|
|
self.continue_to_next_stop()
|
|
|
|
resp = self.dap_server.request_evaluate(
|
|
"`lldb-dap send-event stopped", context="repl"
|
|
)
|
|
self.assertRegex(
|
|
resp["body"]["result"],
|
|
r"Invalid use of lldb-dap send-event, event \"stopped\" should be handled by lldb-dap internally.",
|
|
)
|