There is a .categories file in the python_api directory that makes all nested tests belong to the category "pyapi". The decorator is unnecessary for these tests.
82 lines
2.9 KiB
Python
82 lines
2.9 KiB
Python
"""Test SBValue::Persist"""
|
|
|
|
|
|
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
class SBValuePersistTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
NO_DEBUG_INFO_TESTCASE = True
|
|
|
|
@expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24772")
|
|
def test(self):
|
|
"""Test SBValue::Persist"""
|
|
self.build()
|
|
self.setTearDownCleanup()
|
|
self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
|
|
|
|
lldbutil.run_break_set_by_source_regexp(self, "break here")
|
|
|
|
self.runCmd("run", RUN_SUCCEEDED)
|
|
|
|
# The stop reason of the thread should be breakpoint.
|
|
self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
|
|
substrs=['stopped',
|
|
'stop reason = breakpoint'])
|
|
|
|
# This is the function to remove the custom formats in order to have a
|
|
# clean slate for the next test case.
|
|
def cleanup():
|
|
self.runCmd('type format clear', check=False)
|
|
self.runCmd('type summary clear', check=False)
|
|
self.runCmd('type filter clear', check=False)
|
|
self.runCmd('type synthetic clear', check=False)
|
|
|
|
# Execute the cleanup function during test case tear down.
|
|
self.addTearDownHook(cleanup)
|
|
|
|
foo = self.frame().FindVariable("foo")
|
|
bar = self.frame().FindVariable("bar")
|
|
baz = self.frame().FindVariable("baz")
|
|
|
|
self.assertTrue(foo.IsValid(), "foo is not valid")
|
|
self.assertTrue(bar.IsValid(), "bar is not valid")
|
|
self.assertTrue(baz.IsValid(), "baz is not valid")
|
|
|
|
fooPersist = foo.Persist()
|
|
barPersist = bar.Persist()
|
|
bazPersist = baz.Persist()
|
|
|
|
self.assertTrue(fooPersist.IsValid(), "fooPersist is not valid")
|
|
self.assertTrue(barPersist.IsValid(), "barPersist is not valid")
|
|
self.assertTrue(bazPersist.IsValid(), "bazPersist is not valid")
|
|
|
|
self.assertEqual(
|
|
fooPersist.GetValueAsUnsigned(0), 10,
|
|
"fooPersist != 10")
|
|
self.assertEqual(
|
|
barPersist.GetPointeeData().sint32[0], 4,
|
|
"barPersist != 4")
|
|
self.assertEquals(bazPersist.GetSummary(), '"85"', "bazPersist != 85")
|
|
|
|
self.runCmd("continue")
|
|
|
|
self.assertTrue(fooPersist.IsValid(), "fooPersist is not valid")
|
|
self.assertTrue(barPersist.IsValid(), "barPersist is not valid")
|
|
self.assertTrue(bazPersist.IsValid(), "bazPersist is not valid")
|
|
|
|
self.assertEqual(
|
|
fooPersist.GetValueAsUnsigned(0), 10,
|
|
"fooPersist != 10")
|
|
self.assertEqual(
|
|
barPersist.GetPointeeData().sint32[0], 4,
|
|
"barPersist != 4")
|
|
self.assertEquals(bazPersist.GetSummary(), '"85"', "bazPersist != 85")
|
|
|
|
self.expect("expr *(%s)" % (barPersist.GetName()), substrs=['= 4'])
|