From 443469268dc0f06b7ac068b2788ada27538289fe Mon Sep 17 00:00:00 2001 From: Ben Langmuir Date: Tue, 28 Jul 2020 15:56:17 -0700 Subject: [PATCH] [completion] Add tests for server-side filtering --- .../SourceKitTests/SwiftCompletionTests.swift | 227 ++++++++++++++++++ 1 file changed, 227 insertions(+) diff --git a/Tests/SourceKitTests/SwiftCompletionTests.swift b/Tests/SourceKitTests/SwiftCompletionTests.swift index 47387bd8f..9a2ac1658 100644 --- a/Tests/SourceKitTests/SwiftCompletionTests.swift +++ b/Tests/SourceKitTests/SwiftCompletionTests.swift @@ -324,4 +324,231 @@ final class SwiftCompletionTests: XCTestCase { XCTAssertEqual(item.filterText, "foo()") XCTAssertEqual(item.textEdit, TextEdit(range: Position(line: 5, utf16index: 2).. OK (20 is maxResults since we're outside the member completion) + XCTAssertEqual(20, try! sk.sendSync(CompletionRequest( + textDocument: TextDocumentIdentifier(url), + position: Position(line: 7, utf16index: 0), + context:CompletionContext(triggerKind: .invoked))).items.count) + } + + func testRefilterAfterIncompleteResultsWithEdits() { + initializeServer(options: CodeCompletionOptions(serverSideFiltering: true, maxResults: nil)) + let url = URL(fileURLWithPath: "/\(#function)/a.swift") + openDocument(text: """ + struct S { + func fooAbc() {} + func fooBcd() {} + func fooCde() {} + func fooDef() {} + func fooGoop() {} + func test() { + self.fz + } + } + """, url: url) + + // 'f' + XCTAssertEqual(5, countFs(try! sk.sendSync(CompletionRequest( + textDocument: TextDocumentIdentifier(url), + position: Position(line: 7, utf16index: 10), + context:CompletionContext(triggerKind: .invoked))))) + + // 'fz' + XCTAssertEqual(0, countFs(try! sk.sendSync(CompletionRequest( + textDocument: TextDocumentIdentifier(url), + position: Position(line: 7, utf16index: 11), + context:CompletionContext(triggerKind: .triggerFromIncompleteCompletions))))) + + sk.send(DidChangeTextDocumentNotification( + textDocument: VersionedTextDocumentIdentifier(DocumentURI(url), version: 1), + contentChanges: [ + .init(range: Position(line: 7, utf16index: 10).. Int { + return response.items.filter{$0.label.hasPrefix("f")}.count }