brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · edf0af0 Raw
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