brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · 1ed629a Raw
146 lines · python
1"""2Tests expression evaluation in context of an object.3"""4 5import lldb6import lldbsuite.test.lldbutil as lldbutil7from lldbsuite.test.lldbtest import *8 9 10class ContextObjectTestCase(TestBase):11    def test_context_object(self):12        """Tests expression evaluation in context of an object."""13        self.build()14 15        (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(16            self, "// Break here", self.main_source_spec17        )18        frame = thread.GetFrameAtIndex(0)19 20        #21        # Test C++ struct variable and reference-to-struct variable22        #23        for obj in "cpp_struct", "cpp_struct_ref":24            obj_val = frame.FindVariable(obj)25            self.assertTrue(obj_val.IsValid())26 27            # Test an empty expression evaluation28            value = obj_val.EvaluateExpression("")29            self.assertFalse(value.IsValid())30            self.assertFalse(value.GetError().Success())31 32            # Test retrieveing of a field (not a local with the same name)33            value = obj_val.EvaluateExpression("field")34            self.assertTrue(value.IsValid())35            self.assertSuccess(value.GetError())36            self.assertEqual(value.GetValueAsSigned(), 1111)37 38            # Test functions evaluation39            value = obj_val.EvaluateExpression("function()")40            self.assertTrue(value.IsValid())41            self.assertSuccess(value.GetError())42            self.assertEqual(value.GetValueAsSigned(), 2222)43 44            # Test that we retrieve the right global45            value = obj_val.EvaluateExpression("global.field")46            self.assertTrue(value.IsValid())47            self.assertSuccess(value.GetError())48            self.assertEqual(value.GetValueAsSigned(), 1111)49 50        #51        # Test C++ union variable52        #53 54        obj_val = frame.FindVariable("cpp_union")55        self.assertTrue(obj_val.IsValid())56 57        # Test retrieveing of a field58        value = obj_val.EvaluateExpression("field_int")59        self.assertTrue(value.IsValid())60        self.assertSuccess(value.GetError())61        self.assertEqual(value.GetValueAsSigned(), 5555)62 63        #64        # Test C++ scalar65        #66 67        obj_val = frame.FindVariable("cpp_scalar")68        self.assertTrue(obj_val.IsValid())69 70        # Test an expression evaluation71        value = obj_val.EvaluateExpression("1")72        self.assertTrue(value.IsValid())73        self.assertFalse(value.GetError().Success())74 75        #76        # Test C++ array77        #78 79        obj_val = frame.FindVariable("cpp_array")80        self.assertTrue(obj_val.IsValid())81 82        # Test an expression evaluation83        value = obj_val.EvaluateExpression("1")84        self.assertTrue(value.IsValid())85        self.assertFalse(value.GetError().Success())86 87        # Test retrieveing of an element's field88        value = obj_val.GetValueForExpressionPath("[7]").EvaluateExpression("field")89        self.assertTrue(value.IsValid())90        self.assertSuccess(value.GetError())91        self.assertEqual(value.GetValueAsSigned(), 1111)92 93        #94        # Test C++ pointer95        #96 97        obj_val = frame.FindVariable("cpp_pointer")98        self.assertTrue(obj_val.IsValid())99 100        # Test an expression evaluation101        value = obj_val.EvaluateExpression("1")102        self.assertTrue(value.IsValid())103        self.assertFalse(value.GetError().Success())104 105        # Test retrieveing of a dereferenced object's field106        value = obj_val.Dereference().EvaluateExpression("field")107        self.assertTrue(value.IsValid())108        self.assertSuccess(value.GetError())109        self.assertEqual(value.GetValueAsSigned(), 1111)110 111        #112        # Test C++ computation result113        #114 115        obj_val = frame.EvaluateExpression("cpp_namespace::GetCppStruct()")116        self.assertTrue(obj_val.IsValid())117 118        # Test an expression evaluation119        value = obj_val.EvaluateExpression("1")120        self.assertTrue(value.IsValid())121        self.assertFalse(value.GetError().Success())122 123        #124        # Test C++ computation result located in debuggee memory125        #126 127        obj_val = frame.EvaluateExpression("cpp_namespace::GetCppStructPtr()")128        self.assertTrue(obj_val.IsValid())129 130        # Test an expression evaluation131        value = obj_val.EvaluateExpression("1")132        self.assertTrue(value.IsValid())133        self.assertFalse(value.GetError().Success())134 135        # Test retrieveing of a dereferenced object's field136        value = obj_val.Dereference().EvaluateExpression("field")137        self.assertTrue(value.IsValid())138        self.assertSuccess(value.GetError())139        self.assertEqual(value.GetValueAsSigned(), 1111)140 141    def setUp(self):142        TestBase.setUp(self)143 144        self.main_source = "main.cpp"145        self.main_source_spec = lldb.SBFileSpec(self.main_source)146