public async Task HandleRequestAsync_InvokesHTMLServer_RemapsEdits() { // Arrange var invokedServer = false; var requestInvoker = new Mock <LSPRequestInvoker>(MockBehavior.Strict); requestInvoker .Setup(r => r.ReinvokeRequestOnServerAsync <VSInternalDocumentOnAutoInsertParams, VSInternalDocumentOnAutoInsertResponseItem>( It.IsAny <ITextBuffer>(), VSInternalMethods.OnAutoInsertName, It.IsAny <string>(), It.IsAny <VSInternalDocumentOnAutoInsertParams>(), It.IsAny <CancellationToken>())) .Callback <ITextBuffer, string, string, VSInternalDocumentOnAutoInsertParams, CancellationToken>((textBuffer, method, serverContentType, formattingParams, ct) => invokedServer = true) .Returns(Task.FromResult(new ReinvocationResponse <VSInternalDocumentOnAutoInsertResponseItem>( "LanguageClientName", new VSInternalDocumentOnAutoInsertResponseItem() { TextEdit = new TextEdit() { Range = new Range(), NewText = "sometext" }, TextEditFormat = InsertTextFormat.Snippet }))); var projectionUri = new Uri(Uri.AbsoluteUri + "__virtual.html"); var projectionResult = new ProjectionResult() { Uri = projectionUri, LanguageKind = RazorLanguageKind.Html, }; var projectionProvider = new Mock <LSPProjectionProvider>(MockBehavior.Strict); projectionProvider.Setup(p => p.GetProjectionAsync(It.IsAny <LSPDocumentSnapshot>(), It.IsAny <Position>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(projectionResult)); var documentMappingProvider = new Mock <LSPDocumentMappingProvider>(MockBehavior.Strict); var handler = new OnAutoInsertHandler(DocumentManager, requestInvoker.Object, projectionProvider.Object, documentMappingProvider.Object, LoggerProvider); var request = new VSInternalDocumentOnAutoInsertParams() { Character = "=", TextDocument = new TextDocumentIdentifier() { Uri = Uri }, Options = new FormattingOptions() { OtherOptions = new Dictionary <string, object>() }, Position = new Position(1, 4) }; // Act var response = await handler.HandleRequestAsync(request, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false); // Assert Assert.True(invokedServer); Assert.NotNull(response); }
public async Task HandleRequestAsync_NonHtmlProjection_DoesNotInvokeServer() { // Arrange var documentManager = new TestDocumentManager(); documentManager.AddDocument(Uri, Mock.Of <LSPDocumentSnapshot>(s => s.Uri == Uri)); var invokedServer = false; var requestInvoker = new Mock <LSPRequestInvoker>(); requestInvoker .Setup(r => r.ReinvokeRequestOnServerAsync <DocumentOnAutoInsertParams, DocumentOnAutoInsertResponseItem>(It.IsAny <string>(), It.IsAny <LanguageServerKind>(), It.IsAny <DocumentOnAutoInsertParams>(), It.IsAny <CancellationToken>())) .Callback <string, LanguageServerKind, DocumentOnAutoInsertParams, CancellationToken>((method, serverKind, formattingParams, ct) => { invokedServer = true; }) .Returns(Task.FromResult(new DocumentOnAutoInsertResponseItem() { TextEdit = new TextEdit() })); var projectionResult = new ProjectionResult() { LanguageKind = RazorLanguageKind.CSharp, }; var projectionProvider = new Mock <LSPProjectionProvider>(); projectionProvider.Setup(p => p.GetProjectionAsync(It.IsAny <LSPDocumentSnapshot>(), It.IsAny <Position>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(projectionResult)); var documentMappingProvider = Mock.Of <LSPDocumentMappingProvider>(); var handler = new OnAutoInsertHandler(documentManager, requestInvoker.Object, projectionProvider.Object, documentMappingProvider); var request = new DocumentOnAutoInsertParams() { Character = ">", TextDocument = new TextDocumentIdentifier() { Uri = Uri }, Options = new FormattingOptions() { OtherOptions = new Dictionary <string, object>() }, Position = new Position(0, 0) }; // Act var response = await handler.HandleRequestAsync(request, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false); // Assert Assert.False(invokedServer); Assert.Null(response); }
public async Task HandleRequestAsync_RazorProjection_DoesNotInvokeServer() { // Arrange var invokedServer = false; var requestInvoker = new Mock <LSPRequestInvoker>(MockBehavior.Strict); requestInvoker .Setup(r => r.ReinvokeRequestOnServerAsync <VSInternalDocumentOnAutoInsertParams, VSInternalDocumentOnAutoInsertResponseItem>( It.IsAny <ITextBuffer>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <VSInternalDocumentOnAutoInsertParams>(), It.IsAny <CancellationToken>())) .Callback <ITextBuffer, string, string, VSInternalDocumentOnAutoInsertParams, CancellationToken>((textBuffer, method, clientName, formattingParams, ct) => invokedServer = true) .Returns(Task.FromResult(new ReinvocationResponse <VSInternalDocumentOnAutoInsertResponseItem>("LanguageClientName", new VSInternalDocumentOnAutoInsertResponseItem() { TextEdit = new TextEdit() }))); var projectionResult = new ProjectionResult() { LanguageKind = RazorLanguageKind.Razor, }; var projectionProvider = new Mock <LSPProjectionProvider>(MockBehavior.Strict); projectionProvider.Setup(p => p.GetProjectionAsync(It.IsAny <LSPDocumentSnapshot>(), It.IsAny <Position>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(projectionResult)); var documentMappingProvider = Mock.Of <LSPDocumentMappingProvider>(MockBehavior.Strict); var handler = new OnAutoInsertHandler(DocumentManager, requestInvoker.Object, projectionProvider.Object, documentMappingProvider, LoggerProvider); var request = new VSInternalDocumentOnAutoInsertParams() { Character = ">", TextDocument = new TextDocumentIdentifier() { Uri = Uri }, Options = new FormattingOptions() { OtherOptions = new Dictionary <string, object>() }, Position = new Position(0, 0) }; // Act var response = await handler.HandleRequestAsync(request, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false); // Assert Assert.False(invokedServer); Assert.Null(response); }
public async Task HandleRequestAsync_DocumentNotFound_DoesNotInvokeServer() { // Arrange var documentManager = new TestDocumentManager(); var invokedServer = false; var requestInvoker = new Mock <LSPRequestInvoker>(MockBehavior.Strict); requestInvoker .Setup(r => r.ReinvokeRequestOnServerAsync <DocumentOnAutoInsertParams, DocumentOnAutoInsertResponseItem>(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <DocumentOnAutoInsertParams>(), It.IsAny <CancellationToken>())) .Callback <string, string, DocumentOnAutoInsertParams, CancellationToken>((method, serverContentType, formattingParams, ct) => { invokedServer = true; }) .Returns(Task.FromResult(new DocumentOnAutoInsertResponseItem() { TextEdit = new TextEdit() })); var projectionProvider = Mock.Of <LSPProjectionProvider>(MockBehavior.Strict); var documentMappingProvider = Mock.Of <LSPDocumentMappingProvider>(MockBehavior.Strict); var handler = new OnAutoInsertHandler(documentManager, requestInvoker.Object, projectionProvider, documentMappingProvider, LoggerProvider); var request = new DocumentOnAutoInsertParams() { Character = ">", TextDocument = new TextDocumentIdentifier() { Uri = Uri }, Options = new FormattingOptions() { OtherOptions = new Dictionary <string, object>() }, Position = new Position(0, 0) }; // Act var response = await handler.HandleRequestAsync(request, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false); // Assert Assert.False(invokedServer); Assert.Null(response); }
public async Task HandleRequestAsync_InvokesServer_RemapsEdits() { // Arrange var documentManager = new TestDocumentManager(); documentManager.AddDocument(Uri, Mock.Of <LSPDocumentSnapshot>(s => s.Uri == Uri && s.Snapshot == Mock.Of <ITextSnapshot>())); var invokedServer = false; var mappedTextEdits = false; var requestInvoker = new Mock <LSPRequestInvoker>(MockBehavior.Strict); requestInvoker .Setup(r => r.ReinvokeRequestOnServerAsync <DocumentOnAutoInsertParams, DocumentOnAutoInsertResponseItem>(MSLSPMethods.OnAutoInsertName, It.IsAny <LanguageServerKind>(), It.IsAny <DocumentOnAutoInsertParams>(), It.IsAny <CancellationToken>())) .Callback <string, LanguageServerKind, DocumentOnAutoInsertParams, CancellationToken>((method, serverKind, formattingParams, ct) => { invokedServer = true; }) .Returns(Task.FromResult(new DocumentOnAutoInsertResponseItem() { TextEdit = new TextEdit() { Range = new Range(), NewText = "sometext" } })); var projectionUri = new Uri(Uri.AbsoluteUri + "__virtual.html"); var projectionResult = new ProjectionResult() { Uri = projectionUri, LanguageKind = RazorLanguageKind.Html, }; var projectionProvider = new Mock <LSPProjectionProvider>(); projectionProvider.Setup(p => p.GetProjectionAsync(It.IsAny <LSPDocumentSnapshot>(), It.IsAny <Position>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(projectionResult)); var documentMappingProvider = new Mock <LSPDocumentMappingProvider>(MockBehavior.Strict); documentMappingProvider .Setup(d => d.RemapTextEditsAsync(projectionUri, It.IsAny <TextEdit[]>(), It.IsAny <CancellationToken>())) .Callback(() => { mappedTextEdits = true; }) .Returns(Task.FromResult(new[] { new TextEdit() })); var handler = new OnAutoInsertHandler(documentManager, requestInvoker.Object, projectionProvider.Object, documentMappingProvider.Object); var request = new DocumentOnAutoInsertParams() { Character = "=", TextDocument = new TextDocumentIdentifier() { Uri = Uri }, Options = new FormattingOptions() { OtherOptions = new Dictionary <string, object>() }, Position = new Position(1, 4) }; // Act var response = await handler.HandleRequestAsync(request, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false); // Assert Assert.True(invokedServer); Assert.True(mappedTextEdits); Assert.NotNull(response); }