79 lines · python
1"""2Tests expression evaluation in context of an objc class.3"""4 5import lldb6import lldbsuite.test.lldbutil as lldbutil7from lldbsuite.test.decorators import *8from lldbsuite.test.lldbtest import *9 10 11class ContextObjectObjcTestCase(TestBase):12 @add_test_categories(["objc"])13 def test_context_object_objc(self):14 """Tests expression evaluation in context of an objc class."""15 self.build()16 17 (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(18 self, "// Break here", self.main_source_spec19 )20 frame = thread.GetFrameAtIndex(0)21 22 #23 # Test objc class variable24 #25 26 obj_val = frame.FindVariable("objcClass")27 self.assertTrue(obj_val.IsValid())28 obj_val = obj_val.Dereference()29 self.assertTrue(obj_val.IsValid())30 31 # Test an empty expression evaluation32 value = obj_val.EvaluateExpression("")33 self.assertFalse(value.IsValid())34 self.assertFalse(value.GetError().Success())35 36 # Test retrieving of a field (not a local with the same name)37 value = obj_val.EvaluateExpression("field")38 self.assertTrue(value.IsValid())39 self.assertSuccess(value.GetError())40 self.assertEqual(value.GetValueAsSigned(), 1111)41 42 # Test if the self pointer is properly evaluated43 44 # Test retrieving of an objcClass's property through the self pointer45 value = obj_val.EvaluateExpression("self.property")46 self.assertTrue(value.IsValid())47 self.assertSuccess(value.GetError())48 self.assertEqual(value.GetValueAsSigned(), 2222)49 50 # Test objcClass's methods evaluation through the self pointer51 value = obj_val.EvaluateExpression("[self method]")52 self.assertTrue(value.IsValid())53 self.assertSuccess(value.GetError())54 self.assertEqual(value.GetValueAsSigned(), 3333)55 56 # Test if we can use a computation result reference object correctly57 58 obj_val = frame.EvaluateExpression("[ObjcClass createNew]")59 self.assertTrue(obj_val.IsValid())60 obj_val = obj_val.Dereference()61 self.assertTrue(obj_val.IsValid())62 63 # Test an expression evaluation on it64 value = obj_val.EvaluateExpression("1")65 self.assertTrue(value.IsValid())66 self.assertSuccess(value.GetError())67 68 # Test retrieving of a field on it69 value = obj_val.EvaluateExpression("field")70 self.assertTrue(value.IsValid())71 self.assertSuccess(value.GetError())72 self.assertEqual(value.GetValueAsSigned(), 1111)73 74 def setUp(self):75 TestBase.setUp(self)76 77 self.main_source = "main.m"78 self.main_source_spec = lldb.SBFileSpec(self.main_source)79