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.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/clang-tools-extra/unittests/clangd/ClangdTests.cpp b/clang-tools-extra/unittests/clangd/ClangdTests.cpp
index 44c8fdeae99..73462e8da5c 100644
--- a/clang-tools-extra/unittests/clangd/ClangdTests.cpp
+++ b/clang-tools-extra/unittests/clangd/ClangdTests.cpp
@@ -742,6 +742,61 @@ int main() { ClassWithMembers().{complete} }
EXPECT_FALSE(ContainsItem(Results, "CCC"));
}
+TEST_F(ClangdCompletionTest, Filter) {
+ MockFSProvider FS;
+ MockCompilationDatabase CDB(/*AddFreestandingFlag=*/true);
+ CDB.ExtraClangFlags.push_back("-xc++");
+ ErrorCheckingDiagConsumer DiagConsumer;
+ clangd::CodeCompleteOptions Opts;
+ ClangdServer Server(CDB, DiagConsumer, FS, getDefaultAsyncThreadsCount(),
+ /*StorePreamblesInMemory=*/true, Opts,
+ EmptyLogger::getInstance());
+
+ auto FooCpp = getVirtualTestFilePath("foo.cpp");
+ FS.Files[FooCpp] = "";
+ FS.ExpectedFile = FooCpp;
+ const char *Body = R"cpp(
+ int Abracadabra;
+ int Alakazam;
+ struct S {
+ int FooBar;
+ int FooBaz;
+ int Qux;
+ };
+ )cpp";
+ auto Complete = [&](StringRef Query) {
+ StringWithPos Completion = parseTextMarker(
+ formatv("{0} int main() { {1}{{complete}} }", Body, Query).str(),
+ "complete");
+ Server.addDocument(FooCpp, Completion.Text);
+ return Server
+ .codeComplete(FooCpp, Completion.MarkerPos, StringRef(Completion.Text))
+ .get()
+ .Value;
+ };
+
+ auto Foba = Complete("S().Foba");
+ EXPECT_TRUE(ContainsItem(Foba, "FooBar"));
+ EXPECT_TRUE(ContainsItem(Foba, "FooBaz"));
+ EXPECT_FALSE(ContainsItem(Foba, "Qux"));
+
+ auto FR = Complete("S().FR");
+ EXPECT_TRUE(ContainsItem(FR, "FooBar"));
+ EXPECT_FALSE(ContainsItem(FR, "FooBaz"));
+ EXPECT_FALSE(ContainsItem(FR, "Qux"));
+
+ auto Op = Complete("S().opr");
+ EXPECT_TRUE(ContainsItem(Op, "operator="));
+
+ auto Aaa = Complete("aaa");
+ EXPECT_TRUE(ContainsItem(Aaa, "Abracadabra"));
+ EXPECT_TRUE(ContainsItem(Aaa, "Alakazam"));
+
+ auto UA = Complete("_a");
+ EXPECT_TRUE(ContainsItem(UA, "static_cast"));
+ EXPECT_FALSE(ContainsItem(UA, "Abracadabra"));
+}
+
TEST_F(ClangdCompletionTest, CompletionOptions) {
MockFSProvider FS;
ErrorCheckingDiagConsumer DiagConsumer;
OpenPOWER on IntegriCloud