Files
clang-p2996/lldb/test/API/python_api/sbprogress/TestSBProgress.py
Jonas Devlieghere a1b14dbc47 [lldb] Remove progress report coalescing (#130329)
Remove support for coalescing progress reports in LLDB. This
functionality was motivated by Xcode, which wanted to listen for less
frequent, aggregated progress events at the cost of losing some detail.
See the original RFC [1] for more details. Since then, they've
reevaluated this trade-off and opted to listen for the regular, full
fidelity progress events and do any post processing on their end.

rdar://146425487
2025-03-08 09:10:46 -08:00

69 lines
2.9 KiB
Python

"""Test the SBProgress API."""
import lldb
from lldbsuite.test.lldbtest import *
class SBProgressTestCase(TestBase):
def test_with_external_bit_set(self):
"""Test SBProgress can handle null events."""
progress = lldb.SBProgress("Test SBProgress", "Test progress", 3, self.dbg)
listener = lldb.SBListener("Test listener")
broadcaster = self.dbg.GetBroadcaster()
broadcaster.AddListener(listener, lldb.eBroadcastBitExternalProgress)
event = lldb.SBEvent()
# Sample JSON we're expecting:
# { id = 2, title = "Test SBProgress", details = "Test progress", type = update, progress = 1 of 3}
# details remains the same as specified in the constructor of the progress
# until we update it in the increment function, so we check for the Null and empty string case
# that details hasn't changed, but progress x of 3 has.
progress.Increment(1, None)
self.assertTrue(listener.GetNextEvent(event))
stream = lldb.SBStream()
event.GetDescription(stream)
self.assertIn("Test progress", stream.GetData())
self.assertIn("1 of 3", stream.GetData())
progress.Increment(1, "")
self.assertTrue(listener.GetNextEvent(event))
event.GetDescription(stream)
self.assertIn("Test progress", stream.GetData())
self.assertIn("2 of 3", stream.GetData())
progress.Increment(1, "Step 3")
self.assertTrue(listener.GetNextEvent(event))
stream = lldb.SBStream()
event.GetDescription(stream)
self.assertIn("Step 3", stream.GetData())
def test_progress_finalize_non_deterministic_progress(self):
"""Test SBProgress finalize sends the progressEnd event"""
progress = lldb.SBProgress("Test SBProgress", "Test finalize", self.dbg)
listener = lldb.SBListener("Test listener")
broadcaster = self.dbg.GetBroadcaster()
broadcaster.AddListener(listener, lldb.eBroadcastBitExternalProgress)
event = lldb.SBEvent()
progress.Finalize()
self.assertTrue(listener.WaitForEvent(5, event))
stream = lldb.SBStream()
event.GetDescription(stream)
self.assertIn("type = end", stream.GetData())
def test_progress_finalize_deterministic_progress(self):
"""Test SBProgress finalize sends the progressEnd event"""
progress = lldb.SBProgress("Test SBProgress", "Test finalize", 13, self.dbg)
listener = lldb.SBListener("Test listener")
broadcaster = self.dbg.GetBroadcaster()
broadcaster.AddListener(listener, lldb.eBroadcastBitExternalProgress)
event = lldb.SBEvent()
progress.Finalize()
self.assertTrue(listener.WaitForEvent(5, event))
stream = lldb.SBStream()
event.GetDescription(stream)
# Note even for progresses with a total, the total isn't
# sent in the end message.
self.assertIn("type = end", stream.GetData())