1 """Test printing ObjC objects that use unbacked properties - so that the static ivar offsets are incorrect."""
3 from __future__ import print_function
9 from lldbsuite.test.decorators import *
10 from lldbsuite.test.lldbtest import *
11 from lldbsuite.test import lldbutil
14 class TestObjCIvarOffsets(TestBase):
16 mydir = TestBase.compute_mydir(__file__)
19 # Call super's setUp().
21 # Find the line numbers to break inside main().
22 self.main_source = "main.m"
23 self.stop_line = line_number(
24 self.main_source, '// Set breakpoint here.')
27 @add_test_categories(['pyapi'])
28 def test_with_python_api(self):
29 """Test printing ObjC objects that use unbacked properties"""
31 exe = os.path.join(os.getcwd(), "a.out")
33 target = self.dbg.CreateTarget(exe)
34 self.assertTrue(target, VALID_TARGET)
36 breakpoint = target.BreakpointCreateByLocation(
37 self.main_source, self.stop_line)
38 self.assertTrue(breakpoint, VALID_BREAKPOINT)
40 process = target.LaunchSimple(
41 None, None, self.get_process_working_directory())
42 self.assertTrue(process, "Created a process.")
44 process.GetState() == lldb.eStateStopped,
47 thread_list = lldbutil.get_threads_stopped_at_breakpoint(
49 self.assertTrue(len(thread_list) == 1)
50 thread = thread_list[0]
52 frame = thread.GetFrameAtIndex(0)
53 self.assertTrue(frame, "frame 0 is valid")
55 mine = thread.GetFrameAtIndex(0).FindVariable("mine")
56 self.assertTrue(mine, "Found local variable mine.")
58 # Test the value object value for BaseClass->_backed_int
60 error = lldb.SBError()
62 mine_backed_int = mine.GetChildMemberWithName("_backed_int")
65 "Found mine->backed_int local variable.")
66 backed_value = mine_backed_int.GetValueAsSigned(error)
67 self.assertTrue(error.Success())
68 self.assertTrue(backed_value == 1111)
70 # Test the value object value for DerivedClass->_derived_backed_int
72 mine_derived_backed_int = mine.GetChildMemberWithName(
73 "_derived_backed_int")
74 self.assertTrue(mine_derived_backed_int,
75 "Found mine->derived_backed_int local variable.")
76 derived_backed_value = mine_derived_backed_int.GetValueAsSigned(error)
77 self.assertTrue(error.Success())
78 self.assertTrue(derived_backed_value == 3333)
80 # Make sure we also get bit-field offsets correct:
82 mine_flag2 = mine.GetChildMemberWithName("flag2")
83 self.assertTrue(mine_flag2, "Found mine->flag2 local variable.")
84 flag2_value = mine_flag2.GetValueAsUnsigned(error)
85 self.assertTrue(error.Success())
86 self.assertTrue(flag2_value == 7)