| """ | |
| Test clang module build progress events. | |
| """ | |
| import os | |
| import shutil | |
| import lldb | |
| import lldbsuite.test.lldbutil as lldbutil | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| class TestCase(TestBase): | |
| @skipUnlessDarwin | |
| def test_clang_module_build_progress_report(self): | |
| """Test receipt of progress events for clang module builds""" | |
| self.build() | |
| # Ensure an empty module cache. | |
| mod_cache = self.getBuildArtifact("new-modules") | |
| if os.path.isdir(mod_cache): | |
| shutil.rmtree(mod_cache) | |
| self.runCmd(f"settings set symbols.clang-modules-cache-path '{mod_cache}'") | |
| # TODO: The need for this seems like a bug. | |
| self.runCmd( | |
| f"settings set target.clang-module-search-paths '{self.getSourceDir()}'" | |
| ) | |
| lldbutil.run_to_name_breakpoint(self, "main") | |
| # Just before triggering module builds, start listening for progress | |
| # events. Listening any earlier would result in a queue filled with | |
| # other unrelated progress events. | |
| broadcaster = self.dbg.GetBroadcaster() | |
| listener = lldbutil.start_listening_from( | |
| broadcaster, lldb.SBDebugger.eBroadcastBitProgress | |
| ) | |
| # Trigger module builds. | |
| self.expect("expression @import MyModule") | |
| event = lldbutil.fetch_next_event(self, listener, broadcaster) | |
| payload = lldb.SBDebugger.GetProgressFromEvent(event) | |
| message = payload[0] | |
| self.assertEqual(message, "Building Clang modules") |