Files
clang-p2996/lldb/test/API/functionalities/plugins/command_plugin/TestPluginCommands.py
Jordan Rupprecht 8be41c787f [test] Allow skipTestIfFn to apply to entire classes for skipIfNoSBHeaders
Some test cases are already marked @skipIfNoSBHeaders, but they make use of SBAPI headers in test setup. The setup will fail if the headers are missing, so it is too late to wait until the test case to apply the skip annotation.

In addition to allowing this to apply to entire classes, I also changed all the existing annotations from test cases to test classes where necessary/appropriate.

Reviewed By: DavidSpickett

Differential Revision: https://reviews.llvm.org/D138181
2022-11-17 08:17:10 -08:00

72 lines
2.3 KiB
Python

"""
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
# 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."""
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")