diff --git a/lldb/bindings/interface/SBFileSpecExtensions.i b/lldb/bindings/interface/SBFileSpecExtensions.i index e2c81e6b0f8b..d4a0839b8f48 100644 --- a/lldb/bindings/interface/SBFileSpecExtensions.i +++ b/lldb/bindings/interface/SBFileSpecExtensions.i @@ -6,8 +6,19 @@ STRING_EXTENSION_OUTSIDE(SBFileSpec) # operator== is a free function, which swig does not handle, so we inject # our own equality operator here def __eq__(self, other): + if isinstance(other, str): + other = SBFileSpec(other) + if not isinstance(other, SBFileSpec): + return NotImplemented return not self.__ne__(other) + def __ne__(self, other): + if isinstance(other, str): + other = SBFileSpec(other) + if not isinstance(other, SBFileSpec): + return NotImplemented + return _lldb.SBFileSpec___ne__(self, other) + fullpath = property(str, None, doc='''A read only property that returns the fullpath as a python string.''') basename = property(GetFilename, None, doc='''A read only property that returns the path basename as a python string.''') dirname = property(GetDirectory, None, doc='''A read only property that returns the path directory name as a python string.''') diff --git a/lldb/test/API/python_api/filespec/TestFileSpecAPI.py b/lldb/test/API/python_api/filespec/TestFileSpecAPI.py new file mode 100644 index 000000000000..48ceb9a98196 --- /dev/null +++ b/lldb/test/API/python_api/filespec/TestFileSpecAPI.py @@ -0,0 +1,35 @@ +""" +Test SBFileSpec APIs, with emphasis on equality comparisons against strings. +""" + +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * + + +class FileSpecAPITestCase(TestBase): + NO_DEBUG_INFO_TESTCASE = True + + def test_filespec_eq(self): + """Test SBFileSpec equality comparisons.""" + empty = lldb.SBFileSpec() + self.assertTrue(empty == lldb.SBFileSpec()) + self.assertTrue(empty == "") + self.assertTrue(empty == lldb.SBFileSpec("")) + self.assertFalse(empty != "") + self.assertTrue(not empty) + self.assertFalse(empty is None) + + def test_filespec_eq_path(self): + """Test SBFileSpec equality with non-empty path strings.""" + spec = lldb.SBFileSpec("/a/b") + self.assertTrue(spec == "/a/b") + self.assertFalse(spec == "/a/c") + self.assertFalse(spec != "/a/b") + self.assertTrue(spec != "/a/c") + + def test_filespec_eq_other_type(self): + """Test SBFileSpec equality with unsupported types returns False.""" + spec = lldb.SBFileSpec() + self.assertFalse(spec == 42) + self.assertFalse(spec == [])