| """ |
| 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.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") |