199451b44SJordan Rupprecht"""Test SBValue::GetValueDidChange""" 299451b44SJordan Rupprecht 399451b44SJordan Rupprecht 499451b44SJordan Rupprechtimport lldb 599451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 699451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 799451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 899451b44SJordan Rupprecht 999451b44SJordan Rupprecht 1099451b44SJordan Rupprechtclass ValueVarUpdateTestCase(TestBase): 1199451b44SJordan Rupprecht def test_with_process_launch_api(self): 1299451b44SJordan Rupprecht """Test SBValue::GetValueDidChange""" 1399451b44SJordan Rupprecht # Get the full path to our executable to be attached/debugged. 1499451b44SJordan Rupprecht exe = self.getBuildArtifact(self.testMethodName) 15*2238dcc3SJonas Devlieghere d = {"EXE": exe} 1699451b44SJordan Rupprecht self.build(dictionary=d) 1799451b44SJordan Rupprecht self.setTearDownCleanup(dictionary=d) 1899451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 1999451b44SJordan Rupprecht 2099451b44SJordan Rupprecht breakpoint = target.BreakpointCreateBySourceRegex( 21*2238dcc3SJonas Devlieghere "break here", lldb.SBFileSpec("main.c") 22*2238dcc3SJonas Devlieghere ) 2399451b44SJordan Rupprecht 2499451b44SJordan Rupprecht self.runCmd("run", RUN_SUCCEEDED) 2599451b44SJordan Rupprecht 2699451b44SJordan Rupprecht # The stop reason of the thread should be breakpoint. 27*2238dcc3SJonas Devlieghere self.expect( 28*2238dcc3SJonas Devlieghere "thread list", 29*2238dcc3SJonas Devlieghere STOPPED_DUE_TO_BREAKPOINT, 30*2238dcc3SJonas Devlieghere substrs=["stopped", "stop reason = breakpoint"], 31*2238dcc3SJonas Devlieghere ) 3299451b44SJordan Rupprecht 3399451b44SJordan Rupprecht i = self.frame().FindVariable("i") 3499451b44SJordan Rupprecht i_val = i.GetValueAsUnsigned(0) 3599451b44SJordan Rupprecht c = self.frame().FindVariable("c") 3699451b44SJordan Rupprecht 3799451b44SJordan Rupprecht # Update any values from the SBValue objects so we can ask them if they 3899451b44SJordan Rupprecht # changed after a continue 3999451b44SJordan Rupprecht i.GetValueDidChange() 4099451b44SJordan Rupprecht c.GetChildAtIndex(1).GetValueDidChange() 4199451b44SJordan Rupprecht c.GetChildAtIndex(0).GetChildAtIndex(0).GetValueDidChange() 4299451b44SJordan Rupprecht 4399451b44SJordan Rupprecht if self.TraceOn(): 4499451b44SJordan Rupprecht self.runCmd("frame variable") 4599451b44SJordan Rupprecht 4699451b44SJordan Rupprecht self.runCmd("continue") 4799451b44SJordan Rupprecht 4899451b44SJordan Rupprecht if self.TraceOn(): 4999451b44SJordan Rupprecht self.runCmd("frame variable") 5099451b44SJordan Rupprecht 511fb5c7a2SDave Lee self.assertNotEqual( 52*2238dcc3SJonas Devlieghere i_val, i.GetValueAsUnsigned(0), "GetValue() is saying a lie" 53*2238dcc3SJonas Devlieghere ) 54*2238dcc3SJonas Devlieghere self.assertTrue(i.GetValueDidChange(), "GetValueDidChange() is saying a lie") 5599451b44SJordan Rupprecht 5699451b44SJordan Rupprecht # Check complex type 57*2238dcc3SJonas Devlieghere self.assertTrue( 58*2238dcc3SJonas Devlieghere c.GetChildAtIndex(0).GetChildAtIndex(0).GetValueDidChange() 59*2238dcc3SJonas Devlieghere and not c.GetChildAtIndex(1).GetValueDidChange(), 60*2238dcc3SJonas Devlieghere "GetValueDidChange() is saying a lie", 61*2238dcc3SJonas Devlieghere ) 62