1*99451b44SJordan Rupprecht"""Test SBValue::GetValueDidChange""" 2*99451b44SJordan Rupprecht 3*99451b44SJordan Rupprecht 4*99451b44SJordan Rupprecht 5*99451b44SJordan Rupprechtimport lldb 6*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 7*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 8*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 9*99451b44SJordan Rupprecht 10*99451b44SJordan Rupprecht 11*99451b44SJordan Rupprechtclass ValueVarUpdateTestCase(TestBase): 12*99451b44SJordan Rupprecht 13*99451b44SJordan Rupprecht def test_with_process_launch_api(self): 14*99451b44SJordan Rupprecht """Test SBValue::GetValueDidChange""" 15*99451b44SJordan Rupprecht # Get the full path to our executable to be attached/debugged. 16*99451b44SJordan Rupprecht exe = self.getBuildArtifact(self.testMethodName) 17*99451b44SJordan Rupprecht d = {'EXE': exe} 18*99451b44SJordan Rupprecht self.build(dictionary=d) 19*99451b44SJordan Rupprecht self.setTearDownCleanup(dictionary=d) 20*99451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 21*99451b44SJordan Rupprecht 22*99451b44SJordan Rupprecht breakpoint = target.BreakpointCreateBySourceRegex( 23*99451b44SJordan Rupprecht "break here", lldb.SBFileSpec("main.c")) 24*99451b44SJordan Rupprecht 25*99451b44SJordan Rupprecht self.runCmd("run", RUN_SUCCEEDED) 26*99451b44SJordan Rupprecht 27*99451b44SJordan Rupprecht # The stop reason of the thread should be breakpoint. 28*99451b44SJordan Rupprecht self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 29*99451b44SJordan Rupprecht substrs=['stopped', 30*99451b44SJordan Rupprecht 'stop reason = breakpoint']) 31*99451b44SJordan Rupprecht 32*99451b44SJordan Rupprecht i = self.frame().FindVariable("i") 33*99451b44SJordan Rupprecht i_val = i.GetValueAsUnsigned(0) 34*99451b44SJordan Rupprecht c = self.frame().FindVariable("c") 35*99451b44SJordan Rupprecht 36*99451b44SJordan Rupprecht # Update any values from the SBValue objects so we can ask them if they 37*99451b44SJordan Rupprecht # changed after a continue 38*99451b44SJordan Rupprecht i.GetValueDidChange() 39*99451b44SJordan Rupprecht c.GetChildAtIndex(1).GetValueDidChange() 40*99451b44SJordan Rupprecht c.GetChildAtIndex(0).GetChildAtIndex(0).GetValueDidChange() 41*99451b44SJordan Rupprecht 42*99451b44SJordan Rupprecht if self.TraceOn(): 43*99451b44SJordan Rupprecht self.runCmd("frame variable") 44*99451b44SJordan Rupprecht 45*99451b44SJordan Rupprecht self.runCmd("continue") 46*99451b44SJordan Rupprecht 47*99451b44SJordan Rupprecht if self.TraceOn(): 48*99451b44SJordan Rupprecht self.runCmd("frame variable") 49*99451b44SJordan Rupprecht 50*99451b44SJordan Rupprecht self.assertTrue( 51*99451b44SJordan Rupprecht i_val != i.GetValueAsUnsigned(0), 52*99451b44SJordan Rupprecht "GetValue() is saying a lie") 53*99451b44SJordan Rupprecht self.assertTrue( 54*99451b44SJordan Rupprecht i.GetValueDidChange(), 55*99451b44SJordan Rupprecht "GetValueDidChange() is saying a lie") 56*99451b44SJordan Rupprecht 57*99451b44SJordan Rupprecht # Check complex type 58*99451b44SJordan Rupprecht self.assertTrue(c.GetChildAtIndex(0).GetChildAtIndex(0).GetValueDidChange( 59*99451b44SJordan Rupprecht ) and not c.GetChildAtIndex(1).GetValueDidChange(), "GetValueDidChange() is saying a lie") 60