Deduplicate sets of replacements by file names.
Summary:
If there are multiple <File, Replacements> pairs with the same file
path after removing dots, we only keep one pair (with path after dots being
removed) and discard the rest.
Reviewers: djasper
Subscribers: klimek, hokein, bkramer, cfe-commits
Differential Revision: https://reviews.llvm.org/D25565
llvm-svn: 284219
diff --git a/clang/unittests/Tooling/RefactoringTest.cpp b/clang/unittests/Tooling/RefactoringTest.cpp
index 0a70a11..bf50b7d 100644
--- a/clang/unittests/Tooling/RefactoringTest.cpp
+++ b/clang/unittests/Tooling/RefactoringTest.cpp
@@ -972,5 +972,23 @@
toReplacements({{"", 0, 3, "cc"}, {"", 3, 3, "dd"}}));
}
+TEST(DeduplicateByFileTest, LeaveLeadingDotDot) {
+ std::map<std::string, Replacements> FileToReplaces;
+ FileToReplaces["../../a/b/.././c.h"] = Replacements();
+ FileToReplaces["../../a/c.h"] = Replacements();
+ FileToReplaces = groupReplacementsByFile(FileToReplaces);
+ EXPECT_EQ(1u, FileToReplaces.size());
+ EXPECT_EQ("../../a/c.h", FileToReplaces.begin()->first);
+}
+
+TEST(DeduplicateByFileTest, RemoveDotSlash) {
+ std::map<std::string, Replacements> FileToReplaces;
+ FileToReplaces["./a/b/.././c.h"] = Replacements();
+ FileToReplaces["a/c.h"] = Replacements();
+ FileToReplaces = groupReplacementsByFile(FileToReplaces);
+ EXPECT_EQ(1u, FileToReplaces.size());
+ EXPECT_EQ("a/c.h", FileToReplaces.begin()->first);
+}
+
} // end namespace tooling
} // end namespace clang