public async Task GetCSharpCodeActionsFromLanguageServerAsync_ReturnsCodeActions() { // Arrange var documentPath = "C:/path/to/Page.razor"; var codeDocument = CreateCodeDocument("@code {}"); var documentResolver = CreateDocumentResolver(documentPath, codeDocument); var projectedRange = new Range(new Position(15, 2), new Position(15, 2)); var documentMappingService = CreateDocumentMappingService(projectedRange); var languageServer = CreateLanguageServer(); var codeActionEndpoint = new CodeActionEndpoint( documentMappingService, Array.Empty <RazorCodeActionProvider>(), new CSharpCodeActionProvider[] { new MockCSharpCodeActionProvider() }, Dispatcher, documentResolver, languageServer, _languageServerFeatureOptions) { _supportsCodeActionResolve = false }; var initialRange = new Range(new Position(0, 1), new Position(0, 1)); var request = new CodeActionParams() { TextDocument = new TextDocumentIdentifier(new Uri(documentPath)), Range = initialRange, Context = new OmniSharpVSCodeActionContext() { SelectionRange = initialRange } }; var context = await codeActionEndpoint.GenerateRazorCodeActionContextAsync(request, default); // Act var results = await codeActionEndpoint.GetCSharpCodeActionsFromLanguageServerAsync(context, default); // Assert Assert.Single(results); var diagnostics = results.Single().Diagnostics.ToArray(); Assert.Equal(2, diagnostics.Length); // Diagnostic ranges contain the projected range for // 1. Range // 2. SelectionRange // // This helps verify that the CodeActionEndpoint is mapping the // ranges correctly using the mapping service Assert.Equal(projectedRange, diagnostics[0].Range); Assert.Equal(projectedRange, diagnostics[1].Range); }
public async Task GetCSharpCodeActionsFromLanguageServerAsync_InvalidRangeMapping() { // Arrange var documentPath = "C:/path/to/Page.razor"; var codeDocument = CreateCodeDocument("@code {}"); var documentResolver = CreateDocumentResolver(documentPath, codeDocument); Range projectedRange = null; var documentMappingService = Mock.Of <DefaultRazorDocumentMappingService>( d => d.TryMapToProjectedDocumentRange(It.IsAny <RazorCodeDocument>(), It.IsAny <Range>(), out projectedRange) == false , MockBehavior.Strict); var codeActionEndpoint = new CodeActionEndpoint( documentMappingService, Array.Empty <RazorCodeActionProvider>(), new CSharpCodeActionProvider[] { new MockCSharpCodeActionProvider() }, Dispatcher, documentResolver, LanguageServer, LanguageServerFeatureOptions) { _supportsCodeActionResolve = false }; var initialRange = new Range(new Position(0, 1), new Position(0, 1)); var request = new RazorCodeActionParams() { TextDocument = new TextDocumentIdentifier(new Uri(documentPath)), Range = initialRange, Context = new ExtendedCodeActionContext() }; var context = await codeActionEndpoint.GenerateRazorCodeActionContextAsync(request, default); // Act var results = await codeActionEndpoint.GetCSharpCodeActionsFromLanguageServerAsync(context, default); // Assert Assert.Empty(results); Assert.Equal(initialRange, context.Request.Range); }
public async Task GetCSharpCodeActionsFromLanguageServerAsync_ReturnsCodeActions() { // Arrange var documentPath = "C:/path/to/Page.razor"; var codeDocument = CreateCodeDocument("@code {}"); var documentResolver = CreateDocumentResolver(documentPath, codeDocument); var projectedRange = new Range(new Position(15, 2), new Position(15, 2)); var documentMappingService = CreateDocumentMappingService(projectedRange); var languageServer = CreateLanguageServer(); var codeActionEndpoint = new CodeActionEndpoint( documentMappingService, Array.Empty <RazorCodeActionProvider>(), new CSharpCodeActionProvider[] { new MockCSharpCodeActionProvider() }, Dispatcher, documentResolver, languageServer, LanguageServerFeatureOptions) { _supportsCodeActionResolve = false }; var initialRange = new Range(new Position(0, 1), new Position(0, 1)); var request = new RazorCodeActionParams() { TextDocument = new TextDocumentIdentifier(new Uri(documentPath)), Range = initialRange, Context = new ExtendedCodeActionContext() }; var context = await codeActionEndpoint.GenerateRazorCodeActionContextAsync(request, default); // Act var results = await codeActionEndpoint.GetCSharpCodeActionsFromLanguageServerAsync(context, default); // Assert Assert.Single(results); Assert.Equal(projectedRange, context.Request.Range); }