""" Test lldb-dap output events """ from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * import json import os import time import re import lldbdap_testcase class TestDAP_progress(lldbdap_testcase.DAPTestCaseBase): def verify_progress_events( self, expected_title, expected_message=None, expected_message_regex=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_message_regex is not None: self.assertTrue(re.match(expected_message_regex, 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, stopOnEntry=True) 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_regex=r"Step [0-9]+", ) # 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, )