19c5b9757SDave Lee"""
29c5b9757SDave LeeTest clang module build progress events.
39c5b9757SDave Lee"""
49c5b9757SDave Leeimport os
59c5b9757SDave Leeimport shutil
69c5b9757SDave Lee
79c5b9757SDave Leeimport lldb
89c5b9757SDave Leeimport lldbsuite.test.lldbutil as lldbutil
99c5b9757SDave Leefrom lldbsuite.test.decorators import *
109c5b9757SDave Leefrom lldbsuite.test.lldbtest import *
119c5b9757SDave Lee
129c5b9757SDave Lee
139c5b9757SDave Leeclass TestCase(TestBase):
149c5b9757SDave Lee    @skipUnlessDarwin
159c5b9757SDave Lee    def test_clang_module_build_progress_report(self):
169c5b9757SDave Lee        """Test receipt of progress events for clang module builds"""
179c5b9757SDave Lee        self.build()
189c5b9757SDave Lee
199c5b9757SDave Lee        # Ensure an empty module cache.
209c5b9757SDave Lee        mod_cache = self.getBuildArtifact("new-modules")
219c5b9757SDave Lee        if os.path.isdir(mod_cache):
229c5b9757SDave Lee            shutil.rmtree(mod_cache)
239c5b9757SDave Lee        self.runCmd(f"settings set symbols.clang-modules-cache-path '{mod_cache}'")
249c5b9757SDave Lee
259c5b9757SDave Lee        # TODO: The need for this seems like a bug.
269c5b9757SDave Lee        self.runCmd(
279c5b9757SDave Lee            f"settings set target.clang-module-search-paths '{self.getSourceDir()}'"
289c5b9757SDave Lee        )
299c5b9757SDave Lee
309c5b9757SDave Lee        lldbutil.run_to_name_breakpoint(self, "main")
319c5b9757SDave Lee
329c5b9757SDave Lee        # Just before triggering module builds, start listening for progress
339c5b9757SDave Lee        # events. Listening any earlier would result in a queue filled with
349c5b9757SDave Lee        # other unrelated progress events.
359c5b9757SDave Lee        broadcaster = self.dbg.GetBroadcaster()
369c5b9757SDave Lee        listener = lldbutil.start_listening_from(
37*a4c21d17SChelsea Cassanova            broadcaster, lldb.SBDebugger.eBroadcastBitProgress
389c5b9757SDave Lee        )
399c5b9757SDave Lee
409c5b9757SDave Lee        # Trigger module builds.
419c5b9757SDave Lee        self.expect("expression @import MyModule")
429c5b9757SDave Lee
439c5b9757SDave Lee        event = lldbutil.fetch_next_event(self, listener, broadcaster)
449c5b9757SDave Lee        payload = lldb.SBDebugger.GetProgressFromEvent(event)
459c5b9757SDave Lee        message = payload[0]
467edff3c1SDave Lee        self.assertEqual(message, "Building Clang modules")
47