xref: /llvm-project/lldb/test/API/python_api/sbvalue_persist/TestSBValuePersist.py (revision 80fcecb13c388ff087a27a4b0e7ca3dd8c98eaa4)
199451b44SJordan Rupprecht"""Test SBValue::Persist"""
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 SBValuePersistTestCase(TestBase):
1199451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
1299451b44SJordan Rupprecht
1399451b44SJordan Rupprecht    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24772")
1499451b44SJordan Rupprecht    def test(self):
1599451b44SJordan Rupprecht        """Test SBValue::Persist"""
1699451b44SJordan Rupprecht        self.build()
1799451b44SJordan Rupprecht        self.setTearDownCleanup()
1899451b44SJordan Rupprecht        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
1999451b44SJordan Rupprecht
2099451b44SJordan Rupprecht        lldbutil.run_break_set_by_source_regexp(self, "break here")
2199451b44SJordan Rupprecht
2299451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
2399451b44SJordan Rupprecht
2499451b44SJordan Rupprecht        # The stop reason of the thread should be breakpoint.
252238dcc3SJonas Devlieghere        self.expect(
262238dcc3SJonas Devlieghere            "thread list",
272238dcc3SJonas Devlieghere            STOPPED_DUE_TO_BREAKPOINT,
282238dcc3SJonas Devlieghere            substrs=["stopped", "stop reason = breakpoint"],
292238dcc3SJonas Devlieghere        )
3099451b44SJordan Rupprecht
3199451b44SJordan Rupprecht        # This is the function to remove the custom formats in order to have a
3299451b44SJordan Rupprecht        # clean slate for the next test case.
3399451b44SJordan Rupprecht        def cleanup():
342238dcc3SJonas Devlieghere            self.runCmd("type format clear", check=False)
352238dcc3SJonas Devlieghere            self.runCmd("type summary clear", check=False)
362238dcc3SJonas Devlieghere            self.runCmd("type filter clear", check=False)
372238dcc3SJonas Devlieghere            self.runCmd("type synthetic clear", check=False)
3899451b44SJordan Rupprecht
3999451b44SJordan Rupprecht        # Execute the cleanup function during test case tear down.
4099451b44SJordan Rupprecht        self.addTearDownHook(cleanup)
4199451b44SJordan Rupprecht
4299451b44SJordan Rupprecht        foo = self.frame().FindVariable("foo")
4399451b44SJordan Rupprecht        bar = self.frame().FindVariable("bar")
4499451b44SJordan Rupprecht        baz = self.frame().FindVariable("baz")
4599451b44SJordan Rupprecht
4699451b44SJordan Rupprecht        self.assertTrue(foo.IsValid(), "foo is not valid")
4799451b44SJordan Rupprecht        self.assertTrue(bar.IsValid(), "bar is not valid")
4899451b44SJordan Rupprecht        self.assertTrue(baz.IsValid(), "baz is not valid")
4999451b44SJordan Rupprecht
5099451b44SJordan Rupprecht        fooPersist = foo.Persist()
5199451b44SJordan Rupprecht        barPersist = bar.Persist()
5299451b44SJordan Rupprecht        bazPersist = baz.Persist()
5399451b44SJordan Rupprecht
5499451b44SJordan Rupprecht        self.assertTrue(fooPersist.IsValid(), "fooPersist is not valid")
5599451b44SJordan Rupprecht        self.assertTrue(barPersist.IsValid(), "barPersist is not valid")
5699451b44SJordan Rupprecht        self.assertTrue(bazPersist.IsValid(), "bazPersist is not valid")
5799451b44SJordan Rupprecht
582238dcc3SJonas Devlieghere        self.assertEqual(fooPersist.GetValueAsUnsigned(0), 10, "fooPersist != 10")
592238dcc3SJonas Devlieghere        self.assertEqual(barPersist.GetPointeeData().sint32[0], 4, "barPersist != 4")
60*80fcecb1SJonas Devlieghere        self.assertEqual(bazPersist.GetSummary(), '"85"', "bazPersist != 85")
6199451b44SJordan Rupprecht
6299451b44SJordan Rupprecht        self.runCmd("continue")
6399451b44SJordan Rupprecht
6499451b44SJordan Rupprecht        self.assertTrue(fooPersist.IsValid(), "fooPersist is not valid")
6599451b44SJordan Rupprecht        self.assertTrue(barPersist.IsValid(), "barPersist is not valid")
6699451b44SJordan Rupprecht        self.assertTrue(bazPersist.IsValid(), "bazPersist is not valid")
6799451b44SJordan Rupprecht
682238dcc3SJonas Devlieghere        self.assertEqual(fooPersist.GetValueAsUnsigned(0), 10, "fooPersist != 10")
692238dcc3SJonas Devlieghere        self.assertEqual(barPersist.GetPointeeData().sint32[0], 4, "barPersist != 4")
70*80fcecb1SJonas Devlieghere        self.assertEqual(bazPersist.GetSummary(), '"85"', "bazPersist != 85")
7199451b44SJordan Rupprecht
722238dcc3SJonas Devlieghere        self.expect("expr *(%s)" % (barPersist.GetName()), substrs=["= 4"])
73