TestObjCNewSyntax.py revision 6e12c7a5a851f661677b16c544aac2f93fb6e86d
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 76e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 86e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananfrom distutils.version import StrictVersion 96e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 106e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananfrom lldbtest import * 116e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 126e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananclass ObjCNewSyntaxTestCase(TestBase): 136e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 146e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan mydir = os.path.join("lang", "objc", "objc-new-syntax") 156e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 166e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def test_expr_with_dsym(self): 176e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.buildDsym() 186e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expr() 196e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 206e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def test_expr_with_dwarf(self): 216e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.buildDwarf() 226e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expr() 236e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 246e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def setUp(self): 256e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # Call super's setUp(). 266e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan TestBase.setUp(self) 276e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # Find the line number to break inside main(). 286e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.line = line_number('main.m', '// Set breakpoint 0 here.') 296e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 306e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def applies(self): 316e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan if platform.system() != "Darwin": 326e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan return False 336e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan if StrictVersion('12.0.0') > platform.release(): 346e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan return False 356e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 366e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan return True 376e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 386e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def common_setup(self): 396e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan exe = os.path.join(os.getcwd(), "a.out") 406e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) 416e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 426e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # Break inside the foo function which takes a bar_ptr argument. 436e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("breakpoint set -f main.m -l %d" % self.line, BREAKPOINT_CREATED, 446e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan startstr = "Breakpoint created") 456e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 466e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.runCmd("run", RUN_SUCCEEDED) 476e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 486e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # The stop reason of the thread should be breakpoint. 496e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 506e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ['stopped', 516e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 'stop reason = breakpoint']) 526e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 536e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # The breakpoint should have a hit count of 1. 546e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE, 556e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = [' resolved, hit count = 1']) 566e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 576e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan def expr(self): 586e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan if not self.applies(): 596e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan return 606e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 616e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan print "Hello!" 626e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 636e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.common_setup() 646e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 656e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- immutable_array[0]", VARIABLES_DISPLAYED_CORRECTLY, 666e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["foo"]) 676e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 686e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- mutable_array[0]", VARIABLES_DISPLAYED_CORRECTLY, 696e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["foo"]) 706e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 716e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- mutable_array[0] = @\"bar\"", VARIABLES_DISPLAYED_CORRECTLY, 726e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["bar"]) 736e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 746e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- mutable_array[0]", VARIABLES_DISPLAYED_CORRECTLY, 756e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["bar"]) 766e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 776e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- immutable_dictionary[@\"key\"]", VARIABLES_DISPLAYED_CORRECTLY, 786e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["value"]) 796e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 806e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- mutable_dictionary[@\"key\"]", VARIABLES_DISPLAYED_CORRECTLY, 816e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["value"]) 826e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 836e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- mutable_dictionary[@\"key\"] = @\"object\"", VARIABLES_DISPLAYED_CORRECTLY, 846e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["object"]) 856e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 866e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- mutable_dictionary[@\"key\"]", VARIABLES_DISPLAYED_CORRECTLY, 876e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["object"]) 886e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 896e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- @[ @\"foo\", @\"bar\" ]", VARIABLES_DISPLAYED_CORRECTLY, 906e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSArray", "foo", "bar"]) 916e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 926e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- @{ @\"key\" : @\"object\" }", VARIABLES_DISPLAYED_CORRECTLY, 936e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSDictionary", "key", "object"]) 946e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 956e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- @'a'", VARIABLES_DISPLAYED_CORRECTLY, 966e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", str(ord('a'))]) 976e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 986e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- @1", VARIABLES_DISPLAYED_CORRECTLY, 996e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", "1"]) 1006e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 1016e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- @1l", VARIABLES_DISPLAYED_CORRECTLY, 1026e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", "1"]) 1036e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 1046e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- @1ul", VARIABLES_DISPLAYED_CORRECTLY, 1056e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", "1"]) 1066e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 1076e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- @1ll", VARIABLES_DISPLAYED_CORRECTLY, 1086e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", "1"]) 1096e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 1106e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan self.expect("expr -o -- @1ull", VARIABLES_DISPLAYED_CORRECTLY, 1116e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan substrs = ["NSNumber", "1"]) 1126e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 1136e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan #<rdar://problem/10924364> 1146e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan #self.expect("expr -o -- @123.45", VARIABLES_DISPLAYED_CORRECTLY, 1156e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # substrs = ["NSNumber", "123.45"]) 1166e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan #self.expect("expr -o -- @123.45f", VARIABLES_DISPLAYED_CORRECTLY, 1176e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan # substrs = ["NSNumber", "123.45"]) 1186e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 1196e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan 1206e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callananif __name__ == '__main__': 1216e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan import atexit 1226e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan lldb.SBDebugger.Initialize() 1236e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan atexit.register(lambda: lldb.SBDebugger.Terminate()) 1246e12c7a5a851f661677b16c544aac2f93fb6e86dSean Callanan unittest2.main() 125