summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/clangd/ClangdTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/unittests/clangd/ClangdTests.cpp')
-rw-r--r--clang-tools-extra/unittests/clangd/ClangdTests.cpp36
1 files changed, 34 insertions, 2 deletions
diff --git a/clang-tools-extra/unittests/clangd/ClangdTests.cpp b/clang-tools-extra/unittests/clangd/ClangdTests.cpp
index 224009ca47f..88b240ea5dc 100644
--- a/clang-tools-extra/unittests/clangd/ClangdTests.cpp
+++ b/clang-tools-extra/unittests/clangd/ClangdTests.cpp
@@ -12,6 +12,7 @@
#include "Matchers.h"
#include "SyncAPI.h"
#include "TestFS.h"
+#include "URI.h"
#include "clang/Config/config.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringMap.h"
@@ -100,8 +101,6 @@ std::string dumpASTWithoutMemoryLocs(ClangdServer &Server, PathRef File) {
return replacePtrsInDump(DumpWithMemLocs);
}
-} // namespace
-
class ClangdVFSTest : public ::testing::Test {
protected:
std::string parseSourceAndDumpAST(
@@ -819,5 +818,38 @@ int d;
ASSERT_EQ(DiagConsumer.Count, 2); // Sanity check - we actually ran both?
}
+TEST_F(ClangdVFSTest, InsertIncludes) {
+ MockFSProvider FS;
+ ErrorCheckingDiagConsumer DiagConsumer;
+ MockCompilationDatabase CDB;
+ ClangdServer Server(CDB, DiagConsumer, FS,
+ /*AsyncThreadsCount=*/0,
+ /*StorePreamblesInMemory=*/true);
+
+ // No need to sync reparses, because reparses are performed on the calling
+ // thread.
+ auto FooCpp = testPath("foo.cpp");
+ const auto Code = R"cpp(
+#include "x.h"
+
+void f() {}
+)cpp";
+ FS.Files[FooCpp] = Code;
+ Server.addDocument(FooCpp, Code);
+
+ auto Inserted = [&](llvm::StringRef Header, llvm::StringRef Expected) {
+ auto Replaces = Server.insertInclude(FooCpp, Code, Header);
+ EXPECT_TRUE(static_cast<bool>(Replaces));
+ auto Changed = tooling::applyAllReplacements(Code, *Replaces);
+ EXPECT_TRUE(static_cast<bool>(Changed));
+ return llvm::StringRef(*Changed).contains(
+ (llvm::Twine("#include ") + Expected + "").str());
+ };
+
+ EXPECT_TRUE(Inserted("\"y.h\"", "\"y.h\""));
+ EXPECT_TRUE(Inserted("<string>", "<string>"));
+}
+
+} // namespace
} // namespace clangd
} // namespace clang
OpenPOWER on IntegriCloud