brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 1f4afab Raw
59 lines · python
1import dap_server2from lldbsuite.test.decorators import *3from lldbsuite.test.lldbtest import *4from lldbsuite.test import lldbutil5import lldbdap_testcase6import re7 8 9class TestDAP_module_event(lldbdap_testcase.DAPTestCaseBase):10    @skipIfWindows11    def test_module_event(self):12        program = self.getBuildArtifact("a.out")13        self.build_and_launch(program)14 15        source = "main.cpp"16        breakpoint1_line = line_number(source, "// breakpoint 1")17        breakpoint2_line = line_number(source, "// breakpoint 2")18        breakpoint3_line = line_number(source, "// breakpoint 3")19 20        breakpoint_ids = self.set_source_breakpoints(21            source, [breakpoint1_line, breakpoint2_line, breakpoint3_line]22        )23        self.continue_to_breakpoints(breakpoint_ids)24 25        # We're now stopped at breakpoint 1 before the dlopen. Flush all the module events.26        event = self.dap_server.wait_for_event(["module"])27        while event is not None:28            event = self.dap_server.wait_for_event(["module"])29 30        # Continue to the second breakpoint, before the dlclose.31        self.continue_to_breakpoints(breakpoint_ids)32 33        # Make sure we got a module event for libother.34        event = self.dap_server.wait_for_event(["module"])35        self.assertIsNotNone(event, "didn't get a module event")36        module_name = event["body"]["module"]["name"]37        module_id = event["body"]["module"]["id"]38        self.assertEqual(event["body"]["reason"], "new")39        self.assertIn("libother", module_name)40 41        # Continue to the third breakpoint, after the dlclose.42        self.continue_to_breakpoints(breakpoint_ids)43 44        # Make sure we got a module event for libother.45        event = self.dap_server.wait_for_event(["module"])46        self.assertIsNotNone(event, "didn't get a module event")47        reason = event["body"]["reason"]48        self.assertEqual(reason, "removed")49        self.assertEqual(event["body"]["module"]["id"], module_id)50 51        # The removed module event should omit everything but the module id and name52        # as they are required fields.53        module_data = event["body"]["module"]54        required_keys = ["id", "name"]55        self.assertListEqual(list(module_data.keys()), required_keys)56        self.assertEqual(module_data["name"], "", "expects empty name.")57 58        self.continue_to_exit()59