version, and clang will say it supports the flag even if the linker can't use its output. The compiler actually has code to know whether the linker version is right, and sets it to the default if the stars align. So I'm going to just test whether whatever is the default method for the compiler and linker works.
52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
"""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"
|
|
)
|