199451b44SJordan Rupprecht"""Test SBValue::Persist"""
299451b44SJordan Rupprecht
399451b44SJordan Rupprecht
499451b44SJordan Rupprecht
599451b44SJordan Rupprechtimport lldb
699451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
799451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
899451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
999451b44SJordan Rupprecht
1099451b44SJordan Rupprecht
1199451b44SJordan Rupprechtclass SBValuePersistTestCase(TestBase):
1299451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
1399451b44SJordan Rupprecht
1499451b44SJordan Rupprecht    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24772")
1599451b44SJordan Rupprecht    def test(self):
1699451b44SJordan Rupprecht        """Test SBValue::Persist"""
1799451b44SJordan Rupprecht        self.build()
1899451b44SJordan Rupprecht        self.setTearDownCleanup()
1999451b44SJordan Rupprecht        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
2099451b44SJordan Rupprecht
2199451b44SJordan Rupprecht        lldbutil.run_break_set_by_source_regexp(self, "break here")
2299451b44SJordan Rupprecht
2399451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
2499451b44SJordan Rupprecht
2599451b44SJordan Rupprecht        # The stop reason of the thread should be breakpoint.
2699451b44SJordan Rupprecht        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
2799451b44SJordan Rupprecht                    substrs=['stopped',
2899451b44SJordan Rupprecht                             'stop reason = breakpoint'])
2999451b44SJordan Rupprecht
3099451b44SJordan Rupprecht        # This is the function to remove the custom formats in order to have a
3199451b44SJordan Rupprecht        # clean slate for the next test case.
3299451b44SJordan Rupprecht        def cleanup():
3399451b44SJordan Rupprecht            self.runCmd('type format clear', check=False)
3499451b44SJordan Rupprecht            self.runCmd('type summary clear', check=False)
3599451b44SJordan Rupprecht            self.runCmd('type filter clear', check=False)
3699451b44SJordan Rupprecht            self.runCmd('type synthetic clear', check=False)
3799451b44SJordan Rupprecht
3899451b44SJordan Rupprecht        # Execute the cleanup function during test case tear down.
3999451b44SJordan Rupprecht        self.addTearDownHook(cleanup)
4099451b44SJordan Rupprecht
4199451b44SJordan Rupprecht        foo = self.frame().FindVariable("foo")
4299451b44SJordan Rupprecht        bar = self.frame().FindVariable("bar")
4399451b44SJordan Rupprecht        baz = self.frame().FindVariable("baz")
4499451b44SJordan Rupprecht
4599451b44SJordan Rupprecht        self.assertTrue(foo.IsValid(), "foo is not valid")
4699451b44SJordan Rupprecht        self.assertTrue(bar.IsValid(), "bar is not valid")
4799451b44SJordan Rupprecht        self.assertTrue(baz.IsValid(), "baz is not valid")
4899451b44SJordan Rupprecht
4999451b44SJordan Rupprecht        fooPersist = foo.Persist()
5099451b44SJordan Rupprecht        barPersist = bar.Persist()
5199451b44SJordan Rupprecht        bazPersist = baz.Persist()
5299451b44SJordan Rupprecht
5399451b44SJordan Rupprecht        self.assertTrue(fooPersist.IsValid(), "fooPersist is not valid")
5499451b44SJordan Rupprecht        self.assertTrue(barPersist.IsValid(), "barPersist is not valid")
5599451b44SJordan Rupprecht        self.assertTrue(bazPersist.IsValid(), "bazPersist is not valid")
5699451b44SJordan Rupprecht
57*0ed758b2SDave Lee        self.assertEqual(
58*0ed758b2SDave Lee            fooPersist.GetValueAsUnsigned(0), 10,
5999451b44SJordan Rupprecht            "fooPersist != 10")
60*0ed758b2SDave Lee        self.assertEqual(
61*0ed758b2SDave Lee            barPersist.GetPointeeData().sint32[0], 4,
6299451b44SJordan Rupprecht            "barPersist != 4")
63b3a0c4d7SRaphael Isemann        self.assertEquals(bazPersist.GetSummary(), '"85"', "bazPersist != 85")
6499451b44SJordan Rupprecht
6599451b44SJordan Rupprecht        self.runCmd("continue")
6699451b44SJordan Rupprecht
6799451b44SJordan Rupprecht        self.assertTrue(fooPersist.IsValid(), "fooPersist is not valid")
6899451b44SJordan Rupprecht        self.assertTrue(barPersist.IsValid(), "barPersist is not valid")
6999451b44SJordan Rupprecht        self.assertTrue(bazPersist.IsValid(), "bazPersist is not valid")
7099451b44SJordan Rupprecht
71*0ed758b2SDave Lee        self.assertEqual(
72*0ed758b2SDave Lee            fooPersist.GetValueAsUnsigned(0), 10,
7399451b44SJordan Rupprecht            "fooPersist != 10")
74*0ed758b2SDave Lee        self.assertEqual(
75*0ed758b2SDave Lee            barPersist.GetPointeeData().sint32[0], 4,
7699451b44SJordan Rupprecht            "barPersist != 4")
77b3a0c4d7SRaphael Isemann        self.assertEquals(bazPersist.GetSummary(), '"85"', "bazPersist != 85")
7899451b44SJordan Rupprecht
7999451b44SJordan Rupprecht        self.expect("expr *(%s)" % (barPersist.GetName()), substrs=['= 4'])
80