summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp')
-rw-r--r--clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp46
1 files changed, 41 insertions, 5 deletions
diff --git a/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp b/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp
index 39f9117ae04..3329794b985 100644
--- a/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp
+++ b/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp
@@ -57,6 +57,7 @@ using ::testing::Contains;
using ::testing::Each;
using ::testing::ElementsAre;
using ::testing::Not;
+using ::testing::UnorderedElementsAre;
class IgnoreDiagnostics : public DiagnosticsConsumer {
void
@@ -104,7 +105,7 @@ CompletionList completions(StringRef Text,
/*StorePreamblesInMemory=*/true);
auto File = getVirtualTestFilePath("foo.cpp");
Annotations Test(Text);
- Server.addDocument(Context::empty(), File, Test.code());
+ Server.addDocument(Context::empty(), File, Test.code()).wait();
auto CompletionList =
Server.codeComplete(Context::empty(), File, Test.point(), Opts)
.get()
@@ -506,11 +507,11 @@ TEST(CompletionTest, NoIndex) {
Opts.Index = nullptr;
auto Results = completions(R"cpp(
- namespace ns { class No {}; }
+ namespace ns { class Local {}; }
void f() { ns::^ }
)cpp",
Opts);
- EXPECT_THAT(Results.items, Has("No"));
+ EXPECT_THAT(Results.items, Has("Local"));
}
TEST(CompletionTest, StaticAndDynamicIndex) {
@@ -538,13 +539,13 @@ TEST(CompletionTest, SimpleIndexBased) {
Opts.Index = I.get();
auto Results = completions(R"cpp(
- namespace ns { class No {}; }
+ namespace ns { int local; }
void f() { ns::^ }
)cpp",
Opts);
EXPECT_THAT(Results.items, Has("XYZ", CompletionItemKind::Class));
EXPECT_THAT(Results.items, Has("foo", CompletionItemKind::Function));
- EXPECT_THAT(Results.items, Not(Has("No")));
+ EXPECT_THAT(Results.items, Has("local"));
}
TEST(CompletionTest, IndexBasedWithFilter) {
@@ -585,6 +586,41 @@ TEST(CompletionTest, FullyQualifiedScope) {
EXPECT_THAT(Results.items, Has("XYZ", CompletionItemKind::Class));
}
+TEST(CompletionTest, IndexSuppressesPreambleCompletions) {
+ MockFSProvider FS;
+ MockCompilationDatabase CDB;
+ IgnoreDiagnostics DiagConsumer;
+ ClangdServer Server(CDB, DiagConsumer, FS, getDefaultAsyncThreadsCount(),
+ /*StorePreamblesInMemory=*/true);
+
+ FS.Files[getVirtualTestFilePath("bar.h")] =
+ R"cpp(namespace ns { int preamble; })cpp";
+ auto File = getVirtualTestFilePath("foo.cpp");
+ Annotations Test(R"cpp(
+ #include "bar.h"
+ namespace ns { int local; }
+ void f() { ns::^ }
+ )cpp");
+ Server.addDocument(Context::empty(), File, Test.code()).wait();
+ clangd::CodeCompleteOptions Opts = {};
+
+ auto WithoutIndex =
+ Server.codeComplete(Context::empty(), File, Test.point(), Opts)
+ .get()
+ .second.Value;
+ EXPECT_THAT(WithoutIndex.items,
+ UnorderedElementsAre(Named("local"), Named("preamble")));
+
+ auto I = simpleIndexFromSymbols({{"ns::index", index::SymbolKind::Variable}});
+ Opts.Index = I.get();
+ auto WithIndex =
+ Server.codeComplete(Context::empty(), File, Test.point(), Opts)
+ .get()
+ .second.Value;
+ EXPECT_THAT(WithIndex.items,
+ UnorderedElementsAre(Named("local"), Named("index")));
+}
+
TEST(CompletionTest, ASTIndexMultiFile) {
MockFSProvider FS;
MockCompilationDatabase CDB;
OpenPOWER on IntegriCloud