Files
clang-p2996/lldb/test/API/tools/lldb-dap/commands/TestDAP_commands.py
Walter Erquinigo aa207674f9 [lldb-dap] Implement command directives (#74808)
This adds support for optionally prefixing any command with `?` and/or
`!`.
- `?` prevents the output of a commands to be printed to the console
unless it fails.
- `!` aborts the dap if the command fails.

They come in handy when programmatically running commands on behalf of
the user without wanting them to know unless they fail, or when a
critical setup is required as part of launchCommands and it's better to
abort on failures than to silently skip.
2023-12-14 15:04:35 -05:00

81 lines
3.2 KiB
Python

import os
import dap_server
import lldbdap_testcase
from lldbsuite.test import lldbtest, lldbutil
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(duration=1.0)
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(duration=1.0)
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):
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"
self.build_and_create_debug_adaptor()
self.attach(
program,
attachCommands=["?!" + command_quiet, "!" + command_abort_on_error],
expectFailure=True,
)
full_output = self.collect_console(duration=1.0)
self.assertNotIn(command_quiet, full_output)
self.assertIn(command_abort_on_error, full_output)