Files
clang-p2996/lldb/test/API/tools/lldb-dap/progress/TestDAP_Progress.py
Jonas Devlieghere 3f7ca88267 [lldb-dap] Add progress events to the packet list (#134157)
Before #134048, TestDAP_Progress relied on wait_for_event to block until
the progressEnd came in. However, progress events were not added to the
packet list, so this call would always time out. This PR makes it so
that packets are added to the packet list, and you can block on them.
2025-04-02 15:33:07 -07:00

98 lines
3.2 KiB
Python
Executable File

"""
Test lldb-dap output events
"""
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
import json
import os
import time
import lldbdap_testcase
class TestDAP_progress(lldbdap_testcase.DAPTestCaseBase):
def verify_progress_events(
self,
expected_title,
expected_message=None,
expected_not_in_message=None,
only_verify_first_update=False,
):
self.dap_server.wait_for_event("progressEnd")
self.assertTrue(len(self.dap_server.progress_events) > 0)
start_found = False
update_found = False
end_found = False
for event in self.dap_server.progress_events:
event_type = event["event"]
if "progressStart" in event_type:
title = event["body"]["title"]
self.assertIn(expected_title, title)
start_found = True
if "progressUpdate" in event_type:
message = event["body"]["message"]
if only_verify_first_update and update_found:
continue
if expected_message is not None:
self.assertIn(expected_message, message)
if expected_not_in_message is not None:
self.assertNotIn(expected_not_in_message, message)
update_found = True
if "progressEnd" in event_type:
end_found = True
self.assertTrue(start_found)
self.assertTrue(update_found)
self.assertTrue(end_found)
self.dap_server.progress_events.clear()
@skipIfWindows
def test(self):
program = self.getBuildArtifact("a.out")
self.build_and_launch(program)
progress_emitter = os.path.join(os.getcwd(), "Progress_emitter.py")
self.dap_server.request_evaluate(
f"`command script import {progress_emitter}", context="repl"
)
# Test details.
self.dap_server.request_evaluate(
"`test-progress --total 3 --seconds 1", context="repl"
)
self.verify_progress_events(
expected_title="Progress tester",
expected_not_in_message="Progress tester",
)
# Test no details.
self.dap_server.request_evaluate(
"`test-progress --total 3 --seconds 1 --no-details", context="repl"
)
self.verify_progress_events(
expected_title="Progress tester",
expected_message="Initial Detail",
)
# Test details indeterminate.
self.dap_server.request_evaluate("`test-progress --seconds 1", context="repl")
self.verify_progress_events(
expected_title="Progress tester: Initial Indeterminate Detail",
expected_message="Step 1",
only_verify_first_update=True,
)
# Test no details indeterminate.
self.dap_server.request_evaluate(
"`test-progress --seconds 1 --no-details", context="repl"
)
self.verify_progress_events(
expected_title="Progress tester: Initial Indeterminate Detail",
expected_message="Initial Indeterminate Detail",
only_verify_first_update=True,
)