30 lines · python
1"""2Test that the expression evaluator can access members of nested classes even if3the parents of the nested classes were imported from another compilation unit.4"""5import lldb6from lldbsuite.test.decorators import *7from lldbsuite.test.lldbtest import *8from lldbsuite.test import lldbutil9 10 11class TestNestedClassWithParentInAnotherCU(TestBase):12 def test_nested_class_with_parent_in_another_cu(self):13 self.main_source_file = lldb.SBFileSpec("main.cpp")14 self.build()15 (_, _, thread, _) = lldbutil.run_to_source_breakpoint(16 self, "// break here", self.main_source_file17 )18 frame = thread.GetSelectedFrame()19 # Parse the DIEs of the parent classes and the nested classes from20 # other.cpp's CU.21 warmup_result = frame.EvaluateExpression("b")22 self.assertTrue(warmup_result.IsValid())23 # Inspect fields of the nested classes. This will reuse the types that24 # were parsed during the evaluation above. By accessing a chain of25 # fields, we try to verify that all the DIEs, reused types and26 # declaration contexts were wired properly into lldb's parser's state.27 expr_result = frame.EvaluateExpression("a.y.oY_inner.oX_inner")28 self.assertTrue(expr_result.IsValid())29 self.assertEqual(expr_result.GetValue(), "42")30