""" Test lldb-dap locations request """ import dap_server from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil import lldbdap_testcase import os class TestDAP_locations(lldbdap_testcase.DAPTestCaseBase): @skipIfWindows def test_locations(self): """ Tests the 'locations' request. """ program = self.getBuildArtifact("a.out") self.build_and_launch(program) source = "main.cpp" self.source_path = os.path.join(os.getcwd(), source) self.set_source_breakpoints( source, [line_number(source, "break here")], ) self.continue_to_next_stop() locals = {l["name"]: l for l in self.dap_server.get_local_variables()} # var1 has a declarationLocation but no valueLocation self.assertIn("declarationLocationReference", locals["var1"].keys()) self.assertNotIn("valueLocationReference", locals["var1"].keys()) loc_var1 = self.dap_server.request_locations( locals["var1"]["declarationLocationReference"] ) self.assertTrue(loc_var1["success"]) self.assertTrue(loc_var1["body"]["source"]["path"].endswith("main.cpp")) self.assertEqual(loc_var1["body"]["line"], 6) # func_ptr has both a declaration and a valueLocation self.assertIn("declarationLocationReference", locals["func_ptr"].keys()) self.assertIn("valueLocationReference", locals["func_ptr"].keys()) decl_loc_func_ptr = self.dap_server.request_locations( locals["func_ptr"]["declarationLocationReference"] ) self.assertTrue(decl_loc_func_ptr["success"]) self.assertTrue( decl_loc_func_ptr["body"]["source"]["path"].endswith("main.cpp") ) self.assertEqual(decl_loc_func_ptr["body"]["line"], 7) val_loc_func_ptr = self.dap_server.request_locations( locals["func_ptr"]["valueLocationReference"] ) self.assertTrue(val_loc_func_ptr["success"]) self.assertTrue(val_loc_func_ptr["body"]["source"]["path"].endswith("main.cpp")) self.assertEqual(val_loc_func_ptr["body"]["line"], 3) # func_ref has both a declaration and a valueLocation self.assertIn("declarationLocationReference", locals["func_ref"].keys()) self.assertIn("valueLocationReference", locals["func_ref"].keys()) decl_loc_func_ref = self.dap_server.request_locations( locals["func_ref"]["declarationLocationReference"] ) self.assertTrue(decl_loc_func_ref["success"]) self.assertTrue( decl_loc_func_ref["body"]["source"]["path"].endswith("main.cpp") ) self.assertEqual(decl_loc_func_ref["body"]["line"], 8) val_loc_func_ref = self.dap_server.request_locations( locals["func_ref"]["valueLocationReference"] ) self.assertTrue(val_loc_func_ref["success"]) self.assertTrue(val_loc_func_ref["body"]["source"]["path"].endswith("main.cpp")) self.assertEqual(val_loc_func_ref["body"]["line"], 3) # `evaluate` responses for function pointers also have locations associated eval_res = self.dap_server.request_evaluate("greet") self.assertTrue(eval_res["success"]) self.assertIn("valueLocationReference", eval_res["body"].keys())