1ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen"""Test the SBCommandInterpreter APIs.""" 2ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 3ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chenimport os 4ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chenimport unittest2 5ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chenimport lldb 6ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chenimport pexpect 7ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chenfrom lldbtest import * 8ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 9ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chenclass CommandInterpreterAPICase(TestBase): 10ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 11ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen mydir = os.path.join("python_api", "interpreter") 12ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 13ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") 14ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen @python_api_test 1521b1984e161b0cadee331d32bfd721eccfdf4b1fJohnny Chen @dsym_test 1621b1984e161b0cadee331d32bfd721eccfdf4b1fJohnny Chen def test_with_dsym_and_process_launch_api(self): 17ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen """Test the SBCommandInterpreter APIs.""" 18ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.buildDsym() 19ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.command_interpreter_api() 20ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 21ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen @python_api_test 2221b1984e161b0cadee331d32bfd721eccfdf4b1fJohnny Chen @dwarf_test 23ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen def test_with_dwarf_and_process_launch_api(self): 24ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen """Test the SBCommandInterpreter APIs.""" 25ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.buildDwarf() 26ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.command_interpreter_api() 27ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 28ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen def setUp(self): 29ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen # Call super's setUp(). 30ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen TestBase.setUp(self) 31ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen # Find the line number to break on inside main.cpp. 32ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.line = line_number('main.c', 'Hello world.') 33ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 34ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen def command_interpreter_api(self): 35ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen """Test the SBCommandInterpreter APIs.""" 36ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen exe = os.path.join(os.getcwd(), "a.out") 37ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 38ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen # Create a target by the debugger. 39ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen target = self.dbg.CreateTarget(exe) 40805fec7ec90a09b94bc4515fcac9b2b03bae153bJohnny Chen self.assertTrue(target, VALID_TARGET) 41ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 42ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen # Retrieve the associated command interpreter from our debugger. 43ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen ci = self.dbg.GetCommandInterpreter() 44805fec7ec90a09b94bc4515fcac9b2b03bae153bJohnny Chen self.assertTrue(ci, VALID_COMMAND_INTERPRETER) 45ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 46ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen # Exercise some APIs.... 47ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 48ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.assertTrue(ci.HasCommands()) 49ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.assertTrue(ci.HasAliases()) 50ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.assertTrue(ci.HasAliasOptions()) 51ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.assertTrue(ci.CommandExists("breakpoint")) 52ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.assertTrue(ci.CommandExists("target")) 53ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.assertTrue(ci.CommandExists("platform")) 54ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.assertTrue(ci.AliasExists("file")) 55ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.assertTrue(ci.AliasExists("run")) 56ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.assertTrue(ci.AliasExists("bt")) 57ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 58ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen res = lldb.SBCommandReturnObject() 59ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen ci.HandleCommand("breakpoint set -f main.c -l %d" % self.line, res) 60ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.assertTrue(res.Succeeded()) 61ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen ci.HandleCommand("process launch", res) 62ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.assertTrue(res.Succeeded()) 63ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 64bab8cc9b05a2559759ec3252c6c519ca77479675Johnny Chen # Boundary conditions should not crash lldb! 65bab8cc9b05a2559759ec3252c6c519ca77479675Johnny Chen self.assertFalse(ci.CommandExists(None)) 66bab8cc9b05a2559759ec3252c6c519ca77479675Johnny Chen self.assertFalse(ci.AliasExists(None)) 67bab8cc9b05a2559759ec3252c6c519ca77479675Johnny Chen ci.HandleCommand(None, res) 68bab8cc9b05a2559759ec3252c6c519ca77479675Johnny Chen self.assertFalse(res.Succeeded()) 69c82670a8876d9b78a3f967a2eef054c8c0bce237Johnny Chen res.AppendMessage("Just appended a message.") 70c82670a8876d9b78a3f967a2eef054c8c0bce237Johnny Chen res.AppendMessage(None) 71c82670a8876d9b78a3f967a2eef054c8c0bce237Johnny Chen if self.TraceOn(): 72c82670a8876d9b78a3f967a2eef054c8c0bce237Johnny Chen print res 73bab8cc9b05a2559759ec3252c6c519ca77479675Johnny Chen 743d8ae4681b81b42a404ad77a231c6f743040e644Johnny Chen process = ci.GetProcess() 753d8ae4681b81b42a404ad77a231c6f743040e644Johnny Chen self.assertTrue(process) 76ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 77ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen import lldbutil 783d8ae4681b81b42a404ad77a231c6f743040e644Johnny Chen if process.GetState() != lldb.eStateStopped: 79ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen self.fail("Process should be in the 'stopped' state, " 80ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen "instead the actual state is: '%s'" % 813d8ae4681b81b42a404ad77a231c6f743040e644Johnny Chen lldbutil.state_type_to_str(process.GetState())) 82ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 83ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen if self.TraceOn(): 843d8ae4681b81b42a404ad77a231c6f743040e644Johnny Chen lldbutil.print_stacktraces(process) 85ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 86ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen 87ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chenif __name__ == '__main__': 88ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen import atexit 89ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen lldb.SBDebugger.Initialize() 90ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen atexit.register(lambda: lldb.SBDebugger.Terminate()) 91ac91027caa22212ac35de969fa53348b70e9bb28Johnny Chen unittest2.main() 92