public async Task HandleRequestAsync_ProjectionNotFound_ReturnsNull() { // Arrange var documentManager = new TestDocumentManager(); documentManager.AddDocument(Uri, Mock.Of <LSPDocumentSnapshot>()); var requestInvoker = Mock.Of <LSPRequestInvoker>(); var projectionProvider = Mock.Of <LSPProjectionProvider>(); var completionHandler = new CompletionHandler(JoinableTaskContext, requestInvoker, documentManager, projectionProvider); var completionRequest = new CompletionParams() { TextDocument = new TextDocumentIdentifier() { Uri = Uri }, Context = new CompletionContext() { TriggerKind = CompletionTriggerKind.Invoked }, Position = new Position(0, 1) }; // Act var result = await completionHandler.HandleRequestAsync(completionRequest, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false); // Assert Assert.Null(result); }
public async Task HandleRequestAsync_CSharpProjection_IdentifierTriggerCharacter_InvokesCSharpLanguageServerNull() { // Arrange var called = false; var expectedItem = new CompletionItem() { InsertText = "DateTime" }; var completionRequest = new CompletionParams() { TextDocument = new TextDocumentIdentifier() { Uri = Uri }, Context = new CompletionContext() { TriggerKind = CompletionTriggerKind.TriggerCharacter, TriggerCharacter = "a" }, Position = new Position(0, 1) }; var documentManager = new TestDocumentManager(); documentManager.AddDocument(Uri, Mock.Of <LSPDocumentSnapshot>()); var requestInvoker = new Mock <LSPRequestInvoker>(); requestInvoker .Setup(r => r.ReinvokeRequestOnServerAsync <CompletionParams, SumType <CompletionItem[], CompletionList>?>(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <CompletionParams>(), It.IsAny <CancellationToken>())) .Callback <string, string, CompletionParams, CancellationToken>((method, serverContentType, completionParams, ct) => { Assert.Equal(Methods.TextDocumentCompletionName, method); Assert.Equal(RazorLSPConstants.CSharpContentTypeName, serverContentType); called = true; }) .Returns(Task.FromResult <SumType <CompletionItem[], CompletionList>?>(new[] { expectedItem })); 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 completionHandler = new CompletionHandler(JoinableTaskContext, requestInvoker.Object, documentManager, projectionProvider.Object); // Act var result = await completionHandler.HandleRequestAsync(completionRequest, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false); // Assert Assert.True(called); Assert.NotEmpty((CompletionItem[])result.Value); var item = ((CompletionItem[])result.Value).First(); Assert.Equal(expectedItem.InsertText, item.InsertText); }
public async Task HandleRequestAsync_CSharpProjection_IncompatibleTriggerCharacter_ReturnsNull() { // Arrange var completionRequest = new CompletionParams() { TextDocument = new TextDocumentIdentifier() { Uri = Uri }, Context = new CompletionContext() { TriggerKind = CompletionTriggerKind.TriggerCharacter, TriggerCharacter = "<" }, Position = new Position(0, 1) }; var documentManager = new TestDocumentManager(); documentManager.AddDocument(Uri, Mock.Of <LSPDocumentSnapshot>()); var requestInvoker = new Mock <LSPRequestInvoker>(); 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 completionHandler = new CompletionHandler(JoinableTaskContext, requestInvoker.Object, documentManager, projectionProvider.Object); // Act var result = await completionHandler.HandleRequestAsync(completionRequest, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false); // Assert Assert.Null(result); }
public async Task HandleRequestAsync_CSharpProjection_ReturnsKeywordsFromCSharp() { // Arrange var called = false; var expectedItems = new CompletionItem[] { new CompletionItem() { InsertText = "DateTime", Label = "DateTime" }, new CompletionItem() { InsertText = "FROMCSHARP", Label = "for" }, }; var completionRequest = new CompletionParams() { TextDocument = new TextDocumentIdentifier() { Uri = Uri }, Context = new CompletionContext() { TriggerKind = CompletionTriggerKind.Invoked, TriggerCharacter = "@" }, Position = new Position(0, 1) }; var documentManager = new TestDocumentManager(); documentManager.AddDocument(Uri, Mock.Of <LSPDocumentSnapshot>()); var requestInvoker = new Mock <LSPRequestInvoker>(); requestInvoker .Setup(r => r.ReinvokeRequestOnServerAsync <CompletionParams, SumType <CompletionItem[], CompletionList>?>(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <CompletionParams>(), It.IsAny <CancellationToken>())) .Callback <string, string, CompletionParams, CancellationToken>((method, serverContentType, completionParams, ct) => { Assert.Equal(Methods.TextDocumentCompletionName, method); Assert.Equal(RazorLSPConstants.CSharpContentTypeName, serverContentType); called = true; }) .Returns(Task.FromResult <SumType <CompletionItem[], CompletionList>?>(expectedItems)); 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 completionHandler = new CompletionHandler(JoinableTaskContext, requestInvoker.Object, documentManager, projectionProvider.Object); // Act var result = await completionHandler.HandleRequestAsync(completionRequest, new ClientCapabilities(), CancellationToken.None).ConfigureAwait(false); // Assert Assert.True(called); Assert.True(result.HasValue); var _ = result.Value.Match <SumType <CompletionItem[], CompletionList> >( array => { Assert.Collection(array, item => Assert.Equal("DateTime", item.InsertText), item => { Assert.Equal("for", item.Label); Assert.Equal("FROMCSHARP", item.InsertText); }, item => Assert.Equal("foreach", item.Label), item => Assert.Equal("while", item.Label), item => Assert.Equal("switch", item.Label), item => Assert.Equal("lock", item.Label), item => Assert.Equal("case", item.Label), item => Assert.Equal("if", item.Label), item => Assert.Equal("try", item.Label), item => Assert.Equal("do", item.Label), item => Assert.Equal("using", item.Label) );; return(array); }, list => { throw new NotImplementedException(); }); }