| """ |
| Test that plugins that load commands work correctly. |
| """ |
| |
| import os, time |
| import re |
| import unittest2 |
| import lldb |
| from lldbtest import * |
| import lldbutil |
| |
| class PluginCommandTestCase(TestBase): |
| |
| mydir = TestBase.compute_mydir(__file__) |
| |
| def setUp(self): |
| # Call super's setUp(). |
| TestBase.setUp(self) |
| self.lib_dir = os.environ["LLDB_LIB_DIR"] |
| |
| @expectedFailureFreeBSD('llvm.org/pr17430') |
| @skipIfi386 # This test links against liblldb.so. Thus, the test requires a 32-bit liblldb.so. |
| def test_load_plugin(self): |
| """Test that plugins that load commands work correctly.""" |
| |
| plugin_name = "plugin" |
| if sys.platform.startswith("darwin"): |
| plugin_lib_name = "lib%s.dylib" % plugin_name |
| else: |
| plugin_lib_name = "lib%s.so" % plugin_name |
| |
| # Invoke the library build rule. |
| self.buildLibrary("plugin.cpp", plugin_name) |
| |
| debugger = lldb.SBDebugger.Create() |
| |
| retobj = lldb.SBCommandReturnObject() |
| |
| retval = debugger.GetCommandInterpreter().HandleCommand("plugin load %s" % plugin_lib_name, retobj) |
| |
| retobj.Clear() |
| |
| retval = debugger.GetCommandInterpreter().HandleCommand("plugin_loaded_command child abc def ghi",retobj) |
| |
| if self.TraceOn(): |
| print retobj.GetOutput() |
| |
| self.expect(retobj,substrs = ['abc def ghi'], exe=False) |
| |
| retobj.Clear() |
| |
| # check that abbreviations work correctly in plugin commands. |
| retval = debugger.GetCommandInterpreter().HandleCommand("plugin_loaded_ ch abc def ghi",retobj) |
| |
| if self.TraceOn(): |
| print retobj.GetOutput() |
| |
| self.expect(retobj,substrs = ['abc def ghi'], exe=False) |
| |
| |
| if __name__ == '__main__': |
| import atexit |
| lldb.SBDebugger.Initialize() |
| atexit.register(lambda: lldb.SBDebugger.Terminate()) |
| unittest2.main() |