public async void ResolveCodeActionsAsync_ReturnsCodeActions()
        {
            // Arrange
            var testCSharpDocUri = new Uri("C:/path/to/file.razor.g.cs");

            var requestInvoker   = new Mock <LSPRequestInvoker>();
            var documentManager  = new Mock <TrackingLSPDocumentManager>();
            var expectedResponse = new VSCodeAction()
            {
                Title = "Something",
                Data  = new object()
            };

            requestInvoker.Setup(invoker => invoker.ReinvokeRequestOnServerAsync <VSCodeAction, VSCodeAction>(
                                     MSLSPMethods.TextDocumentCodeActionResolveName,
                                     LanguageServerKind.CSharp.ToContentType(),
                                     It.IsAny <VSCodeAction>(),
                                     It.IsAny <CancellationToken>()
                                     )).Returns(Task.FromResult(expectedResponse));
            var target  = new DefaultRazorLanguageServerCustomMessageTarget(documentManager.Object, JoinableTaskContext, requestInvoker.Object);
            var request = new VSCodeAction()
            {
                Title = "Something",
            };

            // Act
            var result = await target.ResolveCodeActionsAsync(request, CancellationToken.None).ConfigureAwait(false);

            // Assert
            Assert.Equal(expectedResponse, result);
        }
        public async Task ResolveCodeActionsAsync_ReturnsSingleCodeAction()
        {
            // Arrange
            var requestInvoker        = new Mock <LSPRequestInvoker>(MockBehavior.Strict);
            var csharpVirtualDocument = new CSharpVirtualDocumentSnapshot(new Uri("C:/path/to/file.razor.g.cs"), TextBuffer.CurrentSnapshot, hostDocumentSyncVersion: 0);
            var documentManager       = new TestDocumentManager();
            var razorUri = new Uri("C:/path/to/file.razor");

            documentManager.AddDocument(razorUri, new TestLSPDocumentSnapshot(razorUri, version: 0, "Some Content", csharpVirtualDocument));
            var expectedCodeAction = new VSInternalCodeAction()
            {
                Title = "Something",
                Data  = new object()
            };
            var unexpectedCodeAction = new VSInternalCodeAction()
            {
                Title = "Something Else",
                Data  = new object()
            };

            async IAsyncEnumerable <ReinvocationResponse <VSInternalCodeAction> > GetExpectedResultsAsync()
            {
                yield return(new ReinvocationResponse <VSInternalCodeAction>("languageClient", expectedCodeAction));

                yield return(new ReinvocationResponse <VSInternalCodeAction>("languageClient", unexpectedCodeAction));

                await Task.CompletedTask;
            }

            var expectedResponses = GetExpectedResultsAsync();

            requestInvoker.Setup(invoker => invoker.ReinvokeRequestOnMultipleServersAsync <VSInternalCodeAction, VSInternalCodeAction>(
                                     It.IsAny <ITextBuffer>(),
                                     Methods.CodeActionResolveName,
                                     It.IsAny <Func <JToken, bool> >(),
                                     It.IsAny <VSInternalCodeAction>(),
                                     It.IsAny <CancellationToken>()
                                     )).Returns(expectedResponses);

            var uIContextManager     = new Mock <RazorUIContextManager>(MockBehavior.Strict);
            var disposable           = new Mock <IDisposable>(MockBehavior.Strict);
            var clientOptionsMonitor = new Mock <RazorLSPClientOptionsMonitor>(MockBehavior.Strict);
            var documentSynchronizer = new Mock <LSPDocumentSynchronizer>(MockBehavior.Strict);

            var target = new DefaultRazorLanguageServerCustomMessageTarget(
                documentManager, JoinableTaskContext, requestInvoker.Object,
                uIContextManager.Object, disposable.Object, clientOptionsMonitor.Object, documentSynchronizer.Object);
            var codeAction = new VSInternalCodeAction()
            {
                Title = "Something",
            };
            var request = new RazorResolveCodeActionParams(razorUri, codeAction);

            // Act
            var result = await target.ResolveCodeActionsAsync(request, CancellationToken.None).ConfigureAwait(false);

            // Assert
            Assert.Equal(expectedCodeAction.Title, result.Title);
        }
        public async void ResolveCodeActionsAsync_ReturnsSingleCodeAction()
        {
            // Arrange
            var testCSharpDocUri = new Uri("C:/path/to/file.razor.g.cs");

            var requestInvoker     = new Mock <LSPRequestInvoker>(MockBehavior.Strict);
            var documentManager    = new Mock <TrackingLSPDocumentManager>(MockBehavior.Strict);
            var expectedCodeAction = new VSCodeAction()
            {
                Title = "Something",
                Data  = new object()
            };
            var unexpectedCodeAction = new VSCodeAction()
            {
                Title = "Something Else",
                Data  = new object()
            };
            IEnumerable <VSCodeAction> expectedResponses = new List <VSCodeAction>()
            {
                expectedCodeAction, unexpectedCodeAction
            };

            requestInvoker.Setup(invoker => invoker.ReinvokeRequestOnMultipleServersAsync <VSCodeAction, VSCodeAction>(
                                     MSLSPMethods.TextDocumentCodeActionResolveName,
                                     LanguageServerKind.CSharp.ToContentType(),
                                     It.IsAny <Func <JToken, bool> >(),
                                     It.IsAny <VSCodeAction>(),
                                     It.IsAny <CancellationToken>()
                                     )).Returns(Task.FromResult(expectedResponses));

            var uIContextManager     = new Mock <RazorUIContextManager>(MockBehavior.Strict);
            var disposable           = new Mock <IDisposable>(MockBehavior.Strict);
            var clientOptionsMonitor = new Mock <RazorLSPClientOptionsMonitor>(MockBehavior.Strict);

            var target = new DefaultRazorLanguageServerCustomMessageTarget(
                documentManager.Object, JoinableTaskContext, requestInvoker.Object,
                uIContextManager.Object, disposable.Object, clientOptionsMonitor.Object);
            var request = new VSCodeAction()
            {
                Title = "Something",
            };

            // Act
            var result = await target.ResolveCodeActionsAsync(request, CancellationToken.None).ConfigureAwait(false);

            // Assert
            Assert.Equal(expectedCodeAction.Title, result.Title);
        }