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