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 10class ContextObjectObjcTestCase(TestBase): 11 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(self, '// Break here', self.main_source_spec) 18 frame = thread.GetFrameAtIndex(0) 19 20 # 21 # Test objc class variable 22 # 23 24 obj_val = frame.FindVariable("objcClass") 25 self.assertTrue(obj_val.IsValid()) 26 obj_val = obj_val.Dereference() 27 self.assertTrue(obj_val.IsValid()) 28 29 # Test an empty expression evaluation 30 value = obj_val.EvaluateExpression("") 31 self.assertFalse(value.IsValid()) 32 self.assertFalse(value.GetError().Success()) 33 34 # Test retrieving of a field (not a local with the same name) 35 value = obj_val.EvaluateExpression("field") 36 self.assertTrue(value.IsValid()) 37 self.assertSuccess(value.GetError()) 38 self.assertEqual(value.GetValueAsSigned(), 1111) 39 40 # Test if the self pointer is properly evaluated 41 42 # Test retrieving of an objcClass's property through the self pointer 43 value = obj_val.EvaluateExpression("self.property") 44 self.assertTrue(value.IsValid()) 45 self.assertSuccess(value.GetError()) 46 self.assertEqual(value.GetValueAsSigned(), 2222) 47 48 # Test objcClass's methods evaluation through the self pointer 49 value = obj_val.EvaluateExpression("[self method]") 50 self.assertTrue(value.IsValid()) 51 self.assertSuccess(value.GetError()) 52 self.assertEqual(value.GetValueAsSigned(), 3333) 53 54 # Test if we can use a computation result reference object correctly 55 56 obj_val = frame.EvaluateExpression("[ObjcClass createNew]") 57 self.assertTrue(obj_val.IsValid()) 58 obj_val = obj_val.Dereference() 59 self.assertTrue(obj_val.IsValid()) 60 61 # Test an expression evaluation on it 62 value = obj_val.EvaluateExpression("1") 63 self.assertTrue(value.IsValid()) 64 self.assertSuccess(value.GetError()) 65 66 # Test retrieving of a field on it 67 value = obj_val.EvaluateExpression("field") 68 self.assertTrue(value.IsValid()) 69 self.assertSuccess(value.GetError()) 70 self.assertEqual(value.GetValueAsSigned(), 1111) 71 72 def setUp(self): 73 TestBase.setUp(self) 74 75 self.main_source = "main.m" 76 self.main_source_spec = lldb.SBFileSpec(self.main_source) 77