John Harrison 13eca5248c
[lldb-dap] Re-land refactor of DebugCommunication. (#147787)
Originally commited in 362b9d78b4ee9107da2b5e90b3764b0f0fa610fe and then
reverted in cb63b75e32a415c9bfc298ed7fdcd67e8d9de54c.

This re-lands a subset of the changes to
dap_server.py/DebugCommunication and addresses the python3.10
compatibility issue.

This includes less type annotations since those were the reason for the
failures on that specific version of python.

I've done additional testing on python3.8, python3.10 and python3.13 to
further validate these changes.
2025-08-21 10:20:01 -07:00

87 lines
3.4 KiB
Python

"""
Test lldb-dap command hooks
"""
import lldbdap_testcase
from lldbsuite.test.decorators import *
class TestDAP_commands(lldbdap_testcase.DAPTestCaseBase):
def test_command_directive_quiet_on_success(self):
program = self.getBuildArtifact("a.out")
command_quiet = (
"settings set target.show-hex-variable-values-with-leading-zeroes false"
)
command_not_quiet = (
"settings set target.show-hex-variable-values-with-leading-zeroes true"
)
self.build_and_launch(
program,
initCommands=["?" + command_quiet, command_not_quiet],
terminateCommands=["?" + command_quiet, command_not_quiet],
stopCommands=["?" + command_quiet, command_not_quiet],
exitCommands=["?" + command_quiet, command_not_quiet],
)
full_output = self.collect_console(
timeout=1.0,
pattern=command_not_quiet,
)
self.assertNotIn(command_quiet, full_output)
self.assertIn(command_not_quiet, full_output)
def do_test_abort_on_error(
self,
use_init_commands=False,
use_launch_commands=False,
use_pre_run_commands=False,
use_post_run_commands=False,
):
program = self.getBuildArtifact("a.out")
command_quiet = (
"settings set target.show-hex-variable-values-with-leading-zeroes false"
)
command_abort_on_error = "settings set foo bar"
commands = ["?!" + command_quiet, "!" + command_abort_on_error]
self.build_and_launch(
program,
initCommands=commands if use_init_commands else None,
launchCommands=commands if use_launch_commands else None,
preRunCommands=commands if use_pre_run_commands else None,
postRunCommands=commands if use_post_run_commands else None,
expectFailure=True,
)
full_output = self.collect_console(
timeout=1.0,
pattern=command_abort_on_error,
)
self.assertNotIn(command_quiet, full_output)
self.assertIn(command_abort_on_error, full_output)
def test_command_directive_abort_on_error_init_commands(self):
self.do_test_abort_on_error(use_init_commands=True)
def test_command_directive_abort_on_error_launch_commands(self):
self.do_test_abort_on_error(use_launch_commands=True)
def test_command_directive_abort_on_error_pre_run_commands(self):
self.do_test_abort_on_error(use_pre_run_commands=True)
def test_command_directive_abort_on_error_post_run_commands(self):
self.do_test_abort_on_error(use_post_run_commands=True)
def test_command_directive_abort_on_error_attach_commands(self):
command_quiet = (
"settings set target.show-hex-variable-values-with-leading-zeroes false"
)
command_abort_on_error = "settings set foo bar"
program = self.build_and_create_debug_adapter_for_attach()
resp = self.attach(
program=program,
attachCommands=["?!" + command_quiet, "!" + command_abort_on_error],
expectFailure=True,
)
self.assertFalse(resp["success"], "expected 'attach' failure")
full_output = self.collect_console(pattern=command_abort_on_error)
self.assertNotIn(command_quiet, full_output)
self.assertIn(command_abort_on_error, full_output)