aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp')
-rw-r--r--clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp b/clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp
index 81e65ed..c26fc21 100644
--- a/clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp
+++ b/clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp
@@ -162,5 +162,37 @@ std::string TweakTest::decorate(llvm::StringRef Code,
.str();
}
+// TODO: Reuse more code between TweakTest::apply() and
+// TweakWorkspaceTest::apply().
+TweakResult
+TweakWorkspaceTest::apply(StringRef InvocationFile,
+ llvm::Annotations::Range InvocationRange) {
+ auto AST = Workspace.openFile(InvocationFile);
+ if (!AST) {
+ ADD_FAILURE() << "No file '" << InvocationFile << "' in workspace";
+ return TweakResult{"failed to setup"};
+ }
+
+ auto Index = Workspace.index();
+ auto Result = applyTweak(
+ *AST, InvocationRange, TweakID, Index.get(),
+ &AST->getSourceManager().getFileManager().getVirtualFileSystem());
+ if (!Result)
+ return TweakResult{"unavailable"};
+ if (!*Result)
+ return TweakResult{"fail: " + llvm::toString(Result->takeError())};
+ const auto &Effect = **Result;
+ if ((*Result)->ShowMessage)
+ return TweakResult{"message:\n" + *Effect.ShowMessage};
+
+ TweakResult Retval{"success"};
+ for (auto &It : Effect.ApplyEdits) {
+ auto NewText = It.second.apply();
+ if (!NewText)
+ return TweakResult{"bad edits: " + llvm::toString(NewText.takeError())};
+ Retval.EditedFiles.insert_or_assign(It.first(), *NewText);
+ }
+ return Retval;
+}
} // namespace clangd
} // namespace clang