""" Test lldb-dap breakpointLocations request """ import dap_server import shutil from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil import lldbdap_testcase import os class TestDAP_breakpointLocations(lldbdap_testcase.DAPTestCaseBase): def setUp(self): lldbdap_testcase.DAPTestCaseBase.setUp(self) self.main_basename = "main-copy.cpp" self.main_path = os.path.realpath(self.getBuildArtifact(self.main_basename)) @skipIfWindows def test_column_breakpoints(self): """Test retrieving the available breakpoint locations.""" program = self.getBuildArtifact("a.out") self.build_and_launch(program, stopOnEntry=True) loop_line = line_number(self.main_path, "// break loop") self.dap_server.request_continue() # Ask for the breakpoint locations based only on the line number response = self.dap_server.request_breakpointLocations( self.main_path, loop_line ) self.assertTrue(response["success"]) self.assertEqual( response["body"]["breakpoints"], [ {"line": loop_line, "column": 9}, {"line": loop_line, "column": 13}, {"line": loop_line, "column": 20}, {"line": loop_line, "column": 23}, {"line": loop_line, "column": 25}, {"line": loop_line, "column": 34}, {"line": loop_line, "column": 37}, {"line": loop_line, "column": 39}, {"line": loop_line, "column": 51}, ], ) # Ask for the breakpoint locations for a column range response = self.dap_server.request_breakpointLocations( self.main_path, loop_line, column=24, end_column=46, ) self.assertTrue(response["success"]) self.assertEqual( response["body"]["breakpoints"], [ {"line": loop_line, "column": 25}, {"line": loop_line, "column": 34}, {"line": loop_line, "column": 37}, {"line": loop_line, "column": 39}, ], ) # Ask for the breakpoint locations for a range of line numbers response = self.dap_server.request_breakpointLocations( self.main_path, line=loop_line, end_line=loop_line + 2, column=39, ) self.maxDiff = None self.assertTrue(response["success"]) # On some systems, there is an additional breakpoint available # at line 41, column 3, i.e. at the end of the loop. To make this # test more portable, only check that all expected breakpoints are # presented, but also accept additional breakpoints. expected_breakpoints = [ {"column": 39, "line": 40}, {"column": 51, "line": 40}, {"column": 3, "line": 42}, {"column": 18, "line": 42}, ] for bp in expected_breakpoints: self.assertIn(bp, response["body"]["breakpoints"])