| 
 | 1 | +using System.Collections.Generic;  | 
 | 2 | +using System.Linq;  | 
 | 3 | +using AutoMoq;  | 
 | 4 | +using FineCodeCoverage.Core.Utilities.VsThreading;  | 
 | 5 | +using FineCodeCoverage.Editor.DynamicCoverage;  | 
 | 6 | +using FineCodeCoverage.Editor.DynamicCoverage.ContentTypes.Blazor;  | 
 | 7 | +using FineCodeCoverage.Editor.DynamicCoverage.Utilities;  | 
 | 8 | +using FineCodeCoverage.Editor.Roslyn;  | 
 | 9 | +using FineCodeCoverageTests.TestHelpers;  | 
 | 10 | +using Microsoft.CodeAnalysis;  | 
 | 11 | +using Microsoft.CodeAnalysis.CSharp;  | 
 | 12 | +using Microsoft.CodeAnalysis.Text;  | 
 | 13 | +using Microsoft.VisualStudio.Text;  | 
 | 14 | +using Moq;  | 
 | 15 | +using NUnit.Framework;  | 
 | 16 | + | 
 | 17 | +namespace FineCodeCoverageTests.Editor.DynamicCoverage  | 
 | 18 | +{  | 
 | 19 | +    internal class BlazorFileCodeSpanRangeService_Tests  | 
 | 20 | +    {  | 
 | 21 | +        [Test]  | 
 | 22 | +        public void Should_Return_Null_If_Cannot_Find_Syntax_Root_Of_Generated_Document()  | 
 | 23 | +        {  | 
 | 24 | +            var mockTextSnapshot = new Mock<ITextSnapshot>();  | 
 | 25 | +            var mockTextBuffer = new Mock<ITextBuffer>();  | 
 | 26 | +            mockTextSnapshot.SetupGet(textSnapshot => textSnapshot.TextBuffer).Returns(mockTextBuffer.Object);  | 
 | 27 | + | 
 | 28 | +            var autoMoqer = new AutoMoqer();  | 
 | 29 | +            var razorGeneratedFilePathMatcher = autoMoqer.GetMock<IBlazorGeneratedFilePathMatcher>().Object;  | 
 | 30 | +            autoMoqer.SetInstance<IThreadHelper>(new TestThreadHelper());  | 
 | 31 | +            autoMoqer.GetMock<ITextInfoFactory>().Setup(t => t.GetFilePath(mockTextBuffer.Object)).Returns("path");  | 
 | 32 | + | 
 | 33 | +            var mockRazorGeneratedDocumentRootFinder = autoMoqer.GetMock<IBlazorGeneratedDocumentRootFinder>();  | 
 | 34 | +            mockRazorGeneratedDocumentRootFinder.Setup(  | 
 | 35 | +                razorGeneratedDocumentootFinder => razorGeneratedDocumentootFinder.FindSyntaxRootAsync(mockTextBuffer.Object, "path", razorGeneratedFilePathMatcher)  | 
 | 36 | +            ).ReturnsAsync((SyntaxNode)null);  | 
 | 37 | + | 
 | 38 | +            var fileCodeSpanRanges = autoMoqer.Create<BlazorFileCodeSpanRangeService>().GetFileCodeSpanRanges(mockTextSnapshot.Object);  | 
 | 39 | + | 
 | 40 | +            Assert.IsNull(fileCodeSpanRanges);  | 
 | 41 | +            mockRazorGeneratedDocumentRootFinder.VerifyAll();  | 
 | 42 | +        }  | 
 | 43 | + | 
 | 44 | +        [Test]  | 
 | 45 | +        public void Should_Return_Null_If_Generated_Document_Has_No_Code_Nodes()  | 
 | 46 | +        {  | 
 | 47 | +            var mockTextSnapshot = new Mock<ITextSnapshot>();  | 
 | 48 | +            var mockTextBuffer = new Mock<ITextBuffer>();  | 
 | 49 | +            mockTextSnapshot.SetupGet(textSnapshot => textSnapshot.TextBuffer).Returns(mockTextBuffer.Object);  | 
 | 50 | + | 
 | 51 | +            var autoMoqer = new AutoMoqer();  | 
 | 52 | +            var mockCSharpCodeCoverageNodeVisitor = autoMoqer.GetMock<ICSharpCodeCoverageNodeVisitor>();  | 
 | 53 | +            mockCSharpCodeCoverageNodeVisitor.Setup(cSharpCodeCoverageNodeVisitor => cSharpCodeCoverageNodeVisitor.GetNodes(It.IsAny<SyntaxNode>()))  | 
 | 54 | +                .Returns(new List<SyntaxNode>());  | 
 | 55 | +            var razorGeneratedFilePathMatcher = autoMoqer.GetMock<IBlazorGeneratedFilePathMatcher>().Object;  | 
 | 56 | +            autoMoqer.SetInstance<IThreadHelper>(new TestThreadHelper());  | 
 | 57 | +            autoMoqer.GetMock<ITextInfoFactory>().Setup(t => t.GetFilePath(mockTextBuffer.Object)).Returns("path");  | 
 | 58 | + | 
 | 59 | +            var rootNode = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration);  | 
 | 60 | +            var mockRazorGeneratedDocumentRootFinder = autoMoqer.GetMock<IBlazorGeneratedDocumentRootFinder>();  | 
 | 61 | +            mockRazorGeneratedDocumentRootFinder.Setup(  | 
 | 62 | +                razorGeneratedDocumentootFinder => razorGeneratedDocumentootFinder.FindSyntaxRootAsync(mockTextBuffer.Object, "path", razorGeneratedFilePathMatcher)  | 
 | 63 | +            ).ReturnsAsync(rootNode);  | 
 | 64 | + | 
 | 65 | +            var fileCodeSpanRanges = autoMoqer.Create<BlazorFileCodeSpanRangeService>().GetFileCodeSpanRanges(mockTextSnapshot.Object);  | 
 | 66 | + | 
 | 67 | +            Assert.IsNull(fileCodeSpanRanges);  | 
 | 68 | + | 
 | 69 | +            mockCSharpCodeCoverageNodeVisitor.VerifyAll();  | 
 | 70 | +        }  | 
 | 71 | + | 
 | 72 | +        [TestCase(true)]  | 
 | 73 | +        [TestCase(false)]  | 
 | 74 | +        public void Should_Use_The_Generated_Coverage_Syntax_Nodes_Mapped_To_Razor_File_For_The_CodeSpanRange(  | 
 | 75 | +            bool firstMapsBack      | 
 | 76 | +        )  | 
 | 77 | +        {  | 
 | 78 | +            var mockTextSnapshot = new Mock<ITextSnapshot>();  | 
 | 79 | +            var mockTextBuffer = new Mock<ITextBuffer>();  | 
 | 80 | +            mockTextSnapshot.SetupGet(textSnapshot => textSnapshot.TextBuffer).Returns(mockTextBuffer.Object);  | 
 | 81 | + | 
 | 82 | +            var autoMoqer = new AutoMoqer();  | 
 | 83 | +            var razorGeneratedFilePathMatcher = autoMoqer.GetMock<IBlazorGeneratedFilePathMatcher>().Object;  | 
 | 84 | +            autoMoqer.SetInstance<IThreadHelper>(new TestThreadHelper());  | 
 | 85 | +            autoMoqer.GetMock<ITextInfoFactory>().Setup(t => t.GetFilePath(mockTextBuffer.Object)).Returns("path");  | 
 | 86 | + | 
 | 87 | +            var mockRazorGeneratedDocumentRootFinder = autoMoqer.GetMock<IBlazorGeneratedDocumentRootFinder>();  | 
 | 88 | +            SyntaxNode rootSyntaxNode = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration);  | 
 | 89 | +            SyntaxNode codeCoverageNode1 = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration);  | 
 | 90 | +            SyntaxNode codeCoverageNode2 = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration);  | 
 | 91 | +            mockRazorGeneratedDocumentRootFinder.Setup(  | 
 | 92 | +                razorGeneratedDocumentootFinder => razorGeneratedDocumentootFinder.FindSyntaxRootAsync(mockTextBuffer.Object, "path", razorGeneratedFilePathMatcher)  | 
 | 93 | +            ).ReturnsAsync(rootSyntaxNode);  | 
 | 94 | + | 
 | 95 | +            var mockCSharpCodeCoverageNodeVisitor = autoMoqer.GetMock<ICSharpCodeCoverageNodeVisitor>();  | 
 | 96 | +            mockCSharpCodeCoverageNodeVisitor.Setup(cSharpCodeCoverageNodeVisitor => cSharpCodeCoverageNodeVisitor.GetNodes(rootSyntaxNode))  | 
 | 97 | +                .Returns(new List<SyntaxNode> { codeCoverageNode1, codeCoverageNode2 });  | 
 | 98 | +            var mockSyntaxNodeLocationMapper = autoMoqer.GetMock<ISyntaxNodeLocationMapper>();  | 
 | 99 | + | 
 | 100 | +            var linePositionSpan1 = new LinePositionSpan(new LinePosition(1, 1), new LinePosition(2, 1));  | 
 | 101 | +            var fileLinePositionSpan1 = new FileLinePositionSpan(firstMapsBack ? "path" : "",linePositionSpan1);  | 
 | 102 | +            var linePositionSpan2 = new LinePositionSpan(new LinePosition(3, 1), new LinePosition(4, 1));  | 
 | 103 | +            var fileLinePositionSpan2 = new FileLinePositionSpan(firstMapsBack ? "" : "path", linePositionSpan2);  | 
 | 104 | +            var expectedCodeSpanRange = firstMapsBack ? new CodeSpanRange(1, 2) : new CodeSpanRange(3, 4);  | 
 | 105 | + | 
 | 106 | +            mockSyntaxNodeLocationMapper.Setup(syntaxNodeLocationMapper => syntaxNodeLocationMapper.Map(codeCoverageNode1))  | 
 | 107 | +                .Returns(fileLinePositionSpan1);  | 
 | 108 | +            mockSyntaxNodeLocationMapper.Setup(syntaxNodeLocationMapper => syntaxNodeLocationMapper.Map(codeCoverageNode2))  | 
 | 109 | +                .Returns(fileLinePositionSpan2);  | 
 | 110 | + | 
 | 111 | + | 
 | 112 | +            var fileCodeSpanRanges = autoMoqer.Create<BlazorFileCodeSpanRangeService>().GetFileCodeSpanRanges(mockTextSnapshot.Object);  | 
 | 113 | +            var fileCodeSpanRange = fileCodeSpanRanges.Single();  | 
 | 114 | + | 
 | 115 | +            Assert.That(expectedCodeSpanRange, Is.EqualTo(fileCodeSpanRange));  | 
 | 116 | +        }  | 
 | 117 | +    }  | 
 | 118 | +}  | 
0 commit comments