199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTests expression evaluation in context of an objc class. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprechtimport lldb 699451b44SJordan Rupprechtimport lldbsuite.test.lldbutil as lldbutil 799451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 899451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 999451b44SJordan Rupprecht 1099451b44SJordan Rupprecht 11*2238dcc3SJonas Devlieghereclass ContextObjectObjcTestCase(TestBase): 12a852cf66SMichał Górny @add_test_categories(["objc"]) 1399451b44SJordan Rupprecht def test_context_object_objc(self): 1499451b44SJordan Rupprecht """Tests expression evaluation in context of an objc class.""" 1599451b44SJordan Rupprecht self.build() 1699451b44SJordan Rupprecht 17*2238dcc3SJonas Devlieghere (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( 18*2238dcc3SJonas Devlieghere self, "// Break here", self.main_source_spec 19*2238dcc3SJonas Devlieghere ) 2099451b44SJordan Rupprecht frame = thread.GetFrameAtIndex(0) 2199451b44SJordan Rupprecht 2299451b44SJordan Rupprecht # 2399451b44SJordan Rupprecht # Test objc class variable 2499451b44SJordan Rupprecht # 2599451b44SJordan Rupprecht 2699451b44SJordan Rupprecht obj_val = frame.FindVariable("objcClass") 2799451b44SJordan Rupprecht self.assertTrue(obj_val.IsValid()) 2899451b44SJordan Rupprecht obj_val = obj_val.Dereference() 2999451b44SJordan Rupprecht self.assertTrue(obj_val.IsValid()) 3099451b44SJordan Rupprecht 3199451b44SJordan Rupprecht # Test an empty expression evaluation 3299451b44SJordan Rupprecht value = obj_val.EvaluateExpression("") 3399451b44SJordan Rupprecht self.assertFalse(value.IsValid()) 3499451b44SJordan Rupprecht self.assertFalse(value.GetError().Success()) 3599451b44SJordan Rupprecht 3699451b44SJordan Rupprecht # Test retrieving of a field (not a local with the same name) 3799451b44SJordan Rupprecht value = obj_val.EvaluateExpression("field") 3899451b44SJordan Rupprecht self.assertTrue(value.IsValid()) 39779bbbf2SDave Lee self.assertSuccess(value.GetError()) 4099451b44SJordan Rupprecht self.assertEqual(value.GetValueAsSigned(), 1111) 4199451b44SJordan Rupprecht 4299451b44SJordan Rupprecht # Test if the self pointer is properly evaluated 4399451b44SJordan Rupprecht 4499451b44SJordan Rupprecht # Test retrieving of an objcClass's property through the self pointer 4599451b44SJordan Rupprecht value = obj_val.EvaluateExpression("self.property") 4699451b44SJordan Rupprecht self.assertTrue(value.IsValid()) 4735674976SPavel Labath self.assertSuccess(value.GetError()) 4899451b44SJordan Rupprecht self.assertEqual(value.GetValueAsSigned(), 2222) 4999451b44SJordan Rupprecht 5099451b44SJordan Rupprecht # Test objcClass's methods evaluation through the self pointer 5199451b44SJordan Rupprecht value = obj_val.EvaluateExpression("[self method]") 5299451b44SJordan Rupprecht self.assertTrue(value.IsValid()) 5335674976SPavel Labath self.assertSuccess(value.GetError()) 5499451b44SJordan Rupprecht self.assertEqual(value.GetValueAsSigned(), 3333) 5599451b44SJordan Rupprecht 5699451b44SJordan Rupprecht # Test if we can use a computation result reference object correctly 5799451b44SJordan Rupprecht 5899451b44SJordan Rupprecht obj_val = frame.EvaluateExpression("[ObjcClass createNew]") 5999451b44SJordan Rupprecht self.assertTrue(obj_val.IsValid()) 6099451b44SJordan Rupprecht obj_val = obj_val.Dereference() 6199451b44SJordan Rupprecht self.assertTrue(obj_val.IsValid()) 6299451b44SJordan Rupprecht 6399451b44SJordan Rupprecht # Test an expression evaluation on it 6499451b44SJordan Rupprecht value = obj_val.EvaluateExpression("1") 6599451b44SJordan Rupprecht self.assertTrue(value.IsValid()) 6635674976SPavel Labath self.assertSuccess(value.GetError()) 6799451b44SJordan Rupprecht 6899451b44SJordan Rupprecht # Test retrieving of a field on it 6999451b44SJordan Rupprecht value = obj_val.EvaluateExpression("field") 7099451b44SJordan Rupprecht self.assertTrue(value.IsValid()) 7135674976SPavel Labath self.assertSuccess(value.GetError()) 7299451b44SJordan Rupprecht self.assertEqual(value.GetValueAsSigned(), 1111) 7399451b44SJordan Rupprecht 7499451b44SJordan Rupprecht def setUp(self): 7599451b44SJordan Rupprecht TestBase.setUp(self) 7699451b44SJordan Rupprecht 7799451b44SJordan Rupprecht self.main_source = "main.m" 7899451b44SJordan Rupprecht self.main_source_spec = lldb.SBFileSpec(self.main_source) 79