Skip to content

Commit 66316f9

Browse files
committed
[lldb][lldb-dap] add new test for goto execute again.
1 parent da46027 commit 66316f9

File tree

2 files changed

+79
-25
lines changed

2 files changed

+79
-25
lines changed

lldb/test/API/tools/lldb-dap/gotoTarget/TestDAP_gotoTarget.py

Lines changed: 70 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,26 @@
22
Test lldb-dap gotoTarget request
33
"""
44

5+
from typing import Dict, Any
6+
from unittest import SkipTest
7+
58
from lldbsuite.test.lldbtest import line_number
69
import lldbdap_testcase
710
import os
811

912

1013
class TestDAP_gotoTarget(lldbdap_testcase.DAPTestCaseBase):
14+
def verify_variable(
15+
self, actual_dict: Dict[str, Any], expected_dict: Dict[str, Any]
16+
):
17+
for key, value in expected_dict.items():
18+
actual_value = actual_dict[key]
19+
self.assertEqual(
20+
actual_value,
21+
value,
22+
f"values does not match for key: `{key}` expected_value: `{value}`, actual_value: `{actual_value}`",
23+
)
24+
1125
def test_default(self):
1226
"""
1327
Tests the jump to cursor of a simple program. No arguments,
@@ -53,31 +67,62 @@ def test_default(self):
5367
self.dap_server.request_next(thread_id)
5468
self.continue_to_next_stop()
5569

56-
local_variables = self.dap_server.get_local_variables()
57-
verify_variables = {
58-
"var_1": {
59-
"name": "var_1",
60-
"type": "int",
61-
"value": "10",
62-
"variablesReference": 0,
63-
},
64-
"var_2": {
65-
"name": "var_2",
66-
"type": "int",
67-
"value": "40",
68-
"variablesReference": 0,
69-
},
70+
var1_variable = self.dap_server.get_local_variable("var_1")
71+
var_1_expected = {
72+
"name": "var_1",
73+
"type": "int",
74+
"value": "10",
75+
"variablesReference": 0,
7076
}
77+
self.verify_variable(var1_variable, var_1_expected)
78+
79+
var2_variable = self.dap_server.get_local_variable("var_2")
80+
var_2_expected = {
81+
"name": "var_2",
82+
"type": "int",
83+
"value": "40",
84+
"variablesReference": 0,
85+
}
86+
self.verify_variable(var2_variable, var_2_expected)
87+
88+
self.continue_to_exit()
7189

72-
for variable in local_variables:
73-
name = variable["name"]
74-
verify_variable = verify_variables[name]
75-
76-
for key, value in verify_variable.items():
77-
actual_value = variable[key]
78-
self.assertEqual(
79-
actual_value,
80-
value,
81-
f"values does not match for key: `{key}` expected_value: `{value}`, actual_value: `{actual_value}`",
82-
)
90+
def test_execute_again(self):
91+
program = self.getBuildArtifact("a.out")
92+
self.build_and_launch(program)
93+
94+
source_file = "main.c"
95+
self.source_path = os.path.join(os.getcwd(), source_file)
96+
self.set_source_breakpoints(
97+
source_file, [line_number(source_file, "// breakpoint 2")]
98+
)
99+
self.continue_to_next_stop()
100+
101+
end_var_3_value = self.dap_server.get_local_variable_value("var_3")
102+
self.assertEqual(end_var_3_value, "99")
103+
104+
goto_line = line_number(source_file, "// goto 2")
105+
goto_column = 1
106+
response = self.dap_server.request_gotoTargets(
107+
source_file, self.source_path, goto_line, goto_column
108+
)
109+
110+
target = response["body"]["targets"][0]
111+
self.assertGreaterEqual(
112+
target["id"], 0, "targetId should be greater than or equal to zero"
113+
)
114+
115+
target_id = target["id"]
116+
thread_id = self.dap_server.get_thread_id()
117+
self.assertIsNotNone(thread_id, "threadId should not be none")
118+
119+
response = self.dap_server.request_goto(thread_id, target_id)
120+
self.assertEqual(response["success"], True, "expects success to go to targetId")
121+
self.dap_server.request_next(thread_id)
122+
self.continue_to_next_stop()
123+
124+
goto_var_3_value = self.dap_server.get_local_variable_value("var_3")
125+
self.assertEqual(goto_var_3_value, "10")
126+
127+
self.continue_to_next_stop()
83128
self.continue_to_exit()

lldb/test/API/tools/lldb-dap/gotoTarget/main.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11

2+
int test_execute_again() {
3+
int var_3 = 10; // goto 2
4+
5+
var_3 = 99;
6+
7+
return var_3; // breakpoint 2
8+
}
9+
210
int main() {
311

412
int var_1 = 10;
@@ -7,5 +15,6 @@ int main() {
715

816
int var_2 = 40; // goto 1
917

18+
int result = test_execute_again();
1019
return 0;
1120
}

0 commit comments

Comments
 (0)