81 lines · python
1"""2Test that plugins that load commands work correctly.3"""4 5import lldb6from lldbsuite.test.decorators import *7from lldbsuite.test.lldbtest import *8from lldbsuite.test import lldbutil9 10 11class PluginCommandTestCase(TestBase):12 def setUp(self):13 TestBase.setUp(self)14 15 @skipIfNoSBHeaders16 @skipIfHostIncompatibleWithTarget17 @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")18 @no_debug_info_test19 def test_load_plugin(self):20 """Test that plugins that load commands work correctly."""21 self.generateSource("plugin.cpp")22 23 plugin_name = "plugin"24 if sys.platform.startswith("darwin"):25 plugin_lib_name = "lib%s.dylib" % plugin_name26 else:27 plugin_lib_name = "lib%s.so" % plugin_name28 29 # Invoke the library build rule.30 self.buildLibrary("plugin.cpp", plugin_name)31 32 retobj = lldb.SBCommandReturnObject()33 34 retval = self.dbg.GetCommandInterpreter().HandleCommand(35 "plugin load %s" % self.getBuildArtifact(plugin_lib_name), retobj36 )37 38 retobj.Clear()39 40 retval = self.dbg.GetCommandInterpreter().HandleCommand(41 "plugin_loaded_command child abc def ghi", retobj42 )43 44 if self.TraceOn():45 print(retobj.GetOutput())46 47 self.expect(retobj, substrs=["abc def ghi"], exe=False)48 49 retobj.Clear()50 51 # check that abbreviations work correctly in plugin commands.52 retval = self.dbg.GetCommandInterpreter().HandleCommand(53 "plugin_loaded_ ch abc def ghi", retobj54 )55 56 if self.TraceOn():57 print(retobj.GetOutput())58 59 self.expect(retobj, substrs=["abc def ghi"], exe=False)60 61 @no_debug_info_test62 def test_invalid_plugin_invocation(self):63 self.expect(64 "plugin load a b",65 error=True,66 startstr="error: 'plugin load' requires one argument",67 )68 self.expect(69 "plugin load",70 error=True,71 startstr="error: 'plugin load' requires one argument",72 )73 74 @no_debug_info_test75 def test_invalid_plugin_target(self):76 self.expect(77 "plugin load ThisIsNotAValidPluginName",78 error=True,79 startstr="error: no such file",80 )81