""" Test lldb data formatter callback-based matching. """ import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil class PythonSynthDataFormatterTestCase(TestBase): def setUp(self): # Call super's setUp(). TestBase.setUp(self) # Find the line number to break at. self.line = line_number('main.cpp', '// Set break point at this line.') def test_callback_matchers(self): """Test data formatter commands.""" self.build() _, process, thread, _ = lldbutil.run_to_line_breakpoint( self, lldb.SBFileSpec("main.cpp"), self.line) # Print derived without a formatter. self.expect("frame variable derived", substrs=['x = 2222', 'y = 3333']) # now set up a summary function that uses a python callback to match # classes that derive from `Base`. self.runCmd("command script import --allow-reload ./formatters_with_callback.py") # Now `derived` should use our callback summary + synthetic children. self.expect("frame variable derived", substrs=['hello from callback summary', 'synthetic_child = 9999']) # But not other classes. self.expect("frame variable base", matching=False, substrs=['hello from callback summary']) self.expect("frame variable base", substrs=['x = 1111']) self.expect("frame variable nd", matching=False, substrs=['hello from callback summary']) self.expect("frame variable nd", substrs=['z = 4444'])