""" Test that plugins that load commands work correctly. """ from __future__ import print_function import os import time import re import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil class PluginCommandTestCase(TestBase): mydir = TestBase.compute_mydir(__file__) def setUp(self): TestBase.setUp(self) self.generateSource('plugin.cpp') @skipIfNoSBHeaders # Requires a compatible arch and platform to link against the host's built # lldb lib. @skipIfHostIncompatibleWithRemote @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778") @no_debug_info_test 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)