diff options
Diffstat (limited to 'clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp')
| -rw-r--r-- | clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp | 46 |
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; |

