diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/lang/objc/foundation/TestObjCMethods.py')
| -rw-r--r-- | packages/Python/lldbsuite/test/lang/objc/foundation/TestObjCMethods.py | 327 |
1 files changed, 0 insertions, 327 deletions
diff --git a/packages/Python/lldbsuite/test/lang/objc/foundation/TestObjCMethods.py b/packages/Python/lldbsuite/test/lang/objc/foundation/TestObjCMethods.py deleted file mode 100644 index 42535ca44af0..000000000000 --- a/packages/Python/lldbsuite/test/lang/objc/foundation/TestObjCMethods.py +++ /dev/null @@ -1,327 +0,0 @@ -""" -Set breakpoints on objective-c class and instance methods in foundation. -Also lookup objective-c data types and evaluate expressions. -""" - -from __future__ import print_function - - -import os -import os.path -import time -import lldb -import string -from lldbsuite.test.decorators import * -from lldbsuite.test.lldbtest import * -from lldbsuite.test import lldbutil - -file_index = 0 - - -@skipUnlessDarwin -class FoundationTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break inside main(). - self.main_source = "main.m" - self.line = line_number( - self.main_source, - '// Set break point at this line.') - - 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 +[NSString stringWithFormat:]. - break_results = lldbutil.run_break_set_command( - self, "_regexp-break +[NSString stringWithFormat:]") - lldbutil.check_breakpoint_result( - self, - break_results, - symbol_name='+[NSString stringWithFormat:]', - num_locations=1) - - # Stop at -[MyString initWithNSString:]. - lldbutil.run_break_set_by_symbol( - self, - '-[MyString initWithNSString:]', - num_expected_locations=1, - sym_exact=True) - - # Stop at the "description" selector. - lldbutil.run_break_set_by_selector( - self, - 'description', - num_expected_locations=1, - module_name='a.out') - - # Stop at -[NSAutoreleasePool release]. - break_results = lldbutil.run_break_set_command( - self, "_regexp-break -[NSAutoreleasePool release]") - lldbutil.check_breakpoint_result( - self, - break_results, - symbol_name='-[NSAutoreleasePool release]', - num_locations=1) - - self.runCmd("run", RUN_SUCCEEDED) - - # First stop is +[NSString stringWithFormat:]. - self.expect( - "thread backtrace", - "Stop at +[NSString stringWithFormat:]", - substrs=["Foundation`+[NSString stringWithFormat:]"]) - - self.runCmd("process continue") - - # Second stop is still +[NSString stringWithFormat:]. - self.expect( - "thread backtrace", - "Stop at +[NSString stringWithFormat:]", - substrs=["Foundation`+[NSString stringWithFormat:]"]) - - self.runCmd("process continue") - - # Followed by a.out`-[MyString initWithNSString:]. - self.expect( - "thread backtrace", - "Stop at a.out`-[MyString initWithNSString:]", - substrs=["a.out`-[MyString initWithNSString:]"]) - - self.runCmd("process continue") - - # Followed by -[MyString description]. - self.expect("thread backtrace", "Stop at -[MyString description]", - substrs=["a.out`-[MyString description]"]) - - self.runCmd("process continue") - - # Followed by the same -[MyString description]. - self.expect("thread backtrace", "Stop at -[MyString description]", - substrs=["a.out`-[MyString description]"]) - - self.runCmd("process continue") - - # Followed by -[NSAutoreleasePool release]. - self.expect("thread backtrace", "Stop at -[NSAutoreleasePool release]", - substrs=["Foundation`-[NSAutoreleasePool release]"]) - - # rdar://problem/8542091 - # rdar://problem/8492646 - def test_data_type_and_expr(self): - """Lookup objective-c data types and evaluate expressions.""" - 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.expect("breakpoint set -n '-[MyString description]", BREAKPOINT_CREATED, -# startstr = "Breakpoint created: 1: name = '-[MyString description]', -# locations = 1") - - self.runCmd("run", RUN_SUCCEEDED) - - # The backtrace should show we stop at -[MyString description]. - self.expect("thread backtrace", "Stop at -[MyString description]", - substrs=["a.out`-[MyString description]"]) - - # Lookup objc data type MyString and evaluate some expressions. - - self.expect("image lookup -t NSString", DATA_TYPES_DISPLAYED_CORRECTLY, - substrs=['name = "NSString"', - 'compiler_type = "@interface NSString']) - - self.expect("image lookup -t MyString", DATA_TYPES_DISPLAYED_CORRECTLY, - substrs=['name = "MyString"', - 'compiler_type = "@interface MyString', - 'NSString * str;', - 'NSDate * date;']) - - self.expect( - "frame variable --show-types --scope", - VARIABLES_DISPLAYED_CORRECTLY, - substrs=["ARG: (MyString *) self"], - patterns=[ - "ARG: \(.*\) _cmd", - "(objc_selector *)|(SEL)"]) - - # rdar://problem/8651752 - # don't crash trying to ask clang how many children an empty record has - self.runCmd("frame variable *_cmd") - - # rdar://problem/8492646 - # test/foundation fails after updating to tot r115023 - # self->str displays nothing as output - self.expect( - "frame variable --show-types self->str", - VARIABLES_DISPLAYED_CORRECTLY, - startstr="(NSString *) self->str") - - # rdar://problem/8447030 - # 'frame variable self->date' displays the wrong data member - self.expect( - "frame variable --show-types self->date", - VARIABLES_DISPLAYED_CORRECTLY, - startstr="(NSDate *) self->date") - - # This should display the str and date member fields as well. - self.expect( - "frame variable --show-types *self", - VARIABLES_DISPLAYED_CORRECTLY, - substrs=[ - "(MyString) *self", - "(NSString *) str", - "(NSDate *) date"]) - - # isa should be accessible. - self.expect("expression self->isa", VARIABLES_DISPLAYED_CORRECTLY, - substrs=["(Class)"]) - - # This should fail expectedly. - self.expect( - "expression self->non_existent_member", - COMMAND_FAILED_AS_EXPECTED, - error=True, - startstr="error: 'MyString' does not have a member named 'non_existent_member'") - - # Use expression parser. - self.runCmd("expression self->str") - self.runCmd("expression self->date") - - # (lldb) expression self->str - # error: instance variable 'str' is protected - # error: 1 errors parsing expression - # - # (lldb) expression self->date - # error: instance variable 'date' is protected - # error: 1 errors parsing expression - # - - self.runCmd("breakpoint delete 1") - lldbutil.run_break_set_by_file_and_line( - self, "main.m", self.line, num_expected_locations=1, loc_exact=True) - - self.runCmd("process continue") - - # rdar://problem/8542091 - # test/foundation: expr -o -- my not working? - # - # Test new feature with r115115: - # Add "-o" option to "expression" which prints the object description - # if available. - self.expect( - "expression --object-description -- my", - "Object description displayed correctly", - patterns=["Hello from.*a.out.*with timestamp: "]) - - @add_test_categories(['pyapi']) - def test_print_ivars_correctly(self): - self.build() - # See: <rdar://problem/8717050> lldb needs to use the ObjC runtime symbols for ivar offsets - # Only fails for the ObjC 2.0 runtime. - exe = self.getBuildArtifact("a.out") - - target = self.dbg.CreateTarget(exe) - self.assertTrue(target, VALID_TARGET) - - break1 = target.BreakpointCreateByLocation(self.main_source, self.line) - self.assertTrue(break1, VALID_BREAKPOINT) - - # Now launch the process, and do not stop at entry point. - process = target.LaunchSimple( - None, None, self.get_process_working_directory()) - - self.assertTrue(process, PROCESS_IS_VALID) - - # The stop reason of the thread should be breakpoint. - thread = process.GetThreadAtIndex(0) - if thread.GetStopReason() != lldb.eStopReasonBreakpoint: - from lldbsuite.test.lldbutil import stop_reason_to_str - self.fail(STOPPED_DUE_TO_BREAKPOINT_WITH_STOP_REASON_AS % - stop_reason_to_str(thread.GetStopReason())) - - # Make sure we stopped at the first breakpoint. - - cur_frame = thread.GetFrameAtIndex(0) - - line_number = cur_frame.GetLineEntry().GetLine() - self.assertTrue(line_number == self.line, "Hit the first breakpoint.") - - my_var = cur_frame.FindVariable("my") - self.assertTrue(my_var, "Made a variable object for my") - - str_var = cur_frame.FindVariable("str") - self.assertTrue(str_var, "Made a variable object for str") - - # Now make sure that the my->str == str: - - my_str_var = my_var.GetChildMemberWithName("str") - self.assertTrue(my_str_var, "Found a str ivar in my") - - str_value = int(str_var.GetValue(), 0) - - my_str_value = int(my_str_var.GetValue(), 0) - - self.assertTrue( - str_value == my_str_value, - "Got the correct value for my->str") - - def test_expression_lookups_objc(self): - """Test running an expression detect spurious debug info lookups (DWARF).""" - self.build() - exe = self.getBuildArtifact("a.out") - self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) - - # Stop at -[MyString initWithNSString:]. - lldbutil.run_break_set_by_symbol( - self, - '-[MyString initWithNSString:]', - num_expected_locations=1, - sym_exact=True) - - self.runCmd("run", RUN_SUCCEEDED) - - global file_index - # Log any DWARF lookups - ++file_index - logfile = os.path.join( - self.getBuildDir(), - "dwarf-lookups-" + - self.getArchitecture() + - "-" + - str(file_index) + - ".txt") - self.runCmd("log enable -f %s dwarf lookups" % (logfile)) - self.runCmd("expr self") - self.runCmd("log disable dwarf lookups") - - def cleanup(): - if os.path.exists(logfile): - os.unlink(logfile) - - self.addTearDownHook(cleanup) - - if os.path.exists(logfile): - f = open(logfile) - lines = f.readlines() - num_errors = 0 - for line in lines: - if string.find(line, "$__lldb") != -1: - if num_errors == 0: - print( - "error: found spurious name lookups when evaluating an expression:") - num_errors += 1 - print(line, end='') - self.assertTrue(num_errors == 0, "Spurious lookups detected") - f.close() |
