1""" 2Tests expression evaluation in context of an objc class. 3""" 4 5import lldb 6import lldbsuite.test.lldbutil as lldbutil 7from 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_spec 19 ) 20 frame = thread.GetFrameAtIndex(0) 21 22 # 23 # Test objc class variable 24 # 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 evaluation 32 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 evaluated 43 44 # Test retrieving of an objcClass's property through the self pointer 45 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 pointer 51 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 correctly 57 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 it 64 value = obj_val.EvaluateExpression("1") 65 self.assertTrue(value.IsValid()) 66 self.assertSuccess(value.GetError()) 67 68 # Test retrieving of a field on it 69 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