internal async Task VerifyCustomCommitWorkerAsync( CompletionServiceWithProviders service, Document document, CompletionItem completionItem, string codeBeforeCommit, string expectedCodeAfterCommit, char?commitChar = null) { MarkupTestFile.GetPosition(expectedCodeAfterCommit, out var actualExpectedCode, out int expectedCaretPosition); if (commitChar.HasValue && !Controller.IsCommitCharacter(service.GetRules(), completionItem, commitChar.Value, commitChar.Value.ToString())) { Assert.Equal(codeBeforeCommit, actualExpectedCode); return; } var commit = await service.GetChangeAsync(document, completionItem, commitChar, CancellationToken.None); var text = await document.GetTextAsync(); var newText = text.WithChanges(commit.TextChange); var newDoc = document.WithText(newText); document.Project.Solution.Workspace.TryApplyChanges(newDoc.Project.Solution); var textBuffer = (await WorkspaceFixture.GetWorkspaceAsync()).Documents.Single().TextBuffer; var textView = (await WorkspaceFixture.GetWorkspaceAsync()).Documents.Single().GetTextView(); string actualCodeAfterCommit = textBuffer.CurrentSnapshot.AsText().ToString(); var caretPosition = commit.NewPosition != null ? commit.NewPosition.Value : textView.Caret.Position.BufferPosition.Position; Assert.Equal(actualExpectedCode, actualCodeAfterCommit); Assert.Equal(expectedCaretPosition, caretPosition); }
private void InitializeServiceOnDocumentOpened(object sender, DocumentEventArgs e) { if (e.Document.Project.Language != _languageName) { return; } var token = _listener.BeginAsyncOperation(nameof(InitializeServiceForOpenedDocumentOnBackgroundAsync)); InitializeServiceForOpenedDocumentOnBackgroundAsync(e.Document).CompletesAsyncOperation(token); async Task InitializeServiceForOpenedDocumentOnBackgroundAsync(Document document) { await TaskScheduler.Default; // Preload project completion providers on a background thread since loading extensions can be slow // https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1488945 if (document.GetLanguageService <CompletionService>() is CompletionServiceWithProviders completionServiceWithProviders) { _ = CompletionServiceWithProviders.GetProjectCompletionProviders(document.Project); } await InitializeServiceForOpenedDocumentAsync(document).ConfigureAwait(false); } }
public TestAccessor(CompletionServiceWithProviders completionServiceWithProviders) => _completionServiceWithProviders = completionServiceWithProviders;