@@ -1410,3 +1410,52 @@ TEST_F(LibclangRewriteTest, RewriteRemove) {
14101410 ASSERT_EQ (clang_CXRewriter_overwriteChangedFiles (Rew), 0 );
14111411 EXPECT_EQ (getFileContent (Filename), " int () { return 0; }" );
14121412}
1413+
1414+ TEST_F (LibclangParseTest, FileEqual) {
1415+ std::string AInc = " a.inc" , BInc = " b.inc" , Main = " main.cpp" ;
1416+ WriteFile (Main, " int a[] = {\n "
1417+ " #include \" a.inc\"\n "
1418+ " };\n "
1419+ " int b[] = {\n "
1420+ " #include \" b.inc\"\n "
1421+ " };" );
1422+ WriteFile (AInc, " 1,2,3" );
1423+ WriteFile (BInc, " 1,2,3" );
1424+
1425+ ClangTU = clang_parseTranslationUnit (Index, Main.c_str (), nullptr , 0 , nullptr ,
1426+ 0 , TUFlags);
1427+
1428+ CXFile AFile = clang_getFile (ClangTU, AInc.c_str ()),
1429+ AFile2 = clang_getFile (ClangTU, AInc.c_str ()),
1430+ BFile = clang_getFile (ClangTU, BInc.c_str ()),
1431+ MainFile = clang_getFile (ClangTU, Main.c_str ());
1432+
1433+ ASSERT_FALSE (clang_File_isEqual (MainFile, AFile));
1434+ ASSERT_FALSE (clang_File_isEqual (AFile, BFile));
1435+ ASSERT_TRUE (clang_File_isEqual (AFile, AFile2));
1436+ }
1437+
1438+ TEST_F (LibclangParseTest, FileEqualInMemory) {
1439+ std::string AInc = " a.inc" , BInc = " b.inc" , Main = " main.cpp" ;
1440+ MapUnsavedFile (Main, " int a[] = {\n "
1441+ " #include \" a.inc\"\n "
1442+ " };\n "
1443+ " int b[] = {\n "
1444+ " #include \" b.inc\"\n "
1445+ " };" );
1446+ MapUnsavedFile (AInc, " 1,2,3" );
1447+ MapUnsavedFile (BInc, " 1,2,3" );
1448+
1449+ ClangTU = clang_parseTranslationUnit (Index, UnsavedFiles[0 ].Filename , nullptr ,
1450+ 0 , &UnsavedFiles.front (),
1451+ UnsavedFiles.size (), TUFlags);
1452+
1453+ CXFile AFile = clang_getFile (ClangTU, UnsavedFiles[1 ].Filename ),
1454+ AFile2 = clang_getFile (ClangTU, UnsavedFiles[1 ].Filename ),
1455+ BFile = clang_getFile (ClangTU, UnsavedFiles[2 ].Filename ),
1456+ MainFile = clang_getFile (ClangTU, UnsavedFiles[0 ].Filename );
1457+
1458+ ASSERT_FALSE (clang_File_isEqual (MainFile, AFile));
1459+ ASSERT_FALSE (clang_File_isEqual (AFile, BFile));
1460+ ASSERT_TRUE (clang_File_isEqual (AFile, AFile2));
1461+ }
0 commit comments