aboutsummaryrefslogtreecommitdiff
path: root/lldb/packages/Python/lldbsuite/test
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
-rw-r--r--lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py4
-rw-r--r--lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py20
2 files changed, 22 insertions, 2 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py
index 51debcf..9fe8ca2 100644
--- a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py
+++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py
@@ -215,6 +215,7 @@ class DebugCommunication(object):
self.terminated: bool = False
self.events: List[Event] = []
self.progress_events: List[Event] = []
+ self.invalidated_event: Optional[Event] = None
self.reverse_requests: List[Request] = []
self.module_events: List[Dict] = []
self.sequence: int = 1
@@ -440,6 +441,8 @@ class DebugCommunication(object):
elif event == "capabilities" and body:
# Update the capabilities with new ones from the event.
self.capabilities.update(body["capabilities"])
+ elif event == "invalidated":
+ self.invalidated_event = packet
def _handle_reverse_request(self, request: Request) -> None:
if request in self.reverse_requests:
@@ -1014,6 +1017,7 @@ class DebugCommunication(object):
"supportsVariableType": True,
"supportsStartDebuggingRequest": True,
"supportsProgressReporting": True,
+ "supportsInvalidatedEvent": True,
"$__lldb_sourceInitFile": sourceInitFile,
},
}
diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py
index fffd4c2..a0a009a 100644
--- a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py
+++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py
@@ -241,6 +241,13 @@ class DAPTestCaseBase(TestBase):
f"Command '{flavor}' - '{cmd}' not found in output: {output}",
)
+ def verify_invalidated_event(self, expected_areas):
+ event = self.dap_server.invalidated_event
+ self.dap_server.invalidated_event = None
+ self.assertIsNotNone(event)
+ areas = event["body"].get("areas", [])
+ self.assertEqual(set(expected_areas), set(areas))
+
def get_dict_value(self, d: dict, key_path: list[str]) -> Any:
"""Verify each key in the key_path array is in contained in each
dictionary within "d". Assert if any key isn't in the
@@ -352,13 +359,20 @@ class DAPTestCaseBase(TestBase):
else:
return int(value)
+ def set_variable(self, varRef, name, value, id=None):
+ """Set a variable."""
+ response = self.dap_server.request_setVariable(varRef, name, str(value), id=id)
+ if response["success"]:
+ self.verify_invalidated_event(["variables"])
+ return response
+
def set_local(self, name, value, id=None):
"""Set a top level local variable only."""
- return self.dap_server.request_setVariable(1, name, str(value), id=id)
+ return self.set_variable(1, name, str(value), id=id)
def set_global(self, name, value, id=None):
"""Set a top level global variable only."""
- return self.dap_server.request_setVariable(2, name, str(value), id=id)
+ return self.set_variable(2, name, str(value), id=id)
def stepIn(
self,
@@ -577,4 +591,6 @@ class DAPTestCaseBase(TestBase):
response = self.dap_server.request_writeMemory(
memoryReference, encodedData, offset=offset, allowPartial=allowPartial
)
+ if response["success"]:
+ self.verify_invalidated_event(["all"])
return response