public async Task HandleRequestAsync_ProjectionNotFound_ReturnsNull()
        {
            // Arrange
            var requestInvoker     = Mock.Of <LSPRequestInvoker>(MockBehavior.Strict);
            var projectionProvider = new Mock <LSPProjectionProvider>(MockBehavior.Strict).Object;

            Mock.Get(projectionProvider).Setup(projectionProvider => projectionProvider.GetProjectionAsync(It.IsAny <LSPDocumentSnapshot>(), It.IsAny <Position>(), CancellationToken.None))
            .Returns(Task.FromResult <ProjectionResult>(null));
            var documentMappingProvider = Mock.Of <LSPDocumentMappingProvider>(MockBehavior.Strict);
            var renameHandler           = new RenameHandler(requestInvoker, DocumentManager, projectionProvider, documentMappingProvider, LoggerProvider);
            var renameRequest           = new RenameParams()
            {
                Position     = new Position(0, 1),
                NewName      = "NewName",
                TextDocument = new TextDocumentIdentifier()
                {
                    Uri = Uri
                },
            };

            // Act
            var result = await renameHandler.HandleRequestAsync(renameRequest, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false);

            // Assert
            Assert.Null(result);
        }
        public async Task HandleRequestAsync_HtmlProjection_ReturnsNull()
        {
            // Arrange
            var documentManager = new TestDocumentManager();

            documentManager.AddDocument(Uri, Mock.Of <LSPDocumentSnapshot>());
            var requestInvoker     = Mock.Of <LSPRequestInvoker>();
            var projectionProvider = GetProjectionProvider(new ProjectionResult()
            {
                LanguageKind = RazorLanguageKind.Html
            });
            var documentMappingProvider = Mock.Of <LSPDocumentMappingProvider>();
            var renameHandler           = new RenameHandler(requestInvoker, documentManager, projectionProvider, documentMappingProvider);
            var renameRequest           = new RenameParams()
            {
                Position     = new Position(0, 1),
                NewName      = "NewName",
                TextDocument = new TextDocumentIdentifier()
                {
                    Uri = Uri
                },
            };

            // Act
            var result = await renameHandler.HandleRequestAsync(renameRequest, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false);

            // Assert
            Assert.Null(result);
        }
        public async Task HandleRequestAsync_CSharpProjection_RemapsWorkspaceEdit()
        {
            // Arrange
            var called          = false;
            var expectedEdit    = new WorkspaceEdit();
            var documentManager = new TestDocumentManager();

            documentManager.AddDocument(Uri, Mock.Of <LSPDocumentSnapshot>());

            var requestInvoker = GetRequestInvoker <RenameParams, WorkspaceEdit>(
                new WorkspaceEdit(),
                (method, serverContentType, renameParams, ct) =>
            {
                Assert.Equal(Methods.TextDocumentRenameName, method);
                Assert.Equal(RazorLSPConstants.CSharpContentTypeName, serverContentType);
                called = true;
            });

            var projectionProvider = GetProjectionProvider(new ProjectionResult()
            {
                LanguageKind = RazorLanguageKind.CSharp
            });
            var documentMappingProvider = GetDocumentMappingProvider(expectedEdit);

            var renameHandler = new RenameHandler(requestInvoker, documentManager, projectionProvider, documentMappingProvider);
            var renameRequest = new RenameParams()
            {
                Position     = new Position(0, 1),
                NewName      = "NewName",
                TextDocument = new TextDocumentIdentifier()
                {
                    Uri = Uri
                },
            };

            // Act
            var result = await renameHandler.HandleRequestAsync(renameRequest, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false);

            // Assert
            Assert.True(called);
            Assert.Equal(expectedEdit, result);

            // Actual remapping behavior is tested in LSPDocumentMappingProvider tests.
        }
        public async Task HandleRequestAsync_DocumentNotFound_ReturnsNull()
        {
            // Arrange
            var documentManager         = new TestDocumentManager();
            var requestInvoker          = Mock.Of <LSPRequestInvoker>(MockBehavior.Strict);
            var projectionProvider      = Mock.Of <LSPProjectionProvider>(MockBehavior.Strict);
            var documentMappingProvider = Mock.Of <LSPDocumentMappingProvider>(MockBehavior.Strict);
            var renameHandler           = new RenameHandler(requestInvoker, documentManager, projectionProvider, documentMappingProvider, LoggerProvider);
            var renameRequest           = new RenameParams()
            {
                Position     = new Position(0, 1),
                NewName      = "NewName",
                TextDocument = new TextDocumentIdentifier()
                {
                    Uri = Uri
                },
            };

            // Act
            var result = await renameHandler.HandleRequestAsync(renameRequest, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false);

            // Assert
            Assert.Null(result);
        }