""" Test that plugins that load commands work correctly. """ import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil class PluginCommandTestCase(TestBase): def setUp(self): TestBase.setUp(self) @skipIfNoSBHeaders @skipIfHostIncompatibleWithTarget @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778") @no_debug_info_test def test_load_plugin(self): """Test that plugins that load commands work correctly.""" self.generateSource("plugin.cpp") 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) retobj = lldb.SBCommandReturnObject() retval = self.dbg.GetCommandInterpreter().HandleCommand( "plugin load %s" % self.getBuildArtifact(plugin_lib_name), retobj ) retobj.Clear() retval = self.dbg.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 = self.dbg.GetCommandInterpreter().HandleCommand( "plugin_loaded_ ch abc def ghi", retobj ) if self.TraceOn(): print(retobj.GetOutput()) self.expect(retobj, substrs=["abc def ghi"], exe=False) @no_debug_info_test def test_invalid_plugin_invocation(self): self.expect( "plugin load a b", error=True, startstr="error: 'plugin load' requires one argument", ) self.expect( "plugin load", error=True, startstr="error: 'plugin load' requires one argument", ) @no_debug_info_test def test_invalid_plugin_target(self): self.expect( "plugin load ThisIsNotAValidPluginName", error=True, startstr="error: no such file", )