107 lines · python
1"""2Test lldb-dap source request3"""4 5 6import os7 8import lldbdap_testcase9from lldbsuite.test.decorators import *10from lldbsuite.test.lldbtest import *11 12 13class TestDAP_source(lldbdap_testcase.DAPTestCaseBase):14 @skipIfWindows15 def test_source(self):16 """17 Tests the 'source' packet.18 """19 program = self.getBuildArtifact("a.out")20 self.build_and_launch(program)21 source = self.getSourcePath("main.c")22 breakpoint_line = line_number(source, "breakpoint")23 24 lines = [breakpoint_line]25 breakpoint_ids = self.set_source_breakpoints(source, lines)26 self.assertEqual(27 len(breakpoint_ids), len(lines), "expect correct number of breakpoints"28 )29 30 self.continue_to_breakpoints(breakpoint_ids)31 32 response = self.dap_server.request_source(sourceReference=0)33 self.assertFalse(response["success"], "verify invalid sourceReference fails")34 35 (stackFrames, totalFrames) = self.get_stackFrames_and_totalFramesCount()36 frameCount = len(stackFrames)37 self.assertGreaterEqual(frameCount, 3, "verify we got up to main at least")38 self.assertEqual(39 totalFrames,40 frameCount,41 "verify total frames returns a speculative page size",42 )43 wantFrames = [44 {45 "name": "handler",46 "line": 8,47 "source": {48 "name": "main.c",49 "path": source,50 "containsSourceReference": False,51 },52 },53 {54 "name": "add",55 "source": {56 "name": "add",57 "path": program + "`add",58 "containsSourceReference": True,59 },60 },61 {62 "name": "main",63 "line": 12,64 "source": {65 "name": "main.c",66 "path": source,67 "containsSourceReference": False,68 },69 },70 ]71 for idx, want in enumerate(wantFrames):72 got = stackFrames[idx]73 name = self.get_dict_value(got, ["name"])74 self.assertEqual(name, want["name"])75 76 if "line" in want:77 line = self.get_dict_value(got, ["line"])78 self.assertEqual(line, want["line"])79 80 wantSource = want["source"]81 source_name = self.get_dict_value(got, ["source", "name"])82 self.assertEqual(source_name, wantSource["name"])83 84 source_path = self.get_dict_value(got, ["source", "path"])85 self.assertEqual(source_path, wantSource["path"])86 87 if wantSource["containsSourceReference"]:88 sourceReference = self.get_dict_value(89 got, ["source", "sourceReference"]90 )91 response = self.dap_server.request_source(92 sourceReference=sourceReference93 )94 self.assertTrue(response["success"])95 self.assertGreater(96 len(self.get_dict_value(response, ["body", "content"])),97 0,98 "verify content returned disassembly",99 )100 self.assertEqual(101 self.get_dict_value(response, ["body", "mimeType"]),102 "text/x-lldb.disassembly",103 "verify mime type returned",104 )105 else:106 self.assertNotIn("sourceReference", got["source"])107