13d50a545b840956a1f1faf7d973e33a651156041Johnny Chen"""
23d50a545b840956a1f1faf7d973e33a651156041Johnny ChenTest some more expression commands.
33d50a545b840956a1f1faf7d973e33a651156041Johnny Chen"""
43d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
53d50a545b840956a1f1faf7d973e33a651156041Johnny Chenimport os
63d50a545b840956a1f1faf7d973e33a651156041Johnny Chenimport unittest2
73d50a545b840956a1f1faf7d973e33a651156041Johnny Chenimport lldb
83d50a545b840956a1f1faf7d973e33a651156041Johnny Chenimport lldbutil
93d50a545b840956a1f1faf7d973e33a651156041Johnny Chenfrom lldbtest import *
103d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
113d50a545b840956a1f1faf7d973e33a651156041Johnny Chenclass ExprCommands2TestCase(TestBase):
123d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
133d50a545b840956a1f1faf7d973e33a651156041Johnny Chen    mydir = os.path.join("expression_command", "test")
143d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
153d50a545b840956a1f1faf7d973e33a651156041Johnny Chen    def setUp(self):
163d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # Call super's setUp().
173d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        TestBase.setUp(self)
183d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # Find the line number to break for main.c.
193d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        self.line = line_number('main.cpp',
203d50a545b840956a1f1faf7d973e33a651156041Johnny Chen                                '// Please test many expressions while stopped at this line:')
213d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
2267130e42592e68c3055e7ab5b7a368d89a06f05eJohnny Chen    @expectedFailurei386
233d50a545b840956a1f1faf7d973e33a651156041Johnny Chen    def test_more_expr_commands(self):
243d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        """Test some more expression commands."""
253d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        self.buildDefault()
263d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
273d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
283d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
29431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham        lldbutil.run_break_set_by_file_and_line(self, "main.cpp", self.line, num_expected_locations=1,loc_exact=False)
303d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
313d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        self.runCmd("run", RUN_SUCCEEDED)
323d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
333d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # Does static casting work?
343d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        self.expect("expression (int*)argv",
353d50a545b840956a1f1faf7d973e33a651156041Johnny Chen            startstr = "(int *) $0 = 0x")
363d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # (int *) $0 = 0x00007fff5fbff258
373d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
383d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # Do anonymous symbols work?
393d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        self.expect("expression ((char**)environ)[0]",
403d50a545b840956a1f1faf7d973e33a651156041Johnny Chen            startstr = "(char *) $1 = 0x")
413d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # (char *) $1 = 0x00007fff5fbff298 "Apple_PubSub_Socket_Render=/tmp/launch-7AEsUD/Render"
423d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
433d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # Do return values containing the contents of expression locals work?
443d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        self.expect("expression int i = 5; i",
453d50a545b840956a1f1faf7d973e33a651156041Johnny Chen            startstr = "(int) $2 = 5")
463d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # (int) $2 = 5
473d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        self.expect("expression $2 + 1",
483d50a545b840956a1f1faf7d973e33a651156041Johnny Chen            startstr = "(int) $3 = 6")
493d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # (int) $3 = 6
503d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
513d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # Do return values containing the results of static expressions work?
523d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        self.expect("expression 20 + 3",
533d50a545b840956a1f1faf7d973e33a651156041Johnny Chen            startstr = "(int) $4 = 23")
543d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # (int) $4 = 5
553d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        self.expect("expression $4 + 1",
563d50a545b840956a1f1faf7d973e33a651156041Johnny Chen            startstr = "(int) $5 = 24")
573d50a545b840956a1f1faf7d973e33a651156041Johnny Chen        # (int) $5 = 6
583d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
593d50a545b840956a1f1faf7d973e33a651156041Johnny Chen
603d50a545b840956a1f1faf7d973e33a651156041Johnny Chenif __name__ == '__main__':
613d50a545b840956a1f1faf7d973e33a651156041Johnny Chen    import atexit
623d50a545b840956a1f1faf7d973e33a651156041Johnny Chen    lldb.SBDebugger.Initialize()
633d50a545b840956a1f1faf7d973e33a651156041Johnny Chen    atexit.register(lambda: lldb.SBDebugger.Terminate())
643d50a545b840956a1f1faf7d973e33a651156041Johnny Chen    unittest2.main()
65