summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/unittests
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/unittests')
-rw-r--r--clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp38
-rw-r--r--clang-tools-extra/clangd/unittests/SyncAPI.cpp7
-rw-r--r--clang-tools-extra/clangd/unittests/SyncAPI.h3
3 files changed, 48 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp b/clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
index cd29da2a43d..b9ca0273a82 100644
--- a/clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
+++ b/clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
@@ -7,10 +7,13 @@
//===----------------------------------------------------------------------===//
#include "Annotations.h"
+#include "ClangdServer.h"
#include "Matchers.h"
#include "Protocol.h"
#include "SemanticSelection.h"
#include "SourceCode.h"
+#include "SyncAPI.h"
+#include "TestFS.h"
#include "TestTU.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/SourceManager.h"
@@ -23,6 +26,11 @@ namespace clangd {
namespace {
using ::testing::ElementsAreArray;
+class IgnoreDiagnostics : public DiagnosticsConsumer {
+ void onDiagnosticsReady(PathRef File,
+ std::vector<Diag> Diagnostics) override {}
+};
+
TEST(SemanticSelection, All) {
const char *Tests[] = {
R"cpp( // Single statement in a function body.
@@ -138,6 +146,36 @@ TEST(SemanticSelection, All) {
<< Test;
}
}
+
+TEST(SemanticSelection, RunViaClangDServer) {
+ MockFSProvider FS;
+ IgnoreDiagnostics DiagConsumer;
+ MockCompilationDatabase CDB;
+ ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
+
+ auto FooH = testPath("foo.h");
+ FS.Files[FooH] = R"cpp(
+ int foo(int x);
+ #define HASH(x) ((x) % 10)
+ )cpp";
+
+ auto FooCpp = testPath("Foo.cpp");
+ const char *SourceContents = R"cpp(
+ #include "foo.h"
+ [[void bar(int& inp) [[{
+ // inp = HASH(foo(inp));
+ [[inp = [[HASH([[foo([[in^p]])]])]]]];
+ }]]]]
+ )cpp";
+ Annotations SourceAnnotations(SourceContents);
+ FS.Files[FooCpp] = SourceAnnotations.code();
+ Server.addDocument(FooCpp, SourceAnnotations.code());
+
+ auto Ranges = runSemanticRanges(Server, FooCpp, SourceAnnotations.point());
+ ASSERT_TRUE(bool(Ranges))
+ << "getSemanticRange returned an error: " << Ranges.takeError();
+ EXPECT_THAT(*Ranges, ElementsAreArray(SourceAnnotations.ranges()));
+}
} // namespace
} // namespace clangd
} // namespace clang
diff --git a/clang-tools-extra/clangd/unittests/SyncAPI.cpp b/clang-tools-extra/clangd/unittests/SyncAPI.cpp
index af9ef9ffa1e..ac7c2dcabbd 100644
--- a/clang-tools-extra/clangd/unittests/SyncAPI.cpp
+++ b/clang-tools-extra/clangd/unittests/SyncAPI.cpp
@@ -145,5 +145,12 @@ RefSlab getRefs(const SymbolIndex &Index, SymbolID ID) {
return std::move(Slab).build();
}
+llvm::Expected<std::vector<Range>>
+runSemanticRanges(ClangdServer &Server, PathRef File, Position Pos) {
+ llvm::Optional<llvm::Expected<std::vector<Range>>> Result;
+ Server.semanticRanges(File, Pos, capture(Result));
+ return std::move(*Result);
+}
+
} // namespace clangd
} // namespace clang
diff --git a/clang-tools-extra/clangd/unittests/SyncAPI.h b/clang-tools-extra/clangd/unittests/SyncAPI.h
index c1416524153..1ba9c0b3d23 100644
--- a/clang-tools-extra/clangd/unittests/SyncAPI.h
+++ b/clang-tools-extra/clangd/unittests/SyncAPI.h
@@ -53,6 +53,9 @@ SymbolSlab runFuzzyFind(const SymbolIndex &Index, StringRef Query);
SymbolSlab runFuzzyFind(const SymbolIndex &Index, const FuzzyFindRequest &Req);
RefSlab getRefs(const SymbolIndex &Index, SymbolID ID);
+llvm::Expected<std::vector<Range>>
+runSemanticRanges(ClangdServer &Server, PathRef File, Position Pos);
+
} // namespace clangd
} // namespace clang
OpenPOWER on IntegriCloud