1""" 2Test that plugins that load commands work correctly. 3""" 4 5from __future__ import print_function 6 7 8import lldb 9from lldbsuite.test.decorators import * 10from lldbsuite.test.lldbtest import * 11from lldbsuite.test import lldbutil 12 13 14class PluginCommandTestCase(TestBase): 15 16 mydir = TestBase.compute_mydir(__file__) 17 18 def setUp(self): 19 TestBase.setUp(self) 20 self.generateSource('plugin.cpp') 21 22 @skipIfNoSBHeaders 23 # Requires a compatible arch and platform to link against the host's built 24 # lldb lib. 25 @skipIfHostIncompatibleWithRemote 26 @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778") 27 @no_debug_info_test 28 def test_load_plugin(self): 29 """Test that plugins that load commands work correctly.""" 30 31 plugin_name = "plugin" 32 if sys.platform.startswith("darwin"): 33 plugin_lib_name = "lib%s.dylib" % plugin_name 34 else: 35 plugin_lib_name = "lib%s.so" % plugin_name 36 37 # Invoke the library build rule. 38 self.buildLibrary("plugin.cpp", plugin_name) 39 40 debugger = lldb.SBDebugger.Create() 41 42 retobj = lldb.SBCommandReturnObject() 43 44 retval = debugger.GetCommandInterpreter().HandleCommand( 45 "plugin load %s" % self.getBuildArtifact(plugin_lib_name), retobj) 46 47 retobj.Clear() 48 49 retval = debugger.GetCommandInterpreter().HandleCommand( 50 "plugin_loaded_command child abc def ghi", retobj) 51 52 if self.TraceOn(): 53 print(retobj.GetOutput()) 54 55 self.expect(retobj, substrs=['abc def ghi'], exe=False) 56 57 retobj.Clear() 58 59 # check that abbreviations work correctly in plugin commands. 60 retval = debugger.GetCommandInterpreter().HandleCommand( 61 "plugin_loaded_ ch abc def ghi", retobj) 62 63 if self.TraceOn(): 64 print(retobj.GetOutput()) 65 66 self.expect(retobj, substrs=['abc def ghi'], exe=False) 67 68 @no_debug_info_test 69 def test_invalid_plugin_invocation(self): 70 self.expect("plugin load a b", 71 error=True, startstr="error: 'plugin load' requires one argument") 72 self.expect("plugin load", 73 error=True, startstr="error: 'plugin load' requires one argument") 74 75 @no_debug_info_test 76 def test_invalid_plugin_target(self): 77 self.expect("plugin load ThisIsNotAValidPluginName", 78 error=True, startstr="error: no such file") 79