xref: /llvm-project/lldb/test/API/python_api/sbvalue_persist/TestSBValuePersist.py (revision 80fcecb13c388ff087a27a4b0e7ca3dd8c98eaa4)
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