public async Task TryGetLinePositionSpan_SpanMatchesSourceMappingAndPosition_ReturnsTrue() { // Arrange var sourceText = SourceText.From(@" @SomeProperty @SomeProperty @SomeProperty "); var project = new DefaultProjectSnapshot( ProjectState.Create(Workspace.Services, HostProject) .WithAddedHostDocument(HostDocument, () => { return(Task.FromResult(TextAndVersion.Create(sourceText, VersionStamp.Create()))); })); var document = project.GetDocument(HostDocument.FilePath); var service = new RazorSpanMappingService(document); var output = await document.GetGeneratedOutputAsync(); var generated = output.GetCSharpDocument(); var symbol = "SomeProperty"; // Second occurrence var span = new TextSpan(generated.GeneratedCode.IndexOf(symbol, generated.GeneratedCode.IndexOf(symbol) + symbol.Length), symbol.Length); // Act var result = RazorSpanMappingService.TryGetLinePositionSpan(span, await document.GetTextAsync(), generated, out var mapped); // Assert Assert.True(result); Assert.Equal(new LinePositionSpan(new LinePosition(2, 1), new LinePosition(2, 13)), mapped); }
public async Task TryGetLinePositionSpan_SpanOutsideSourceMapping_ReturnsFalse() { // Arrange var sourceText = SourceText.From(@" @{ var x = SomeClass.SomeProperty; } "); var project = new DefaultProjectSnapshot( ProjectState.Create(Workspace.Services, HostProject) .WithAddedHostDocument(HostDocument, () => { return(Task.FromResult(TextAndVersion.Create(sourceText, VersionStamp.Create()))); })); var document = project.GetDocument(HostDocument.FilePath); var service = new RazorSpanMappingService(document); var output = await document.GetGeneratedOutputAsync(); var generated = output.GetCSharpDocument(); var symbol = "ExecuteAsync"; var span = new TextSpan(generated.GeneratedCode.IndexOf(symbol), symbol.Length); // Act var result = RazorSpanMappingService.TryGetLinePositionSpan(span, await document.GetTextAsync(), generated, out var mapped); // Assert Assert.False(result); }