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