diff options
author | Jannick Kremer <jannick.kremer@mailbox.org> | 2025-04-23 18:41:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-23 18:41:29 +0200 |
commit | d7215c0ee2e4bca1ce87b956335ef6a2cddaf16f (patch) | |
tree | b0c7e24eaabae3f97af827e57292f79bd799b641 /clang/unittests/libclang/LibclangTest.cpp | |
parent | ea5449ddd5d03da034eccb80e5ba1e44ee02e243 (diff) | |
download | llvm-d7215c0ee2e4bca1ce87b956335ef6a2cddaf16f.zip llvm-d7215c0ee2e4bca1ce87b956335ef6a2cddaf16f.tar.gz llvm-d7215c0ee2e4bca1ce87b956335ef6a2cddaf16f.tar.bz2 |
[libclang/C++] Fix clang_File_isEqual for in-memory files (#135773)
Add tests for `clang_File_isEqual` (on-disk and in-memory)
Diffstat (limited to 'clang/unittests/libclang/LibclangTest.cpp')
-rw-r--r-- | clang/unittests/libclang/LibclangTest.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/clang/unittests/libclang/LibclangTest.cpp b/clang/unittests/libclang/LibclangTest.cpp index 6de4d02..b2a87d2 100644 --- a/clang/unittests/libclang/LibclangTest.cpp +++ b/clang/unittests/libclang/LibclangTest.cpp @@ -1410,3 +1410,52 @@ TEST_F(LibclangRewriteTest, RewriteRemove) { ASSERT_EQ(clang_CXRewriter_overwriteChangedFiles(Rew), 0); EXPECT_EQ(getFileContent(Filename), "int () { return 0; }"); } + +TEST_F(LibclangParseTest, FileEqual) { + std::string AInc = "a.inc", BInc = "b.inc", Main = "main.cpp"; + WriteFile(Main, "int a[] = {\n" + " #include \"a.inc\"\n" + "};\n" + "int b[] = {\n" + " #include \"b.inc\"\n" + "};"); + WriteFile(AInc, "1,2,3"); + WriteFile(BInc, "1,2,3"); + + ClangTU = clang_parseTranslationUnit(Index, Main.c_str(), nullptr, 0, nullptr, + 0, TUFlags); + + CXFile AFile = clang_getFile(ClangTU, AInc.c_str()), + AFile2 = clang_getFile(ClangTU, AInc.c_str()), + BFile = clang_getFile(ClangTU, BInc.c_str()), + MainFile = clang_getFile(ClangTU, Main.c_str()); + + ASSERT_FALSE(clang_File_isEqual(MainFile, AFile)); + ASSERT_FALSE(clang_File_isEqual(AFile, BFile)); + ASSERT_TRUE(clang_File_isEqual(AFile, AFile2)); +} + +TEST_F(LibclangParseTest, FileEqualInMemory) { + std::string AInc = "a.inc", BInc = "b.inc", Main = "main.cpp"; + MapUnsavedFile(Main, "int a[] = {\n" + " #include \"a.inc\"\n" + "};\n" + "int b[] = {\n" + " #include \"b.inc\"\n" + "};"); + MapUnsavedFile(AInc, "1,2,3"); + MapUnsavedFile(BInc, "1,2,3"); + + ClangTU = clang_parseTranslationUnit(Index, UnsavedFiles[0].Filename, nullptr, + 0, &UnsavedFiles.front(), + UnsavedFiles.size(), TUFlags); + + CXFile AFile = clang_getFile(ClangTU, UnsavedFiles[1].Filename), + AFile2 = clang_getFile(ClangTU, UnsavedFiles[1].Filename), + BFile = clang_getFile(ClangTU, UnsavedFiles[2].Filename), + MainFile = clang_getFile(ClangTU, UnsavedFiles[0].Filename); + + ASSERT_FALSE(clang_File_isEqual(MainFile, AFile)); + ASSERT_FALSE(clang_File_isEqual(AFile, BFile)); + ASSERT_TRUE(clang_File_isEqual(AFile, AFile2)); +} |