Пример #1
0
        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);
        }
Пример #2
0
        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);
        }