Author: sammccall Date: Thu Aug 29 01:20:48 2019 New Revision: 370304 URL: http://llvm.org/viewvc/llvm-project?rev=370304&view=rev Log: Reland "[clangd] Migrate last tweak tests to TweakTesting.h and remove old helpers. NFC"
This reverts commit 3dcf55aa45bad800533b36b70a14ebeb2b84e219, and avoids use of multiline raw strings in macro calls. Modified: clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp Modified: clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp?rev=370304&r1=370303&r2=370304&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp (original) +++ clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp Thu Aug 29 01:20:48 2019 @@ -23,8 +23,6 @@ #include "gtest/gtest.h" #include <cassert> -using llvm::Failed; -using llvm::Succeeded; using ::testing::AllOf; using ::testing::HasSubstr; using ::testing::StartsWith; @@ -33,100 +31,6 @@ namespace clang { namespace clangd { namespace { -// FIXME(sammccall): migrate the rest of the tests to use TweakTesting.h and -// remove these helpers. -std::string markRange(llvm::StringRef Code, Range R) { - size_t Begin = llvm::cantFail(positionToOffset(Code, R.start)); - size_t End = llvm::cantFail(positionToOffset(Code, R.end)); - assert(Begin <= End); - if (Begin == End) // Mark a single point. - return (Code.substr(0, Begin) + "^" + Code.substr(Begin)).str(); - // Mark a range. - return (Code.substr(0, Begin) + "[[" + Code.substr(Begin, End - Begin) + - "]]" + Code.substr(End)) - .str(); -} - -void checkAvailable(StringRef ID, llvm::StringRef Input, bool Available) { - Annotations Code(Input); - ASSERT_TRUE(0 < Code.points().size() || 0 < Code.ranges().size()) - << "no points of interest specified"; - TestTU TU; - TU.Filename = "foo.cpp"; - TU.Code = Code.code(); - - ParsedAST AST = TU.build(); - - auto CheckOver = [&](Range Selection) { - unsigned Begin = cantFail(positionToOffset(Code.code(), Selection.start)); - unsigned End = cantFail(positionToOffset(Code.code(), Selection.end)); - auto T = prepareTweak(ID, Tweak::Selection(AST, Begin, End)); - if (Available) - EXPECT_THAT_EXPECTED(T, Succeeded()) - << "code is " << markRange(Code.code(), Selection); - else - EXPECT_THAT_EXPECTED(T, Failed()) - << "code is " << markRange(Code.code(), Selection); - }; - for (auto P : Code.points()) - CheckOver(Range{P, P}); - for (auto R : Code.ranges()) - CheckOver(R); -} - -/// Checks action is available at every point and range marked in \p Input. -void checkAvailable(StringRef ID, llvm::StringRef Input) { - return checkAvailable(ID, Input, /*Available=*/true); -} - -/// Same as checkAvailable, but checks the action is not available. -void checkNotAvailable(StringRef ID, llvm::StringRef Input) { - return checkAvailable(ID, Input, /*Available=*/false); -} - -llvm::Expected<Tweak::Effect> apply(StringRef ID, llvm::StringRef Input) { - Annotations Code(Input); - Range SelectionRng; - if (Code.points().size() != 0) { - assert(Code.ranges().size() == 0 && - "both a cursor point and a selection range were specified"); - SelectionRng = Range{Code.point(), Code.point()}; - } else { - SelectionRng = Code.range(); - } - TestTU TU; - TU.Filename = "foo.cpp"; - TU.Code = Code.code(); - - ParsedAST AST = TU.build(); - unsigned Begin = cantFail(positionToOffset(Code.code(), SelectionRng.start)); - unsigned End = cantFail(positionToOffset(Code.code(), SelectionRng.end)); - Tweak::Selection S(AST, Begin, End); - - auto T = prepareTweak(ID, S); - if (!T) - return T.takeError(); - return (*T)->apply(S); -} - -llvm::Expected<std::string> applyEdit(StringRef ID, llvm::StringRef Input) { - auto Effect = apply(ID, Input); - if (!Effect) - return Effect.takeError(); - if (!Effect->ApplyEdit) - return llvm::createStringError(llvm::inconvertibleErrorCode(), - "No replacements"); - Annotations Code(Input); - return applyAllReplacements(Code.code(), *Effect->ApplyEdit); -} - -void checkTransform(llvm::StringRef ID, llvm::StringRef Input, - std::string Output) { - auto Result = applyEdit(ID, Input); - ASSERT_TRUE(bool(Result)) << llvm::toString(Result.takeError()) << Input; - EXPECT_EQ(Output, std::string(*Result)) << Input; -} - TWEAK_TEST(SwapIfBranches); TEST_F(SwapIfBranchesTest, Test) { Context = Function; @@ -215,9 +119,9 @@ TEST_F(DumpRecordLayoutTest, Test) { AllOf(StartsWith("message:"), HasSubstr("0 | int x"))); } -TEST(TweaksTest, ExtractVariable) { - llvm::StringLiteral ID = "ExtractVariable"; - checkAvailable(ID, R"cpp( +TWEAK_TEST(ExtractVariable); +TEST_F(ExtractVariableTest, Test) { + const char *AvailableCases = R"cpp( int xyz(int a = 1) { struct T { int bar(int a = 1); @@ -255,16 +159,19 @@ TEST(TweaksTest, ExtractVariable) { a = [[1]]; while(a < [[3]]); } - )cpp"); - // Should not crash. - checkNotAvailable(ID, R"cpp( + )cpp"; + EXPECT_AVAILABLE(AvailableCases); + + const char *NoCrashCases = R"cpp( template<typename T, typename ...Args> struct Test<T, Args...> { Test(const T &v) :val[[(^]]) {} T val; }; - )cpp"); - checkNotAvailable(ID, R"cpp( + )cpp"; + EXPECT_UNAVAILABLE(NoCrashCases); + + const char *UnavailableCases = R"cpp( int xyz(int a = [[1]]) { struct T { int bar(int a = [[1]]); @@ -306,7 +213,9 @@ TEST(TweaksTest, ExtractVariable) { label: a = [[1]]; } - )cpp"); + )cpp"; + EXPECT_UNAVAILABLE(UnavailableCases); + // vector of pairs of input and output strings const std::vector<std::pair<llvm::StringLiteral, llvm::StringLiteral>> InputOutputs = { @@ -482,38 +391,28 @@ TEST(TweaksTest, ExtractVariable) { })cpp"}, }; for (const auto &IO : InputOutputs) { - checkTransform(ID, IO.first, IO.second); + EXPECT_EQ(IO.second, apply(IO.first)) << IO.first; } } -TEST(TweaksTest, AnnotateHighlightings) { - llvm::StringLiteral ID = "AnnotateHighlightings"; - checkAvailable(ID, "^vo^id^ ^f(^) {^}^"); // available everywhere. - checkAvailable(ID, "[[int a; int b;]]"); - const char *Input = "void ^f() {}"; - const char *Output = "/* storage.type.primitive.cpp */void /* entity.name.function.cpp */f() {}"; - checkTransform(ID, Input, Output); - - checkTransform(ID, - R"cpp( -[[void f1(); -void f2();]] -)cpp", - R"cpp( -/* storage.type.primitive.cpp */void /* entity.name.function.cpp */f1(); -/* storage.type.primitive.cpp */void /* entity.name.function.cpp */f2(); -)cpp"); - - checkTransform(ID, - R"cpp( -void f1(); -void f2() {^}; -)cpp", - - R"cpp( -void f1(); -/* storage.type.primitive.cpp */void /* entity.name.function.cpp */f2() {}; -)cpp"); +TWEAK_TEST(AnnotateHighlightings); +TEST_F(AnnotateHighlightingsTest, Test) { + EXPECT_AVAILABLE("^vo^id^ ^f(^) {^}^"); // available everywhere. + EXPECT_AVAILABLE("[[int a; int b;]]"); + EXPECT_EQ("/* storage.type.primitive.cpp */void " + "/* entity.name.function.cpp */f() {}", + apply("void ^f() {}")); + + EXPECT_EQ(apply("[[void f1(); void f2();]]"), + "/* storage.type.primitive.cpp */void " + "/* entity.name.function.cpp */f1(); " + "/* storage.type.primitive.cpp */void " + "/* entity.name.function.cpp */f2();"); + + EXPECT_EQ(apply("void f1(); void f2() {^}"), + "void f1(); " + "/* storage.type.primitive.cpp */void " + "/* entity.name.function.cpp */f2() {}"); } TWEAK_TEST(ExpandMacro); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits