summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/unittests/CodeCompletionStringsTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/unittests/CodeCompletionStringsTests.cpp')
-rw-r--r--clang-tools-extra/clangd/unittests/CodeCompletionStringsTests.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/clang-tools-extra/clangd/unittests/CodeCompletionStringsTests.cpp b/clang-tools-extra/clangd/unittests/CodeCompletionStringsTests.cpp
index 43429c86465..83b3826f6fc 100644
--- a/clang-tools-extra/clangd/unittests/CodeCompletionStringsTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CodeCompletionStringsTests.cpp
@@ -22,10 +22,12 @@ public:
CCTUInfo(Allocator), Builder(*Allocator, CCTUInfo) {}
protected:
- void computeSignature(const CodeCompletionString &CCS) {
+ void computeSignature(const CodeCompletionString &CCS,
+ bool CompletingPattern = false) {
Signature.clear();
Snippet.clear();
- getSignature(CCS, &Signature, &Snippet);
+ getSignature(CCS, &Signature, &Snippet, /*RequiredQualifier=*/nullptr,
+ CompletingPattern);
}
std::shared_ptr<clang::GlobalCodeCompletionAllocator> Allocator;
@@ -99,6 +101,25 @@ TEST_F(CompletionStringTest, EscapeSnippet) {
EXPECT_EQ(Snippet, "(${1:\\$p\\}1\\\\})");
}
+TEST_F(CompletionStringTest, SnippetsInPatterns) {
+ auto MakeCCS = [this]() -> const CodeCompletionString & {
+ CodeCompletionBuilder Builder(*Allocator, CCTUInfo);
+ Builder.AddTypedTextChunk("namespace");
+ Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
+ Builder.AddPlaceholderChunk("name");
+ Builder.AddChunk(CodeCompletionString::CK_Equal);
+ Builder.AddPlaceholderChunk("target");
+ Builder.AddChunk(CodeCompletionString::CK_SemiColon);
+ return *Builder.TakeString();
+ };
+ computeSignature(MakeCCS(), /*CompletingPattern=*/false);
+ EXPECT_EQ(Snippet, " ${1:name} = ${2:target};");
+
+ // When completing a pattern, the last placeholder holds the cursor position.
+ computeSignature(MakeCCS(), /*CompletingPattern=*/true);
+ EXPECT_EQ(Snippet, " ${1:name} = ${0:target};");
+}
+
TEST_F(CompletionStringTest, IgnoreInformativeQualifier) {
Builder.AddTypedTextChunk("X");
Builder.AddInformativeChunk("info ok");
OpenPOWER on IntegriCloud