Skip to content

Commit 2ed7086

Browse files
committed
backup
1 parent b08c084 commit 2ed7086

35 files changed

+1071
-346
lines changed

FineCodeCoverageTests/Editor/DynamicCoverage/BlazorCoverageContentType_Tests.cs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using FineCodeCoverage.Editor.DynamicCoverage.ContentTypes.Blazor;
2+
using Moq;
23
using NUnit.Framework;
34

45
namespace FineCodeCoverageTests.Editor.DynamicCoverage
@@ -12,5 +13,59 @@ public void Should_Include_Razor_Component_Files(string filePath, bool expectedE
1213
{
1314
Assert.That(new BlazorCoverageContentType(null).Exclude(filePath), Is.EqualTo(expectedExclude));
1415
}
16+
17+
[Test]
18+
public void Should_Line_Exclude_HtmlTags()
19+
{
20+
var lineExcluder = new BlazorCoverageContentType(null).LineExcluder;
21+
Assert.True(lineExcluder.ExcludeIfNotCode("<"));
22+
}
23+
24+
[Test]
25+
public void Should_Line_Exclude_Directives()
26+
{
27+
var lineExcluder = new BlazorCoverageContentType(null).LineExcluder;
28+
Assert.True(lineExcluder.ExcludeIfNotCode("@"));
29+
}
30+
31+
[Test]
32+
public void Should_Line_Exclude_Comments()
33+
{
34+
var lineExcluder = new BlazorCoverageContentType(null).LineExcluder;
35+
Assert.True(lineExcluder.ExcludeIfNotCode("//"));
36+
}
37+
38+
[Test]
39+
public void Should_Line_Exclude_Compiler_Directives()
40+
{
41+
var lineExcluder = new BlazorCoverageContentType(null).LineExcluder;
42+
Assert.True(lineExcluder.ExcludeIfNotCode("#"));
43+
}
44+
45+
[Test]
46+
public void Should_Not_UseFileCodeSpanRangeServiceForChanges()
47+
{
48+
Assert.False(new BlazorCoverageContentType(null).UseFileCodeSpanRangeServiceForChanges);
49+
}
50+
51+
[Test]
52+
public void Should_CoverageOnlyFromFileCodeSpanRangeService()
53+
{
54+
Assert.True(new BlazorCoverageContentType(null).CoverageOnlyFromFileCodeSpanRangeService);
55+
}
56+
57+
[Test]
58+
public void Should_Use_BlazorFileCodeSpanRangeService()
59+
{
60+
var blazorFileCodeSpanRangeService = new Mock<IBlazorFileCodeSpanRangeService>().Object;
61+
Assert.That(blazorFileCodeSpanRangeService, Is.SameAs(new BlazorCoverageContentType(blazorFileCodeSpanRangeService).FileCodeSpanRangeService));
62+
}
63+
64+
[Test]
65+
public void Should_Be_For_The_Razor_ContentType()
66+
{
67+
Assert.That("Razor", Is.EqualTo(new BlazorCoverageContentType(null).ContentTypeName));
68+
}
69+
1570
}
1671
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
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+
[TestCase(true)]
45+
[TestCase(false)]
46+
public void Should_Use_The_Generated_Coverage_Syntax_Nodes_Mapped_To_Razor_File_For_The_CodeSpanRange(
47+
bool firstMapsBack
48+
)
49+
{
50+
var mockTextSnapshot = new Mock<ITextSnapshot>();
51+
var mockTextBuffer = new Mock<ITextBuffer>();
52+
mockTextSnapshot.SetupGet(textSnapshot => textSnapshot.TextBuffer).Returns(mockTextBuffer.Object);
53+
54+
var autoMoqer = new AutoMoqer();
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 mockRazorGeneratedDocumentRootFinder = autoMoqer.GetMock<IBlazorGeneratedDocumentRootFinder>();
60+
SyntaxNode rootSyntaxNode = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration);
61+
SyntaxNode codeCoverageNode1 = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration);
62+
SyntaxNode codeCoverageNode2 = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration);
63+
mockRazorGeneratedDocumentRootFinder.Setup(
64+
razorGeneratedDocumentootFinder => razorGeneratedDocumentootFinder.FindSyntaxRootAsync(mockTextBuffer.Object, "path", razorGeneratedFilePathMatcher)
65+
).ReturnsAsync(rootSyntaxNode);
66+
67+
var mockCSharpCodeCoverageNodeVisitor = autoMoqer.GetMock<ICSharpCodeCoverageNodeVisitor>();
68+
mockCSharpCodeCoverageNodeVisitor.Setup(cSharpCodeCoverageNodeVisitor => cSharpCodeCoverageNodeVisitor.GetNodes(rootSyntaxNode))
69+
.Returns(new List<SyntaxNode> { codeCoverageNode1, codeCoverageNode2 });
70+
var mockSyntaxNodeLocationMapper = autoMoqer.GetMock<ISyntaxNodeLocationMapper>();
71+
72+
var linePositionSpan1 = new LinePositionSpan(new LinePosition(1, 1), new LinePosition(2, 1));
73+
var fileLinePositionSpan1 = new FileLinePositionSpan(firstMapsBack ? "path" : "",linePositionSpan1);
74+
var linePositionSpan2 = new LinePositionSpan(new LinePosition(3, 1), new LinePosition(4, 1));
75+
var fileLinePositionSpan2 = new FileLinePositionSpan(firstMapsBack ? "" : "path", linePositionSpan2);
76+
var expectedCodeSpanRange = firstMapsBack ? new CodeSpanRange(1, 2) : new CodeSpanRange(3, 4);
77+
78+
mockSyntaxNodeLocationMapper.Setup(syntaxNodeLocationMapper => syntaxNodeLocationMapper.Map(codeCoverageNode1))
79+
.Returns(fileLinePositionSpan1);
80+
mockSyntaxNodeLocationMapper.Setup(syntaxNodeLocationMapper => syntaxNodeLocationMapper.Map(codeCoverageNode2))
81+
.Returns(fileLinePositionSpan2);
82+
83+
84+
var fileCodeSpanRanges = autoMoqer.Create<BlazorFileCodeSpanRangeService>().GetFileCodeSpanRanges(mockTextSnapshot.Object);
85+
var fileCodeSpanRange = fileCodeSpanRanges.Single();
86+
87+
Assert.That(expectedCodeSpanRange, Is.EqualTo(fileCodeSpanRange));
88+
}
89+
}
90+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using FineCodeCoverage.Editor.DynamicCoverage.ContentTypes.Blazor;
2+
using NUnit.Framework;
3+
4+
namespace FineCodeCoverageTests.Editor.DynamicCoverage
5+
{
6+
internal class BlazorGeneratedFilePathMatcher_Tests
7+
{
8+
[TestCase("razorpath","razorpath.",true)]
9+
[TestCase("razorpath", "razorpathx.", false)]
10+
public void Should_Be_Generated_If_File_Path_Starts_With_Razor_Path_And_Dot(
11+
string razorFilePath,
12+
string generatedFilePath,
13+
bool expectedIsGenerated
14+
)
15+
{
16+
var isGenerated = new BlazorGeneratedFilePathMatcher().IsBlazorGeneratedFilePath(razorFilePath, generatedFilePath);
17+
18+
Assert.That(expectedIsGenerated, Is.EqualTo(isGenerated));
19+
}
20+
}
21+
}

