| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| |
| class TestIvarInFrameworkBase(TestBase): |
| """ |
| Tests whether LLDB's data inspection commands can correctly retrieve |
| information about ivars from the Objective-C runtime. |
| In this test-case we have a base class type for which we don't have access |
| to the debug-info of the implementation (mimicking the scenario of subclassing |
| a type from a system framework). LLDB won't be able to see the backing ivar for |
| 'fooProp' from just debug-info, but it will fall back on the runtime to get the |
| necessary information. |
| """ |
| |
| def test_frame_var(self): |
| self.build() |
| lldbutil.run_to_source_breakpoint(self, "break here", lldb.SBFileSpec("main.m")) |
| self.expect("frame variable *bar", substrs=["_fooProp = 10", "_barProp = 15"]) |
| |
| def test_expr(self): |
| self.build() |
| lldbutil.run_to_source_breakpoint(self, "break here", lldb.SBFileSpec("main.m")) |
| self.expect_expr( |
| "*bar", |
| result_type="Bar", |
| result_children=[ |
| ValueCheck( |
| name="Foo", |
| children=[ |
| ValueCheck(name="NSObject"), |
| ValueCheck(name="_fooProp", value="10"), |
| ], |
| ), |
| ValueCheck(name="_barProp", value="15"), |
| ], |
| ) |