[clang] [libclang/python] Add equality comparison operators for File (PR #130383)
Jannick Kremer via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 24 06:13:15 PDT 2025
================
@@ -16,3 +17,76 @@ def test_file(self):
self.assertEqual(str(file), "t.c")
self.assertEqual(file.name, "t.c")
self.assertEqual(repr(file), "<File: t.c>")
+
+ def test_file_eq(self):
+ path = os.path.join(inputs_dir, "hello.cpp")
+ header_path = os.path.join(inputs_dir, "header3.h")
+ tu = TranslationUnit.from_source(path)
+ file1 = File.from_name(tu, path)
+ file2 = File.from_name(tu, header_path)
+ file2_2 = File.from_name(tu, header_path)
+
+ self.assertEqual(file1, file1)
+ self.assertEqual(file2, file2_2)
+ self.assertNotEqual(file1, file2)
+ self.assertNotEqual(file1, "t.c")
+
+ def test_file_eq_failing(self):
+ index = Index.create()
+ tu = index.parse(
+ "t.c",
+ unsaved_files=[
+ ("t.c", "int a = 729;"),
+ ("s.c", "int a = 729;"),
+ ],
+ )
+ file1 = File.from_name(tu, "t.c")
+ file2 = File.from_name(tu, "s.c")
+ # FIXME: These files are not supposed to be equal
+ self.assertEqual(file1, file2)
+
+ def test_file_eq_failing_2(self):
+ index = Index.create()
+ tu = index.parse(
+ "t.c",
+ unsaved_files=[
+ ("t.c", "int a = 729;"),
+ ("s.c", "int a = 728;"),
+ ],
+ )
+ file1 = File.from_name(tu, "t.c")
+ file2 = File.from_name(tu, "s.c")
+ # FIXME: These files are not supposed to be equal
+ self.assertEqual(file1, file2)
+
+ def test_file_eq_failing_3(self):
+ index = Index.create()
+ tu = index.parse(
+ "t.c",
+ unsaved_files=[
+ ("t.c", '#include "a.c"\n#include "b.c";'),
+ ("a.c", "int a = 729;"),
+ ("b.c", "int b = 729;"),
+ ],
+ )
+ file1 = File.from_name(tu, "t.c")
+ file2 = File.from_name(tu, "a.c")
+ file3 = File.from_name(tu, "b.c")
+ # FIXME: These files are not supposed to be equal
+ self.assertEqual(file2, file3)
+ self.assertEqual(file1, file2)
+ self.assertEqual(file1, file3)
+
+ def test_file_eq_failing_4(self):
+ path = os.path.join(inputs_dir, "testfile.c")
+ path_a = os.path.join(inputs_dir, "a.inc")
+ path_b = os.path.join(inputs_dir, "b.inc")
+ tu = TranslationUnit.from_source(path)
+ print(tu.spelling, tu.cursor.spelling)
+ file1 = File.from_name(tu, path)
+ file2 = File.from_name(tu, path_a)
+ file3 = File.from_name(tu, path_b)
+ # FIXME: These files are not supposed to be equal
+ self.assertEqual(file2, file3)
+ self.assertEqual(file1, file2)
+ self.assertEqual(file1, file3)
----------------
DeinAlptraum wrote:
@AaronBallman take a look at the tests I wrote here. At least in the CI, only the last one is actually failing. From the first three, it looks like _all in-memory files_ are considered equal, but `test_file_eq_failing_4` which reads them from disk doesn't have that problem.
Even weirder, all four of these tests fail when I run them locally.
https://github.com/llvm/llvm-project/pull/130383
More information about the cfe-commits
mailing list