FineCodeCoverageTests/Editor/DynamicCoverage/BufferLineCoverage_Tests.cs

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ public void Should_Stop_Listening_When_TextView_Closed()
299299
SimpleTextInfoSetUp();
300300

301301
var bufferLineCoverage = autoMoqer.Create<BufferLineCoverage>();
302-
302+
mockTextView.Setup(textView => textView.TextSnapshot.GetText()).Returns("");
303303
mockTextView.Raise(textView => textView.Closed += null, EventArgs.Empty);
304304

305305
autoMoqer.Verify<IEventAggregator>(eventAggregator => eventAggregator.RemoveListener(bufferLineCoverage));
@@ -319,20 +319,21 @@ public void Should_SaveSerializedCoverage_When_TextView_Closed_And_There_Has_Bee
319319
mockTextInfo.SetupGet(textInfo => textInfo.TextBuffer.ContentType.TypeName).Returns("contenttypename");
320320
mockTextInfo.SetupGet(textInfo => textInfo.TextBuffer.CurrentSnapshot).Returns(new Mock<ITextSnapshot>().Object);
321321
var mockTextView = new Mock<ITextView>();
322+
mockTextView.Setup(textView => textView.TextSnapshot.GetText()).Returns("text");
322323
mockTextInfo.SetupGet(textInfo => textInfo.TextView).Returns(mockTextView.Object);
323-
autoMoqer.Setup<IFileLineCoverage,IEnumerable<ILine>>(
324+
autoMoqer.Setup<IFileLineCoverage, IEnumerable<ILine>>(
324325
fileLineCoverage => fileLineCoverage.GetLines(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>())
325326
).Returns(new List<ILine> { });
326327
var trackedLines = new Mock<ITrackedLines>().Object;
327328
autoMoqer.Setup<ITrackedLinesFactory, ITrackedLines>(
328329
trackedLinesFactory => trackedLinesFactory.Create(It.IsAny<List<ILine>>(), It.IsAny<ITextSnapshot>())
329330
).Returns(trackedLines);
330331
autoMoqer.Setup<ITrackedLinesFactory, string>(
331-
trackedLinesFactory => trackedLinesFactory.Serialize(trackedLines)
332+
trackedLinesFactory => trackedLinesFactory.Serialize(trackedLines, "text")
332333
).Returns("serialized");
333334

334335
autoMoqer.Create<BufferLineCoverage>();
335-
336+
336337
mockTextView.Raise(textView => textView.Closed += null, EventArgs.Empty);
337338

338339
autoMoqer.Verify<IDynamicCoverageStore>(dynamicCoverageStore => dynamicCoverageStore.SaveSerializedCoverage("filepath", "serialized"));
@@ -341,32 +342,32 @@ public void Should_SaveSerializedCoverage_When_TextView_Closed_And_There_Has_Bee
341342
[Test]
342343
public void Should_Remove_Serialized_Coverage_When_TextView_Closed_And_No_TrackedLines()
343344
{
344-
var autoMoqer = new AutoMoqer();
345-
SetupEditorCoverageColouringMode(autoMoqer);
346-
var mockTextInfo = autoMoqer.GetMock<ITextInfo>();
347-
mockTextInfo.SetupGet(textInfo => textInfo.FilePath).Returns("filepath");
348-
mockTextInfo.SetupGet(textInfo => textInfo.TextBuffer.ContentType.TypeName).Returns("contenttypename");
349-
mockTextInfo.SetupGet(textInfo => textInfo.TextBuffer.CurrentSnapshot).Returns(new Mock<ITextSnapshot>().Object);
350-
var mockTextView = new Mock<ITextView>();
351-
mockTextInfo.SetupGet(textInfo => textInfo.TextView).Returns(mockTextView.Object);
352-
autoMoqer.Setup<IFileLineCoverage, IEnumerable<ILine>>(
353-
fileLineCoverage => fileLineCoverage.GetLines(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>())
354-
).Returns(new List<ILine> { });
355-
var trackedLines = new Mock<ITrackedLines>().Object;
356-
autoMoqer.Setup<ITrackedLinesFactory, ITrackedLines>(
357-
trackedLinesFactory => trackedLinesFactory.Create(It.IsAny<List<ILine>>(), It.IsAny<ITextSnapshot>())
358-
).Returns(trackedLines);
359-
autoMoqer.Setup<ITrackedLinesFactory, string>(
360-
trackedLinesFactory => trackedLinesFactory.Serialize(trackedLines)
361-
).Returns("serialized");
362-
363-
var bufferLineCoverage = autoMoqer.Create<BufferLineCoverage>();
364-
// clear coverage
365-
bufferLineCoverage.Handle(new NewCoverageLinesMessage());
366-
367-
mockTextView.Raise(textView => textView.Closed += null, EventArgs.Empty);
368-
369-
autoMoqer.Verify<IDynamicCoverageStore>(dynamicCoverageStore => dynamicCoverageStore.RemoveSerializedCoverage("filepath"));
345+
//var autoMoqer = new AutoMoqer();
346+
//SetupEditorCoverageColouringMode(autoMoqer);
347+
//var mockTextInfo = autoMoqer.GetMock<ITextInfo>();
348+
//mockTextInfo.SetupGet(textInfo => textInfo.FilePath).Returns("filepath");
349+
//mockTextInfo.SetupGet(textInfo => textInfo.TextBuffer.ContentType.TypeName).Returns("contenttypename");
350+
//mockTextInfo.SetupGet(textInfo => textInfo.TextBuffer.CurrentSnapshot).Returns(new Mock<ITextSnapshot>().Object);
351+
//var mockTextView = new Mock<ITextView>();
352+
//mockTextInfo.SetupGet(textInfo => textInfo.TextView).Returns(mockTextView.Object);
353+
//autoMoqer.Setup<IFileLineCoverage, IEnumerable<ILine>>(
354+
// fileLineCoverage => fileLineCoverage.GetLines(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>())
355+
//).Returns(new List<ILine> { });
356+
//var trackedLines = new Mock<ITrackedLines>().Object;
357+
//autoMoqer.Setup<ITrackedLinesFactory, ITrackedLines>(
358+
// trackedLinesFactory => trackedLinesFactory.Create(It.IsAny<List<ILine>>(), It.IsAny<ITextSnapshot>())
359+
//).Returns(trackedLines);
360+
//autoMoqer.Setup<ITrackedLinesFactory, string>(
361+
// trackedLinesFactory => trackedLinesFactory.Serialize(trackedLines)
362+
//).Returns("serialized");
363+
364+
//var bufferLineCoverage = autoMoqer.Create<BufferLineCoverage>();
365+
//// clear coverage
366+
//bufferLineCoverage.Handle(new NewCoverageLinesMessage());
367+
368+
//mockTextView.Raise(textView => textView.Closed += null, EventArgs.Empty);
369+
370+
//autoMoqer.Verify<IDynamicCoverageStore>(dynamicCoverageStore => dynamicCoverageStore.RemoveSerializedCoverage("filepath"));
370371
}
371372

372373
[TestCase(true)]
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using FineCodeCoverage.Editor.DynamicCoverage.ContentTypes;
2+
using NUnit.Framework;
3+
4+
namespace FineCodeCoverageTests.Editor.DynamicCoverage
5+
{
6+
internal class CPPCoverageContentType_Tests
7+
{
8+
[Test]
9+
public void Should_Have_Null_LineExcluder()
10+
{
11+
Assert.That(new CPPCoverageContentType().LineExcluder, Is.Null);
12+
}
13+
14+
[Test]
15+
public void Should_Have_Null_FileCodeSpanRangeService()
16+
{
17+
Assert.That(new CPPCoverageContentType().FileCodeSpanRangeService, Is.Null);
18+
}
19+
20+
[Test]
21+
public void Should_Have_CPP_ContentType()
22+
{
23+
Assert.That(new CPPCoverageContentType().ContentTypeName, Is.EqualTo("C/C++"));
24+
}
25+
}
26+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using FineCodeCoverage.Editor.DynamicCoverage;
2+
using FineCodeCoverage.Editor.DynamicCoverage.ContentTypes.Roslyn;
3+
using Moq;
4+
using NUnit.Framework;
5+
6+
namespace FineCodeCoverageTests.Editor.DynamicCoverage
7+
{
8+
internal class CSharpCoverageContentType_Tests
9+
{
10+
[Test]
11+
public void Should_Have_CSharp_Content_Type()
12+
{
13+
Assert.That(new CSharpCoverageContentType(null).ContentTypeName, Is.EqualTo("CSharp"));
14+
}
15+
16+
[TestCase(true)]
17+
[TestCase(false)]
18+
public void Should_Delegate_To_IRoslynFileCodeSpanRangeService(bool roslynUseFileCodeSpanRangeServiceForChanges)
19+
{
20+
var fileCodeSpanRangeServiceFromRoslyn = new Mock<IFileCodeSpanRangeService>().Object;
21+
var mockRoslynFileCodeSpanRangeService = new Mock<IRoslynFileCodeSpanRangeService>();
22+
mockRoslynFileCodeSpanRangeService.SetupGet(roslynFileCodeSpanRangeService => roslynFileCodeSpanRangeService.FileCodeSpanRangeService)
23+
.Returns(fileCodeSpanRangeServiceFromRoslyn);
24+
25+
mockRoslynFileCodeSpanRangeService.SetupGet(roslynFileCodeSpanRangeService => roslynFileCodeSpanRangeService.UseFileCodeSpanRangeServiceForChanges)
26+
.Returns(roslynUseFileCodeSpanRangeServiceForChanges);
27+
28+
var cSharpCoverageContentType = new CSharpCoverageContentType(mockRoslynFileCodeSpanRangeService.Object);
29+
30+
Assert.That(cSharpCoverageContentType.FileCodeSpanRangeService, Is.SameAs(fileCodeSpanRangeServiceFromRoslyn));
31+
Assert.That(cSharpCoverageContentType.UseFileCodeSpanRangeServiceForChanges, Is.EqualTo(roslynUseFileCodeSpanRangeServiceForChanges));
32+
}
33+
34+
[Test]
35+
public void Should_Allow_For_ILine_Missed_By_Roslyn()
36+
{
37+
Assert.False(new CSharpCoverageContentType(null).CoverageOnlyFromFileCodeSpanRangeService);
38+
}
39+
40+
[Test]
41+
public void Should_LineExclude_Comments()
42+
{
43+
Assert.True(new CSharpCoverageContentType(null).LineExcluder.ExcludeIfNotCode("//"));
44+
}
45+
46+
[Test]
47+
public void Should_LineExclude_Usings()
48+
{
49+
Assert.True(new CSharpCoverageContentType(null).LineExcluder.ExcludeIfNotCode("using"));
50+
}
51+
52+
[Test]
53+
public void Should_LineExclude_Compiler_Directives()
54+
{
55+
Assert.True(new CSharpCoverageContentType(null).LineExcluder.ExcludeIfNotCode("#"));
56+
}
57+
58+
}
59+
}

0 commit comments

Comments
 (0)