Files
clang-p2996/lldb/test/API/tools/lldb-dap/stepInTargets/TestDAP_stepInTargets.py
Kendal Harland 2ea4a03c0f Fix test assertions in TestDAP_stepInTargets.py (#96687)
The strings this test is using seem to consistently fail to match
against the expected values when built & run targeting Windows amd64.
This PR updates them to the expected values.

To fix the test and avoid over-specifying for a specific platform, use
`assertIn(<target-substring>,...)` to see if we've got the correct
target label instead of comparing the demangler output for an exact
string match.

---------

Co-authored-by: kendal <kendal@thebrowser.company>
2024-07-16 12:59:08 +02:00

81 lines
3.2 KiB
Python

"""
Test lldb-dap stepInTargets request
"""
import dap_server
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
import lldbdap_testcase
from lldbsuite.test import lldbutil
class TestDAP_stepInTargets(lldbdap_testcase.DAPTestCaseBase):
@expectedFailureAll(oslist=["windows"])
@skipIf(archs=no_match(["x86_64"]))
# InstructionControlFlowKind for ARM is not supported yet.
# On Windows, lldb-dap seems to ignore targetId when stepping into functions.
# For more context, see https://github.com/llvm/llvm-project/issues/98509.
def test_basic(self):
"""
Tests the basic stepping in targets with directly calls.
"""
program = self.getBuildArtifact("a.out")
self.build_and_launch(program)
source = "main.cpp"
breakpoint_line = line_number(source, "// set breakpoint here")
lines = [breakpoint_line]
# Set breakpoint in the thread function so we can step the threads
breakpoint_ids = self.set_source_breakpoints(source, lines)
self.assertEqual(
len(breakpoint_ids), len(lines), "expect correct number of breakpoints"
)
self.continue_to_breakpoints(breakpoint_ids)
threads = self.dap_server.get_threads()
self.assertEqual(len(threads), 1, "expect one thread")
tid = threads[0]["id"]
leaf_frame = self.dap_server.get_stackFrame()
self.assertIsNotNone(leaf_frame, "expect a leaf frame")
# Request all step in targets list and verify the response.
step_in_targets_response = self.dap_server.request_stepInTargets(
leaf_frame["id"]
)
self.assertEqual(step_in_targets_response["success"], True, "expect success")
self.assertIn(
"body", step_in_targets_response, "expect body field in response body"
)
self.assertIn(
"targets",
step_in_targets_response["body"],
"expect targets field in response body",
)
step_in_targets = step_in_targets_response["body"]["targets"]
self.assertEqual(len(step_in_targets), 3, "expect 3 step in targets")
# Verify the target names are correct.
# The order of funcA and funcB may change depending on the compiler ABI.
funcA_target = None
funcB_target = None
for target in step_in_targets[0:2]:
if "funcB" in target["label"]:
funcB_target = target
elif "funcA" in target["label"]:
funcA_target = target
else:
self.fail(f"Unexpected step in target: {target}")
self.assertIsNotNone(funcA_target, "expect funcA")
self.assertIsNotNone(funcB_target, "expect funcB")
self.assertIn("foo", step_in_targets[2]["label"], "expect foo")
# Choose to step into second target and verify that we are in the second target,
# be it funcA or funcB.
self.stepIn(threadId=tid, targetId=step_in_targets[1]["id"], waitForStop=True)
leaf_frame = self.dap_server.get_stackFrame()
self.assertIsNotNone(leaf_frame, "expect a leaf frame")
self.assertEqual(step_in_targets[1]["label"], leaf_frame["name"])