Fix and rename the broken and confusingly named decorator skipIfHostIncompatibleWithRemote. The decorator is meant to skip test which uses the inferior test build system (i.e. to build test inferiors) to build host binaries (e.g. lldb drivers). The decorator was broken on macOS, where the host and target platform report macosx, but the decorator overwrote it with Darwin, resulting in tests incorrectly being skipped. The decorator was also missing on a handful of tests that use the buildDriver helper, which this commit fixes as well.
81 lines
2.3 KiB
Python
81 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
|
|
@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",
|
|
)
|