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