16e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan"""Test that the Objective-C syntax for dictionary/array literals and indexing works""" 26e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 36e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananimport os, time 46e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananimport unittest2 56e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananimport lldb 66e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananimport platform 7431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Inghamimport lldbutil 86e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 96e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananfrom distutils.version import StrictVersion 106e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 116e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananfrom lldbtest import * 126e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 136e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananclass ObjCNewSyntaxTestCase(TestBase): 146e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 156e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan mydir = os.path.join("lang", "objc", "objc-new-syntax") 166e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 17bf1209054c4ba709202e7f2fca31dfc97a0d8338Filipe Cabecinhas @unittest2.expectedFailure 1821b1984e161b0cadee331d32bfd721eccfdf4b1fJohnny Chen @dsym_test 196e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def test_expr_with_dsym(self): 206e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.buildDsym() 216e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expr() 226e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 23bf1209054c4ba709202e7f2fca31dfc97a0d8338Filipe Cabecinhas @unittest2.expectedFailure 2421b1984e161b0cadee331d32bfd721eccfdf4b1fJohnny Chen @dwarf_test 256e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def test_expr_with_dwarf(self): 266e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.buildDwarf() 276e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expr() 286e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 296e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def setUp(self): 306e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # Call super's setUp(). 316e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan TestBase.setUp(self) 326e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # Find the line number to break inside main(). 336e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.line = line_number('main.m', '// Set breakpoint 0 here.') 346e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 356e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def applies(self): 366e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan if platform.system() != "Darwin": 376e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan return False 386e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan if StrictVersion('12.0.0') > platform.release(): 396e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan return False 406e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 416e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan return True 426e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 436e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def common_setup(self): 446e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan exe = os.path.join(os.getcwd(), "a.out") 456e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) 466e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 476e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # Break inside the foo function which takes a bar_ptr argument. 48431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham lldbutil.run_break_set_by_file_and_line (self, "main.m", self.line, num_expected_locations=1, loc_exact=True) 496e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 506e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.runCmd("run", RUN_SUCCEEDED) 516e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 526e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # The stop reason of the thread should be breakpoint. 536e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 546e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ['stopped', 556e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 'stop reason = breakpoint']) 566e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 576e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # The breakpoint should have a hit count of 1. 586e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE, 596e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = [' resolved, hit count = 1']) 606e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 616e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def expr(self): 626e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan if not self.applies(): 636e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan return 646e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 656e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.common_setup() 666e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 67992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- immutable_array[0]", VARIABLES_DISPLAYED_CORRECTLY, 686e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["foo"]) 696e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 70992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- mutable_array[0]", VARIABLES_DISPLAYED_CORRECTLY, 716e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["foo"]) 726e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 73992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- mutable_array[0] = @\"bar\"", VARIABLES_DISPLAYED_CORRECTLY, 746e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["bar"]) 756e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 76992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- mutable_array[0]", VARIABLES_DISPLAYED_CORRECTLY, 776e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["bar"]) 786e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 79992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- immutable_dictionary[@\"key\"]", VARIABLES_DISPLAYED_CORRECTLY, 806e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["value"]) 816e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 82992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- mutable_dictionary[@\"key\"]", VARIABLES_DISPLAYED_CORRECTLY, 836e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["value"]) 846e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 85992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- mutable_dictionary[@\"key\"] = @\"object\"", VARIABLES_DISPLAYED_CORRECTLY, 866e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["object"]) 876e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 88992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- mutable_dictionary[@\"key\"]", VARIABLES_DISPLAYED_CORRECTLY, 896e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["object"]) 906e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 91992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @[ @\"foo\", @\"bar\" ]", VARIABLES_DISPLAYED_CORRECTLY, 926e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSArray", "foo", "bar"]) 936e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 94992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @{ @\"key\" : @\"object\" }", VARIABLES_DISPLAYED_CORRECTLY, 956e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSDictionary", "key", "object"]) 966e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 97992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @'a'", VARIABLES_DISPLAYED_CORRECTLY, 986e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", str(ord('a'))]) 996e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 100992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @1", VARIABLES_DISPLAYED_CORRECTLY, 1016e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", "1"]) 1026e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 103992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @1l", VARIABLES_DISPLAYED_CORRECTLY, 1046e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", "1"]) 1056e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 106992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @1ul", VARIABLES_DISPLAYED_CORRECTLY, 1076e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", "1"]) 1086e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 109992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @1ll", VARIABLES_DISPLAYED_CORRECTLY, 1106e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", "1"]) 1116e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 112992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @1ull", VARIABLES_DISPLAYED_CORRECTLY, 1136e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", "1"]) 1146e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 115992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @123.45", VARIABLES_DISPLAYED_CORRECTLY, 116930f10a19c8142f2f082d06087052464f0c64a39Sean Callanan substrs = ["NSNumber", "123.45"]) 117992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @123.45f", VARIABLES_DISPLAYED_CORRECTLY, 118930f10a19c8142f2f082d06087052464f0c64a39Sean Callanan substrs = ["NSNumber", "123.45"]) 119930f10a19c8142f2f082d06087052464f0c64a39Sean Callanan 120992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @( 1 + 3 )", VARIABLES_DISPLAYED_CORRECTLY, 121930f10a19c8142f2f082d06087052464f0c64a39Sean Callanan substrs = ["NSNumber", "4"]) 122992d227ab9ef1a8ffabc138fd515fb667556ae10Enrico Granata self.expect("expr --object-description -- @(\"Hello world\" + 6)", VARIABLES_DISPLAYED_CORRECTLY, 123267b9d9b55e6a0526277a1c4f6a6dd77def5bb36Sean Callanan substrs = ["NSString", "world"]) 1246e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 1256e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 1266e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananif __name__ == '__main__': 1276e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan import atexit 1286e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan lldb.SBDebugger.Initialize() 1296e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan atexit.register(lambda: lldb.SBDebugger.Terminate()) 1306e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan unittest2.main() 131