diff options
author | Eric Liu <ioeric@google.com> | 2016-08-01 10:16:37 +0000 |
---|---|---|
committer | Eric Liu <ioeric@google.com> | 2016-08-01 10:16:37 +0000 |
commit | 40ef2fb363bcd89cb4a88157f5fa97a38d795a1f (patch) | |
tree | 0817f1606ccb51b55370c8b10346d519be9aec97 /clang/unittests/Format | |
parent | 5c9583981b5e73ac42d224ec97bd8470a384da26 (diff) | |
download | bcm5719-llvm-40ef2fb363bcd89cb4a88157f5fa97a38d795a1f.tar.gz bcm5719-llvm-40ef2fb363bcd89cb4a88157f5fa97a38d795a1f.zip |
Implement tooling::Replacements as a class.
Summary:
- Implement clang::tooling::Replacements as a class to provide interfaces to
control how replacements for a single file are combined and provide guarantee
on the order of replacements being applied.
- tooling::Replacements only contains replacements for the same file now.
Use std::map<std::string, tooling::Replacements> to represent multi-file
replacements.
- Error handling for the interface change will be improved in followup patches.
Reviewers: djasper, klimek
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D21748
llvm-svn: 277335
Diffstat (limited to 'clang/unittests/Format')
-rw-r--r-- | clang/unittests/Format/CleanupTest.cpp | 126 | ||||
-rw-r--r-- | clang/unittests/Format/FormatTest.cpp | 40 |
2 files changed, 91 insertions, 75 deletions
diff --git a/clang/unittests/Format/CleanupTest.cpp b/clang/unittests/Format/CleanupTest.cpp index 5f85c53b780..cb1c742fecb 100644 --- a/clang/unittests/Format/CleanupTest.cpp +++ b/clang/unittests/Format/CleanupTest.cpp @@ -9,11 +9,15 @@ #include "clang/Format/Format.h" +#include "../Tooling/ReplacementTest.h" #include "../Tooling/RewriterTestContext.h" #include "clang/Tooling/Core/Replacement.h" #include "gtest/gtest.h" +using clang::tooling::ReplacementTest; +using clang::tooling::toReplacements; + namespace clang { namespace format { namespace { @@ -241,7 +245,7 @@ TEST_F(CleanupTest, CtorInitializerInNamespace) { EXPECT_EQ(Expected, Result); } -class CleanUpReplacementsTest : public ::testing::Test { +class CleanUpReplacementsTest : public ReplacementTest { protected: tooling::Replacement createReplacement(unsigned Offset, unsigned Length, StringRef Text) { @@ -304,9 +308,9 @@ TEST_F(CleanUpReplacementsTest, FixOnlyAffectedCodeAfterReplacements) { "namespace D { int i; }\n\n" "int x= 0;" "}"; - tooling::Replacements Replaces = { - createReplacement(getOffset(Code, 3, 3), 6, ""), - createReplacement(getOffset(Code, 9, 34), 6, "")}; + tooling::Replacements Replaces = + toReplacements({createReplacement(getOffset(Code, 3, 3), 6, ""), + createReplacement(getOffset(Code, 9, 34), 6, "")}); EXPECT_EQ(Expected, formatAndApply(Code, Replaces)); } @@ -315,7 +319,8 @@ TEST_F(CleanUpReplacementsTest, NoExistingIncludeWithoutDefine) { std::string Code = "int main() {}"; std::string Expected = "#include \"a.h\"\n" "int main() {}"; - tooling::Replacements Replaces = {createInsertion("#include \"a.h\"")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include \"a.h\"")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -332,7 +337,8 @@ TEST_F(CleanUpReplacementsTest, NoExistingIncludeWithDefine) { "#define MMM 123\n" "#endif"; - tooling::Replacements Replaces = {createInsertion("#include \"b.h\"")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include \"b.h\"")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -357,7 +363,8 @@ TEST_F(CleanUpReplacementsTest, InsertBeforeCategoryWithLowerPriority) { "#define MMM 123\n" "#endif"; - tooling::Replacements Replaces = {createInsertion("#include \"a.h\"")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include \"a.h\"")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -369,7 +376,8 @@ TEST_F(CleanUpReplacementsTest, InsertAfterMainHeader) { "#include <a>\n" "\n" "int main() {}"; - tooling::Replacements Replaces = {createInsertion("#include <a>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <a>")}); Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -382,7 +390,8 @@ TEST_F(CleanUpReplacementsTest, InsertBeforeSystemHeaderLLVM) { "#include <memory>\n" "\n" "int main() {}"; - tooling::Replacements Replaces = {createInsertion("#include \"z.h\"")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include \"z.h\"")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -394,7 +403,8 @@ TEST_F(CleanUpReplacementsTest, InsertAfterSystemHeaderGoogle) { "#include \"z.h\"\n" "\n" "int main() {}"; - tooling::Replacements Replaces = {createInsertion("#include \"z.h\"")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include \"z.h\"")}); Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -412,8 +422,9 @@ TEST_F(CleanUpReplacementsTest, InsertOneIncludeLLVMStyle) { "#include \"clang/Format/Format.h\"\n" "#include \"llvm/x/y.h\"\n" "#include <memory>\n"; - tooling::Replacements Replaces = {createInsertion("#include \"d.h\""), - createInsertion("#include \"llvm/x/y.h\"")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include \"d.h\""), + createInsertion("#include \"llvm/x/y.h\"")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -430,8 +441,9 @@ TEST_F(CleanUpReplacementsTest, InsertMultipleIncludesLLVMStyle) { "#include \"clang/Format/Format.h\"\n" "#include <memory>\n" "#include <list>\n"; - tooling::Replacements Replaces = {createInsertion("#include <list>"), - createInsertion("#include \"new/new.h\"")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <list>"), + createInsertion("#include \"new/new.h\"")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -447,7 +459,8 @@ TEST_F(CleanUpReplacementsTest, InsertNewSystemIncludeGoogleStyle) { "\n" "#include \"y/a.h\"\n" "#include \"z/b.h\"\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -467,8 +480,9 @@ TEST_F(CleanUpReplacementsTest, InsertMultipleIncludesGoogleStyle) { "#include \"y/a.h\"\n" "#include \"z/b.h\"\n" "#include \"x/x.h\"\n"; - tooling::Replacements Replaces = {createInsertion("#include <list>"), - createInsertion("#include \"x/x.h\"")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <list>"), + createInsertion("#include \"x/x.h\"")}); Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -482,12 +496,11 @@ TEST_F(CleanUpReplacementsTest, InsertMultipleNewHeadersAndSortLLVM) { "#include <list>\n" "#include <vector>\n" "int x;"; - tooling::Replacements Replaces = {createInsertion("#include \"a.h\""), - createInsertion("#include \"c.h\""), - createInsertion("#include \"b.h\""), - createInsertion("#include <vector>"), - createInsertion("#include <list>"), - createInsertion("#include \"fix.h\"")}; + tooling::Replacements Replaces = toReplacements( + {createInsertion("#include \"a.h\""), createInsertion("#include \"c.h\""), + createInsertion("#include \"b.h\""), + createInsertion("#include <vector>"), createInsertion("#include <list>"), + createInsertion("#include \"fix.h\"")}); EXPECT_EQ(Expected, formatAndApply(Code, Replaces)); } @@ -500,12 +513,11 @@ TEST_F(CleanUpReplacementsTest, InsertMultipleNewHeadersAndSortGoogle) { "#include \"b.h\"\n" "#include \"c.h\"\n" "int x;"; - tooling::Replacements Replaces = {createInsertion("#include \"a.h\""), - createInsertion("#include \"c.h\""), - createInsertion("#include \"b.h\""), - createInsertion("#include <vector>"), - createInsertion("#include <list>"), - createInsertion("#include \"fix.h\"")}; + tooling::Replacements Replaces = toReplacements( + {createInsertion("#include \"a.h\""), createInsertion("#include \"c.h\""), + createInsertion("#include \"b.h\""), + createInsertion("#include <vector>"), createInsertion("#include <list>"), + createInsertion("#include \"fix.h\"")}); Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp); EXPECT_EQ(Expected, formatAndApply(Code, Replaces)); } @@ -526,13 +538,12 @@ TEST_F(CleanUpReplacementsTest, FormatCorrectLineWhenHeadersAreInserted) { "int a;\n" "int b;\n" "int a;"; - tooling::Replacements Replaces = { - createReplacement(getOffset(Code, 4, 8), 1, "b"), - createInsertion("#include <vector>"), - createInsertion("#include <list>"), - createInsertion("#include \"clang/x/x.h\""), - createInsertion("#include \"y.h\""), - createInsertion("#include \"x.h\"")}; + tooling::Replacements Replaces = toReplacements( + {createReplacement(getOffset(Code, 4, 8), 1, "b"), + createInsertion("#include <vector>"), createInsertion("#include <list>"), + createInsertion("#include \"clang/x/x.h\""), + createInsertion("#include \"y.h\""), + createInsertion("#include \"x.h\"")}); EXPECT_EQ(Expected, formatAndApply(Code, Replaces)); } @@ -544,7 +555,8 @@ TEST_F(CleanUpReplacementsTest, NotConfusedByDefine) { "void f() {}\n" "#define A \\\n" " int i;"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); EXPECT_EQ(Expected, formatAndApply(Code, Replaces)); } @@ -556,7 +568,8 @@ TEST_F(CleanUpReplacementsTest, SkippedTopComment) { "\n" " // comment\n" "#include <vector>\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -574,7 +587,8 @@ TEST_F(CleanUpReplacementsTest, SkippedMixedComments) { "* comment\n" "*/\n" "#include <vector>\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -592,7 +606,8 @@ TEST_F(CleanUpReplacementsTest, MultipleBlockCommentsInOneLine) { "\n\n" "/* c1 */ /*c2 */\n" "#include <vector>\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -614,7 +629,8 @@ TEST_F(CleanUpReplacementsTest, CodeAfterComments) { "\n" "#include <vector>\n" "int x;\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -626,7 +642,8 @@ TEST_F(CleanUpReplacementsTest, FakeHeaderGuardIfDef) { "#include <vector>\n" "#ifdef X\n" "#define X\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -642,7 +659,8 @@ TEST_F(CleanUpReplacementsTest, RealHeaderGuardAfterComments) { "#include <vector>\n" "int x;\n" "#define Y 1\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -656,7 +674,8 @@ TEST_F(CleanUpReplacementsTest, IfNDefWithNoDefine) { "#ifndef X\n" "int x;\n" "#define Y 1\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -678,14 +697,16 @@ TEST_F(CleanUpReplacementsTest, HeaderGuardWithComment) { "#include <vector>\n" "int x;\n" "#define Y 1\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } TEST_F(CleanUpReplacementsTest, EmptyCode) { std::string Code = ""; std::string Expected = "#include <vector>\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -694,7 +715,8 @@ TEST_F(CleanUpReplacementsTest, EmptyCode) { TEST_F(CleanUpReplacementsTest, NoNewLineAtTheEndOfCode) { std::string Code = "#include <map>"; std::string Expected = "#include <map>#include <vector>\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -703,8 +725,9 @@ TEST_F(CleanUpReplacementsTest, SkipExistingHeaders) { "#include <vector>\n"; std::string Expected = "#include \"a.h\"\n" "#include <vector>\n"; - tooling::Replacements Replaces = {createInsertion("#include <vector>"), - createInsertion("#include \"a.h\"")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include <vector>"), + createInsertion("#include \"a.h\"")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } @@ -716,8 +739,9 @@ TEST_F(CleanUpReplacementsTest, AddIncludesWithDifferentForms) { "#include \"vector\"\n" "#include <vector>\n" "#include <a.h>\n"; - tooling::Replacements Replaces = {createInsertion("#include \"vector\""), - createInsertion("#include <a.h>")}; + tooling::Replacements Replaces = + toReplacements({createInsertion("#include \"vector\""), + createInsertion("#include <a.h>")}); EXPECT_EQ(Expected, apply(Code, Replaces)); } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index a3e4d3edfff..f2b5bd6a816 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -9,7 +9,7 @@ #include "clang/Format/Format.h" -#include "../Tooling/RewriterTestContext.h" +#include "../Tooling/ReplacementTest.h" #include "FormatTestUtils.h" #include "clang/Frontend/TextDiagnosticPrinter.h" @@ -19,6 +19,9 @@ #define DEBUG_TYPE "format-test" +using clang::tooling::ReplacementTest; +using clang::tooling::toReplacements; + namespace clang { namespace format { namespace { @@ -11520,17 +11523,6 @@ TEST(FormatStyle, GetStyleOfFile) { #endif // _MSC_VER -class ReplacementTest : public ::testing::Test { -protected: - tooling::Replacement createReplacement(SourceLocation Start, unsigned Length, - llvm::StringRef ReplacementText) { - return tooling::Replacement(Context.Sources, Start, Length, - ReplacementText); - } - - RewriterTestContext Context; -}; - TEST_F(ReplacementTest, FormatCodeAfterReplacements) { // Column limit is 20. std::string Code = "Type *a =\n" @@ -11545,15 +11537,15 @@ TEST_F(ReplacementTest, FormatCodeAfterReplacements) { " mm);\n" "int bad = format ;"; FileID ID = Context.createInMemoryFile("format.cpp", Code); - tooling::Replacements Replaces; - Replaces.insert(tooling::Replacement( - Context.Sources, Context.getLocation(ID, 1, 1), 6, "auto ")); - Replaces.insert(tooling::Replacement( - Context.Sources, Context.getLocation(ID, 3, 10), 1, "nullptr")); - Replaces.insert(tooling::Replacement( - Context.Sources, Context.getLocation(ID, 4, 3), 1, "nullptr")); - Replaces.insert(tooling::Replacement( - Context.Sources, Context.getLocation(ID, 4, 13), 1, "nullptr")); + tooling::Replacements Replaces = toReplacements( + {tooling::Replacement(Context.Sources, Context.getLocation(ID, 1, 1), 6, + "auto "), + tooling::Replacement(Context.Sources, Context.getLocation(ID, 3, 10), 1, + "nullptr"), + tooling::Replacement(Context.Sources, Context.getLocation(ID, 4, 3), 1, + "nullptr"), + tooling::Replacement(Context.Sources, Context.getLocation(ID, 4, 13), 1, + "nullptr")}); format::FormatStyle Style = format::getLLVMStyle(); Style.ColumnLimit = 20; // Set column limit to 20 to increase readibility. @@ -11580,9 +11572,9 @@ TEST_F(ReplacementTest, SortIncludesAfterReplacement) { " return 0;\n" "}"; FileID ID = Context.createInMemoryFile("fix.cpp", Code); - tooling::Replacements Replaces; - Replaces.insert(tooling::Replacement( - Context.Sources, Context.getLocation(ID, 1, 1), 0, "#include \"b.h\"\n")); + tooling::Replacements Replaces = toReplacements( + {tooling::Replacement(Context.Sources, Context.getLocation(ID, 1, 1), 0, + "#include \"b.h\"\n")}); format::FormatStyle Style = format::getLLVMStyle(); Style.SortIncludes = true; |