"""
Test that Objective-C methods from the runtime work correctly.
"""
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class RuntimeTypesTestCase(TestBase):
@expectedFailureAll(
oslist=["macosx"], debug_info="gmodules", bugnumber="llvm.org/pr27862"
)
def test_break(self):
"""Test setting objc breakpoints using '_regexp-break' and 'breakpoint set'."""
self.build()
exe = self.getBuildArtifact("a.out")
self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
# Stop at -[MyString description].
lldbutil.run_break_set_by_symbol(
self, "-[MyString description]", num_expected_locations=1, sym_exact=True
)
self.runCmd("run", RUN_SUCCEEDED)
self.runCmd("settings set target.prefer-dynamic-value no-dynamic-values")
# The backtrace should show we stop at -[MyString description].
self.expect(
"thread backtrace",
"Stop at -[MyString description]",
substrs=["a.out`-[MyString description]"],
)
# Use runtime information about NSString.
# The length property should be usable.
self.expect(
"expression str.length",
VARIABLES_DISPLAYED_CORRECTLY,
patterns=[r"(\(unsigned long long\))|\(NSUInteger\)"],
)
# Static methods on NSString should work.
self.expect(
'expr [NSString stringWithCString:"foo" encoding:1]',
VALID_TYPE,
substrs=["(id)", "$1"],
)
self.expect("po $1", VARIABLES_DISPLAYED_CORRECTLY, substrs=["foo"])