1"""Test SBValue::Persist""" 2 3 4import lldb 5from lldbsuite.test.decorators import * 6from lldbsuite.test.lldbtest import * 7from lldbsuite.test import lldbutil 8 9 10class SBValuePersistTestCase(TestBase): 11 NO_DEBUG_INFO_TESTCASE = True 12 13 @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24772") 14 def test(self): 15 """Test SBValue::Persist""" 16 self.build() 17 self.setTearDownCleanup() 18 self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) 19 20 lldbutil.run_break_set_by_source_regexp(self, "break here") 21 22 self.runCmd("run", RUN_SUCCEEDED) 23 24 # The stop reason of the thread should be breakpoint. 25 self.expect( 26 "thread list", 27 STOPPED_DUE_TO_BREAKPOINT, 28 substrs=["stopped", "stop reason = breakpoint"], 29 ) 30 31 # This is the function to remove the custom formats in order to have a 32 # clean slate for the next test case. 33 def cleanup(): 34 self.runCmd("type format clear", check=False) 35 self.runCmd("type summary clear", check=False) 36 self.runCmd("type filter clear", check=False) 37 self.runCmd("type synthetic clear", check=False) 38 39 # Execute the cleanup function during test case tear down. 40 self.addTearDownHook(cleanup) 41 42 foo = self.frame().FindVariable("foo") 43 bar = self.frame().FindVariable("bar") 44 baz = self.frame().FindVariable("baz") 45 46 self.assertTrue(foo.IsValid(), "foo is not valid") 47 self.assertTrue(bar.IsValid(), "bar is not valid") 48 self.assertTrue(baz.IsValid(), "baz is not valid") 49 50 fooPersist = foo.Persist() 51 barPersist = bar.Persist() 52 bazPersist = baz.Persist() 53 54 self.assertTrue(fooPersist.IsValid(), "fooPersist is not valid") 55 self.assertTrue(barPersist.IsValid(), "barPersist is not valid") 56 self.assertTrue(bazPersist.IsValid(), "bazPersist is not valid") 57 58 self.assertEqual(fooPersist.GetValueAsUnsigned(0), 10, "fooPersist != 10") 59 self.assertEqual(barPersist.GetPointeeData().sint32[0], 4, "barPersist != 4") 60 self.assertEqual(bazPersist.GetSummary(), '"85"', "bazPersist != 85") 61 62 self.runCmd("continue") 63 64 self.assertTrue(fooPersist.IsValid(), "fooPersist is not valid") 65 self.assertTrue(barPersist.IsValid(), "barPersist is not valid") 66 self.assertTrue(bazPersist.IsValid(), "bazPersist is not valid") 67 68 self.assertEqual(fooPersist.GetValueAsUnsigned(0), 10, "fooPersist != 10") 69 self.assertEqual(barPersist.GetPointeeData().sint32[0], 4, "barPersist != 4") 70 self.assertEqual(bazPersist.GetSummary(), '"85"', "bazPersist != 85") 71 72 self.expect("expr *(%s)" % (barPersist.GetName()), substrs=["= 4"]) 73