| import dap_server | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test import lldbutil | |
| import lldbdap_testcase | |
| import re | |
| @skipIfTargetDoesNotSupportSharedLibraries() | |
| class TestDAP_module_event(lldbdap_testcase.DAPTestCaseBase): | |
| @skipIfWindows | |
| def test_module_event(self): | |
| program = self.getBuildArtifact("a.out") | |
| self.build_and_launch(program) | |
| source = "main.cpp" | |
| breakpoint1_line = line_number(source, "// breakpoint 1") | |
| breakpoint2_line = line_number(source, "// breakpoint 2") | |
| breakpoint3_line = line_number(source, "// breakpoint 3") | |
| breakpoint_ids = self.set_source_breakpoints( | |
| source, [breakpoint1_line, breakpoint2_line, breakpoint3_line] | |
| ) | |
| self.continue_to_breakpoints(breakpoint_ids) | |
| # We're now stopped at breakpoint 1 before the dlopen. Flush all the module events. | |
| self.dap_server.wait_for_module_events() | |
| # Continue to the second breakpoint, before the dlclose. | |
| self.continue_to_breakpoints(breakpoint_ids) | |
| # Make sure we got a module event for libother. | |
| event = self.dap_server.wait_for_event(["module"]) | |
| self.assertIsNotNone(event, "didn't get a module event") | |
| module_name = event["body"]["module"]["name"] | |
| module_id = event["body"]["module"]["id"] | |
| self.assertEqual(event["body"]["reason"], "new") | |
| self.assertIn("libother", module_name) | |
| # Continue to the third breakpoint, after the dlclose. | |
| self.continue_to_breakpoints(breakpoint_ids) | |
| # Make sure we got a module event for libother. | |
| event = self.dap_server.wait_for_event(["module"]) | |
| self.assertIsNotNone(event, "didn't get a module event") | |
| reason = event["body"]["reason"] | |
| self.assertEqual(reason, "removed") | |
| self.assertEqual(event["body"]["module"]["id"], module_id) | |
| # The removed module event should omit everything but the module id and name | |
| # as they are required fields. | |
| module_data = event["body"]["module"] | |
| required_keys = ["id", "name"] | |
| self.assertListEqual(list(module_data.keys()), required_keys) | |
| self.assertEqual(module_data["name"], "", "expects empty name.") | |
| self.continue_to_exit() |