@@ -39,18 +39,21 @@ def test_duplicate_start_addresses(self):
3939 {"dataId" : response_x ["body" ]["dataId" ], "accessType" : "write" },
4040 ]
4141 set_response = self .dap_server .request_setDataBreakpoint (dataBreakpoints )
42- self .assertEqual (
43- set_response ["body" ]["breakpoints" ],
44- [{"verified" : False }, {"verified" : True }, {"verified" : True }],
45- )
42+ breakpoints = set_response ["body" ]["breakpoints" ]
43+ self .assertEqual (len (breakpoints ), 3 )
44+ self .assertFalse (breakpoints [0 ]["verified" ])
45+ self .assertTrue (breakpoints [1 ]["verified" ])
46+ self .assertTrue (breakpoints [2 ]["verified" ])
4647
47- self .continue_to_next_stop ()
48+ self .dap_server .request_continue ()
49+ self .verify_breakpoint_hit ([breakpoints [2 ]["id" ]])
4850 x_val = self .dap_server .get_local_variable_value ("x" )
4951 i_val = self .dap_server .get_local_variable_value ("i" )
5052 self .assertEqual (x_val , "2" )
5153 self .assertEqual (i_val , "1" )
5254
53- self .continue_to_next_stop ()
55+ self .dap_server .request_continue ()
56+ self .verify_breakpoint_hit ([breakpoints [1 ]["id" ]])
5457 arr_2 = self .dap_server .get_local_variable_child ("arr" , "[2]" )
5558 i_val = self .dap_server .get_local_variable_value ("i" )
5659 self .assertEqual (arr_2 ["value" ], "42" )
@@ -79,18 +82,20 @@ def test_expression(self):
7982 {"dataId" : response_arr_2 ["body" ]["dataId" ], "accessType" : "write" },
8083 ]
8184 set_response = self .dap_server .request_setDataBreakpoint (dataBreakpoints )
82- self . assertEqual (
83- set_response [ "body" ][ " breakpoints" ],
84- [{ "verified" : True }, { "verified" : True }],
85- )
85+ breakpoints = set_response [ "body" ][ "breakpoints" ]
86+ self . assertEqual ( len ( breakpoints ), 2 )
87+ self . assertTrue ( breakpoints [ 0 ][ "verified" ])
88+ self . assertTrue ( breakpoints [ 1 ][ "verified" ] )
8689
87- self .continue_to_next_stop ()
90+ self .dap_server .request_continue ()
91+ self .verify_breakpoint_hit ([breakpoints [0 ]["id" ]])
8892 x_val = self .dap_server .get_local_variable_value ("x" )
8993 i_val = self .dap_server .get_local_variable_value ("i" )
9094 self .assertEqual (x_val , "2" )
9195 self .assertEqual (i_val , "1" )
9296
93- self .continue_to_next_stop ()
97+ self .dap_server .request_continue ()
98+ self .verify_breakpoint_hit ([breakpoints [1 ]["id" ]])
9499 arr_2 = self .dap_server .get_local_variable_child ("arr" , "[2]" )
95100 i_val = self .dap_server .get_local_variable_value ("i" )
96101 self .assertEqual (arr_2 ["value" ], "42" )
@@ -123,18 +128,20 @@ def test_functionality(self):
123128 {"dataId" : response_arr_2 ["body" ]["dataId" ], "accessType" : "write" },
124129 ]
125130 set_response = self .dap_server .request_setDataBreakpoint (dataBreakpoints )
126- self . assertEqual (
127- set_response [ "body" ][ " breakpoints" ],
128- [{ "verified" : True }, { "verified" : True }],
129- )
131+ breakpoints = set_response [ "body" ][ "breakpoints" ]
132+ self . assertEqual ( len ( breakpoints ), 2 )
133+ self . assertTrue ( breakpoints [ 0 ][ "verified" ])
134+ self . assertTrue ( breakpoints [ 1 ][ "verified" ] )
130135
131- self .continue_to_next_stop ()
136+ self .dap_server .request_continue ()
137+ self .verify_breakpoint_hit ([breakpoints [0 ]["id" ]])
132138 x_val = self .dap_server .get_local_variable_value ("x" )
133139 i_val = self .dap_server .get_local_variable_value ("i" )
134140 self .assertEqual (x_val , "2" )
135141 self .assertEqual (i_val , "1" )
136142
137- self .continue_to_next_stop ()
143+ self .dap_server .request_continue ()
144+ self .verify_breakpoint_hit ([breakpoints [1 ]["id" ]])
138145 arr_2 = self .dap_server .get_local_variable_child ("arr" , "[2]" )
139146 i_val = self .dap_server .get_local_variable_value ("i" )
140147 self .assertEqual (arr_2 ["value" ], "42" )
@@ -153,8 +160,11 @@ def test_functionality(self):
153160 }
154161 ]
155162 set_response = self .dap_server .request_setDataBreakpoint (dataBreakpoints )
156- self .assertEqual (set_response ["body" ]["breakpoints" ], [{"verified" : True }])
157- self .continue_to_next_stop ()
163+ breakpoints = set_response ["body" ]["breakpoints" ]
164+ self .assertEqual (len (breakpoints ), 1 )
165+ self .assertTrue (breakpoints [0 ]["verified" ])
166+ self .dap_server .request_continue ()
167+ self .verify_breakpoint_hit ([breakpoints [0 ]["id" ]])
158168 x_val = self .dap_server .get_local_variable_value ("x" )
159169 self .assertEqual (x_val , "3" )
160170
@@ -167,7 +177,64 @@ def test_functionality(self):
167177 }
168178 ]
169179 set_response = self .dap_server .request_setDataBreakpoint (dataBreakpoints )
170- self .assertEqual (set_response ["body" ]["breakpoints" ], [{"verified" : True }])
171- self .continue_to_next_stop ()
180+ breakpoints = set_response ["body" ]["breakpoints" ]
181+ self .assertEqual (len (breakpoints ), 1 )
182+ self .assertTrue (breakpoints [0 ]["verified" ])
183+ self .dap_server .request_continue ()
184+ self .verify_breakpoint_hit ([breakpoints [0 ]["id" ]])
172185 x_val = self .dap_server .get_local_variable_value ("x" )
173186 self .assertEqual (x_val , "10" )
187+
188+ @skipIfWindows
189+ def test_bytes (self ):
190+ """Tests setting data breakpoints on memory range."""
191+ program = self .getBuildArtifact ("a.out" )
192+ self .build_and_launch (program )
193+ source = "main.cpp"
194+ first_loop_break_line = line_number (source , "// first loop breakpoint" )
195+ self .set_source_breakpoints (source , [first_loop_break_line ])
196+ self .continue_to_next_stop ()
197+ # Test write watchpoints on x, arr[2]
198+ x = self .dap_server .get_local_variable ("x" )
199+ response_x = self .dap_server .request_dataBreakpointInfo (
200+ 0 , x ["memoryReference" ], 4
201+ )
202+ arr_2 = self .dap_server .get_local_variable_child ("arr" , "[2]" )
203+ response_arr_2 = self .dap_server .request_dataBreakpointInfo (
204+ 0 , arr_2 ["memoryReference" ], 4
205+ )
206+
207+ # Test response from dataBreakpointInfo request.
208+ self .assertEqual (
209+ response_x ["body" ]["dataId" ].split ("/" ), [x ["memoryReference" ][2 :], "4" ]
210+ )
211+ self .assertEqual (response_x ["body" ]["accessTypes" ], self .accessTypes )
212+ self .assertEqual (
213+ response_arr_2 ["body" ]["dataId" ].split ("/" ),
214+ [arr_2 ["memoryReference" ][2 :], "4" ],
215+ )
216+ self .assertEqual (response_arr_2 ["body" ]["accessTypes" ], self .accessTypes )
217+ dataBreakpoints = [
218+ {"dataId" : response_x ["body" ]["dataId" ], "accessType" : "write" },
219+ {"dataId" : response_arr_2 ["body" ]["dataId" ], "accessType" : "write" },
220+ ]
221+ set_response = self .dap_server .request_setDataBreakpoint (dataBreakpoints )
222+ breakpoints = set_response ["body" ]["breakpoints" ]
223+ self .assertEqual (len (breakpoints ), 2 )
224+ self .assertTrue (breakpoints [0 ]["verified" ])
225+ self .assertTrue (breakpoints [1 ]["verified" ])
226+
227+ self .dap_server .request_continue ()
228+ self .verify_breakpoint_hit ([breakpoints [0 ]["id" ]])
229+ x_val = self .dap_server .get_local_variable_value ("x" )
230+ i_val = self .dap_server .get_local_variable_value ("i" )
231+ self .assertEqual (x_val , "2" )
232+ self .assertEqual (i_val , "1" )
233+
234+ self .dap_server .request_continue ()
235+ self .verify_breakpoint_hit ([breakpoints [1 ]["id" ]])
236+ arr_2 = self .dap_server .get_local_variable_child ("arr" , "[2]" )
237+ i_val = self .dap_server .get_local_variable_value ("i" )
238+ self .assertEqual (arr_2 ["value" ], "42" )
239+ self .assertEqual (i_val , "2" )
240+ self .dap_server .request_setDataBreakpoint ([])
0 commit comments