blob: ebbf35ab9ba3e54997c53e19b007935fd601dd94 [file]
"""Test calling functions in class methods."""
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class TestObjCClassMethod(TestBase):
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
# Find the line numbers to break inside main().
self.main_source = lldb.SBFileSpec("class.m")
NO_DEBUG_INFO_TESTCASE = True
@skipUnlessDarwin
@add_test_categories(["pyapi"])
def test_without_class_stubs(self):
self.do_test_with_python_api()
def do_test_with_python_api(self):
"""Test calling functions in class methods."""
self.build()
target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(
self, "Set a breakpoint here", self.main_source
)
# Now make sure we can call a function in the class method we've
# stopped in.
frame = thread.GetFrameAtIndex(0)
self.assertTrue(frame, "Got a valid frame 0 frame.")
# First check that we can call a class method:
cmd_value = frame.EvaluateExpression(
'(int)[Foo doSomethingWithString:@"Hello"]'
)
if self.TraceOn():
if cmd_value.IsValid():
print("cmd_value is valid")
print("cmd_value has the value %d" % cmd_value.GetValueAsUnsigned())
self.assertTrue(cmd_value.IsValid())
self.assertEqual(cmd_value.GetValueAsUnsigned(), 5)
# Now check that we can step INTO class methods:
thread.StepInto()
frame = thread.GetFrameAtIndex(0)
self.assertEqual(
frame.name, "+[Foo doSomethingWithString:]", "Stopped in class method"
)