Skip to content

Commit e787be9

Browse files
committed
backup
1 parent b71b4c4 commit e787be9

File tree

15 files changed

+229
-129
lines changed

15 files changed

+229
-129
lines changed

FineCodeCoverage/FineCodeCoverage.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,9 @@
189189
<PackageReference Include="Newtonsoft.Json">
190190
<Version>13.0.1</Version>
191191
</PackageReference>
192+
<PackageReference Include="NUnit">
193+
<Version>3.13.1</Version>
194+
</PackageReference>
192195
<PackageReference Include="ReflectObject">
193196
<Version>1.0.0</Version>
194197
</PackageReference>

FineCodeCoverageTests/Editor/DynamicCoverage/BlazorCoverageContentType_Tests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ public void Should_Not_UseFileCodeSpanRangeServiceForChanges()
4949
}
5050

5151
[Test]
52-
public void Should_CoverageOnlyFromFileCodeSpanRangeService()
52+
public void Should_CoverageFromFileCodeSpanRangeService_And_Additional_Lines()
5353
{
54-
Assert.True(new BlazorCoverageContentType(null).CoverageOnlyFromFileCodeSpanRangeService);
54+
Assert.False(new BlazorCoverageContentType(null).CoverageOnlyFromFileCodeSpanRangeService);
5555
}
5656

5757
[Test]

FineCodeCoverageTests/Editor/DynamicCoverage/BufferLineCoverage_Tests.cs

Lines changed: 102 additions & 44 deletions
Large diffs are not rendered by default.

FineCodeCoverageTests/Editor/DynamicCoverage/ContainingCodeTrackedLinesBuilder_Tests.cs

Lines changed: 38 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public void Should_Have_NewCodeTracker_When_CoverageContentType_Has_LineExcluder
8585

8686
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
8787

88-
containingCodeTrackedLinesBuilder.Create(new List<ILine> {}, mockTextSnapshot.Object);
88+
containingCodeTrackedLinesBuilder.Create(new List<ILine> {}, mockTextSnapshot.Object,"");
8989

9090
mockContainingCodeTrackedLinesFactory.VerifyAll();
9191
}
@@ -116,42 +116,41 @@ public void Should_Use_CoverageContentType_FileCodeSpanRangeService_When_UseFile
116116

117117
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
118118

119-
containingCodeTrackedLinesBuilder.Create(new List<ILine> { }, mockTextSnapshot.Object);
119+
containingCodeTrackedLinesBuilder.Create(new List<ILine> { }, mockTextSnapshot.Object, "");
120120

121121
mockContainingCodeTrackedLinesFactory.VerifyAll();
122122
}
123123

124-
[Test]
125-
public void Should_Create_Non_Tracking_When_Coverage_Lines_Not_Within_TextSnapshot()
124+
[TestCase(true)]
125+
[TestCase(false)]
126+
public void Should_Create_Null_TrackedLines__When_Coverage_Lines_Not_Within_TextSnapshot(bool inSnapshot)
126127
{
127128
var line1 = new Line(1);
128-
var line2 = new Line(100);
129+
var line2 = new Line(inSnapshot ? 2 : 100);
129130

130131
var mockTextSnapshot = new Mock<ITextSnapshot>();
131132
mockTextSnapshot.SetupGet(textSnapshot => textSnapshot.ContentType.TypeName).Returns("contenttypename");
132133
mockTextSnapshot.SetupGet(textSnapshot => textSnapshot.LineCount).Returns(5);
133134
var autoMoqer = new AutoMoqer();
134135

135-
var mockContainingCodeTrackedLinesFactory = autoMoqer.GetMock<IContainingCodeTrackedLinesFactory>();
136136
var trackedLinesFromFactory = new Mock<IContainingCodeTrackerTrackedLines>().Object;
137137

138-
mockContainingCodeTrackedLinesFactory.Setup(containingCodeTrackedLinesFactory => containingCodeTrackedLinesFactory.Create(
139-
new List<IContainingCodeTracker> { },
140-
null,
141-
null
142-
)).Returns(trackedLinesFromFactory);
143138
var mockCoverageContentType = new Mock<ICoverageContentType>();
144139
mockCoverageContentType.SetupGet(coverageContentType => coverageContentType.ContentTypeName).Returns("contenttypename");
145-
mockCoverageContentType.SetupGet(coverageContentType => coverageContentType.FileCodeSpanRangeService).Returns(new Mock<IFileCodeSpanRangeService>().Object);
146-
mockCoverageContentType.SetupGet(coverageContentTyoe => coverageContentTyoe.UseFileCodeSpanRangeServiceForChanges).Returns(true);
147-
mockCoverageContentType.SetupGet(coverageContentType => coverageContentType.LineExcluder).Returns(new Mock<ILineExcluder>().Object);
148140
autoMoqer.SetInstance(new ICoverageContentType[] { mockCoverageContentType.Object });
149141

150142
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
151143

152-
containingCodeTrackedLinesBuilder.Create(new List<ILine> { line1, line2 }, mockTextSnapshot.Object);
144+
var trackedLines = containingCodeTrackedLinesBuilder.Create(new List<ILine> { line1, line2 }, mockTextSnapshot.Object,"");
153145

154-
mockContainingCodeTrackedLinesFactory.VerifyAll();
146+
if (inSnapshot)
147+
{
148+
Assert.IsNotNull(trackedLines);
149+
}
150+
else
151+
{
152+
Assert.IsNull(trackedLines);
153+
}
155154
}
156155

157156
[TestCase(ContainingCodeTrackerType.CoverageLines, 1, DynamicCoverageType.Covered, true, true)]
@@ -205,7 +204,7 @@ bool newLines
205204
}
206205
else
207206
{
208-
Assert.Null(serializedEditorDynamicCoverage.NewCodeLineNumbers);
207+
Assert.IsEmpty(serializedEditorDynamicCoverage.NewCodeLineNumbers);
209208
}
210209
Assert.That(serializedEditorDynamicCoverage.Text, Is.EqualTo("text"));
211210
var serializedContainingCodeTracker = serializedEditorDynamicCoverage.SerializedContainingCodeTrackers.Single();
@@ -217,34 +216,21 @@ bool newLines
217216
Assert.That(serializedEditorDynamicCoverage.UsedFileCodeSpanRangeService, Is.EqualTo(usedFileCodeSpanRangeService));
218217
}
219218

220-
[Test]
221-
public void Should_Deserialize_As_Empty_TrackedLines_If_Text_Has_Changed_Outside_Editor()
219+
[TestCase(true)]
220+
[TestCase(false)]
221+
public void Should_Deserialize_AsNull_TrackedLines_If_Text_Has_Changed_Outside_Editor(bool textChanged)
222222
{
223223
var autoMoqer = new AutoMoqer();
224-
var mockNewCodeTrackerFactory = autoMoqer.GetMock<INewCodeTrackerFactory>();
225-
mockNewCodeTrackerFactory.Setup(newCodeTrackerFactory => newCodeTrackerFactory.Create(It.IsAny<ILineExcluder>(), It.IsAny<List<int>>(), It.IsAny<ITextSnapshot>()))
226-
.Returns(new Mock<INewCodeTracker>().Object);
227224

228225
var mockTextSnaphot = new Mock<ITextSnapshot>();
229226
mockTextSnaphot.SetupGet(textSnapshot => textSnapshot.ContentType.TypeName)
230227
.Returns("contenttypename");
231-
mockTextSnaphot.Setup(textSnapshot => textSnapshot.GetText()).Returns("changedtext");
228+
mockTextSnaphot.Setup(textSnapshot => textSnapshot.GetText()).Returns(textChanged ? "changedtext" : "text");
232229

233-
var newLineExcluder = new Mock<ILineExcluder>().Object;
234230
var mockCoverageContentType = new Mock<ICoverageContentType>();
235231
mockCoverageContentType.SetupGet(coverageContentType => coverageContentType.ContentTypeName)
236232
.Returns("contenttypename");
237-
mockCoverageContentType.SetupGet(coverageContentType => coverageContentType.LineExcluder).Returns(newLineExcluder);
238233
autoMoqer.SetInstance(new ICoverageContentType[] { mockCoverageContentType.Object });
239-
240-
var mockContainingCodeTrackedLinesFactory = autoMoqer.GetMock<IContainingCodeTrackedLinesFactory>();
241-
var containingCodeTrackerTrackedLinesFromFactory = new Mock<IContainingCodeTrackerTrackedLines>().Object;
242-
mockContainingCodeTrackedLinesFactory.Setup(
243-
containingCodeTrackedLinesFactory => containingCodeTrackedLinesFactory.Create(
244-
new List<IContainingCodeTracker>(),
245-
null,
246-
null
247-
)).Returns(containingCodeTrackerTrackedLinesFromFactory);
248234

249235
var mockJsonConvertService = autoMoqer.GetMock<IJsonConvertService>();
250236
mockJsonConvertService.Setup(jsonConvertService => jsonConvertService.DeserializeObject<SerializedEditorDynamicCoverage>("serializedState"))
@@ -255,11 +241,18 @@ public void Should_Deserialize_As_Empty_TrackedLines_If_Text_Has_Changed_Outside
255241

256242
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
257243

244+
var deserializedTrackedLines = containingCodeTrackedLinesBuilder.Create(
245+
"serializedState", mockTextSnaphot.Object,"");
258246

259-
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
247+
if (textChanged)
248+
{
249+
Assert.IsNull(deserializedTrackedLines);
250+
}
251+
else
252+
{
253+
Assert.IsNotNull(deserializedTrackedLines);
254+
}
260255

261-
Assert.False(containingCodeTrackerTrackedLinesWithState.UsedFileCodeSpanRangeService);
262-
Assert.That(containingCodeTrackerTrackedLinesWithState.Wrapped, Is.SameAs(containingCodeTrackerTrackedLinesFromFactory));
263256
}
264257
}
265258

@@ -301,7 +294,7 @@ public void Should_Create_CoverageLines_ContainingCodeTracker_For_Each_Line_When
301294

302295
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
303296

304-
var trackedLinesWithState = containingCodeTrackedLinesBuilder.Create(new List<ILine> { line1, line2 }, mockTextSnapshot.Object) as ContainingCodeTrackerTrackedLinesWithState;
297+
var trackedLinesWithState = containingCodeTrackedLinesBuilder.Create(new List<ILine> { line1, line2 }, mockTextSnapshot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;
305298

306299
Assert.False(trackedLinesWithState.UsedFileCodeSpanRangeService);
307300
Assert.That(trackedLinesWithState.Wrapped, Is.SameAs(trackedLinesFromFactory));
@@ -373,7 +366,7 @@ List<IContainingCodeTracker> expectedOrderedContainingCodeTrackers
373366

374367
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
375368

376-
var trackedLinesWithState = containingCodeTrackedLinesBuilder.Create(lines, mockTextSnapshot.Object) as ContainingCodeTrackerTrackedLinesWithState;
369+
var trackedLinesWithState = containingCodeTrackedLinesBuilder.Create(lines, mockTextSnapshot.Object,"") as ContainingCodeTrackerTrackedLinesWithState;
377370

378371
Assert.That(trackedLinesWithState.Wrapped, Is.SameAs(trackedLinesFromFactory));
379372
Assert.True(trackedLinesWithState.UsedFileCodeSpanRangeService);
@@ -705,7 +698,7 @@ private void DeserializesContainingCodeTrackerTest(
705698
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
706699

707700

708-
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
701+
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;
709702

710703
Assert.True(containingCodeTrackerTrackedLinesWithState.UsedFileCodeSpanRangeService);
711704
Assert.That(containingCodeTrackerTrackedLinesWithState.Wrapped, Is.SameAs(containingCodeTrackerTrackedLinesFromFactory));
@@ -839,7 +832,7 @@ public void Should_Recreate_With_No_New_CodeTracker_If_No_Line_Excluder()
839832
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
840833

841834

842-
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
835+
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;
843836

844837
Assert.That(containingCodeTrackerTrackedLinesWithState.Wrapped, Is.SameAs(containingCodeTrackerTrackedLinesFromFactory));
845838

@@ -906,7 +899,7 @@ public void Should_Recreated_With_NewCodeTracker_With_Lines_From_CodeSpanRanges(
906899
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
907900

908901

909-
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
902+
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;
910903

911904
Assert.That(containingCodeTrackerTrackedLinesWithState.Wrapped, Is.SameAs(containingCodeTrackerTrackedLinesFromFactory));
912905
}
@@ -949,7 +942,7 @@ public void Should_Create_CoverageLines_ContainingCodeTracker_For_Each_Line()
949942

950943
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
951944

952-
var trackedLinesWithState = containingCodeTrackedLinesBuilder.Create(new List<ILine> { line1, line2 }, mockTextSnapshot.Object) as ContainingCodeTrackerTrackedLinesWithState;
945+
var trackedLinesWithState = containingCodeTrackedLinesBuilder.Create(new List<ILine> { line1, line2 }, mockTextSnapshot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;
953946

954947
Assert.False(trackedLinesWithState.UsedFileCodeSpanRangeService);
955948
Assert.That(trackedLinesWithState.Wrapped, Is.SameAs(trackedLinesFromFactory));
@@ -1030,7 +1023,7 @@ CoverageType expectedAdjustedCoverageType
10301023
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
10311024

10321025

1033-
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
1026+
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;
10341027
Assert.False(containingCodeTrackerTrackedLinesWithState.UsedFileCodeSpanRangeService);
10351028
Assert.That(containingCodeTrackerTrackedLinesWithState.Wrapped, Is.SameAs(containingCodeTrackerTrackedLinesFromFactory));
10361029

@@ -1084,7 +1077,7 @@ public void Should_Use_NewCodeTracker_With_NewLines_And_Line_Excluder_If_Coverag
10841077
var containingCodeTrackedLinesBuilder = autoMoqer.Create<ContainingCodeTrackedLinesBuilder>();
10851078

10861079

1087-
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
1080+
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;
10881081

10891082
Assert.That(containingCodeTrackerTrackedLinesWithState.Wrapped, Is.SameAs(containingCodeTrackerTrackedLinesFromFactory));
10901083

FineCodeCoverageTests/TestContainerDiscovery_Tests.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,8 +392,14 @@ public void Should_Not_Handle_OperationState_Changes_When_The_testOperationState
392392

393393
RaiseTestExecutionCancelling();
394394
Assert.That(invoked, Is.EqualTo(canInvoke));
395-
395+
}
396396

397-
}
397+
[Test]
398+
public void Should_Send_TestExecutionStartingMessage_When_TestExecutionStarting()
399+
{
400+
var operation = new Mock<IOperation>().Object;
401+
RaiseTestExecutionStarting(operation);
402+
mocker.Verify<IEventAggregator>(eventAggregator => eventAggregator.SendMessage(It.IsAny<TestExecutionStartingMessage>(),null));
403+
}
398404
}
399405
}

SharedProject/Editor/DynamicCoverage/ContentTypes/Blazor/BlazorCoverageContentType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public BlazorCoverageContentType(IBlazorFileCodeSpanRangeService blazorFileCodeS
2222

2323
public IFileCodeSpanRangeService FileCodeSpanRangeService => this.blazorFileCodeSpanRangeService;
2424

25-
public bool CoverageOnlyFromFileCodeSpanRangeService => true;
25+
public bool CoverageOnlyFromFileCodeSpanRangeService => false;
2626

2727
// Unfortunately, the generated docuent from the workspace is not up to date
2828
public bool UseFileCodeSpanRangeServiceForChanges => false;

SharedProject/Editor/DynamicCoverage/ContentTypes/Blazor/BlazorFileCodeSpanRangeService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public List<CodeSpanRange> GetFileCodeSpanRanges(ITextSnapshot snapshot)
5151
{
5252
return null; // sometimes the generated document has not been generated
5353
}
54+
5455
return nodes.Select(node => new { Node = node, MappedLineSpan = this.syntaxNodeLocationMapper.Map(node) })
5556
.Where(a => a.MappedLineSpan.Path == filePath)
5657
.Select(a => new CodeSpanRange(

SharedProject/Editor/DynamicCoverage/Management/BufferLineCoverage.cs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Diagnostics;
34
using System.Linq;
45
using FineCodeCoverage.Core.Utilities;
5-
using FineCodeCoverage.Editor.Tagging.Base;
66
using FineCodeCoverage.Engine;
77
using FineCodeCoverage.Engine.Model;
8+
using FineCodeCoverage.Impl;
89
using FineCodeCoverage.Options;
910
using Microsoft.VisualStudio.Text;
1011
using Microsoft.VisualStudio.Text.Editor;
1112

1213
namespace FineCodeCoverage.Editor.DynamicCoverage
1314
{
14-
internal class BufferLineCoverage : IBufferLineCoverage, IListener<NewCoverageLinesMessage>
15+
internal class BufferLineCoverage :
16+
IBufferLineCoverage, IListener<NewCoverageLinesMessage>, IListener<TestExecutionStartingMessage>
1517
{
1618
private readonly ITextInfo textInfo;
1719
private readonly IEventAggregator eventAggregator;
@@ -22,6 +24,8 @@ internal class BufferLineCoverage : IBufferLineCoverage, IListener<NewCoverageLi
2224
private ITrackedLines trackedLines;
2325
private bool? editorCoverageModeOff;
2426
private IFileLineCoverage fileLineCoverage;
27+
private Nullable<DateTime> lastChanged;
28+
private DateTime lastTestExecutionStarting;
2529
public BufferLineCoverage(
2630
IFileLineCoverage fileLineCoverage,
2731
ITextInfo textInfo,
@@ -100,7 +104,15 @@ private void CreateTrackedLinesIfRequired(bool initial)
100104
private void CreateTrackedLinesIfRequiredWithMessage()
101105
{
102106
bool hadTrackedLines = this.trackedLines != null;
103-
this.CreateTrackedLinesIfRequired(false);
107+
if (!this.lastChanged.HasValue || this.lastChanged < this.lastTestExecutionStarting)
108+
{
109+
this.CreateTrackedLinesIfRequired(false);
110+
}
111+
else
112+
{
113+
this.trackedLines = null;
114+
}
115+
104116
bool hasTrackedLines = this.trackedLines != null;
105117
if (hadTrackedLines || hasTrackedLines)
106118
{
@@ -110,19 +122,20 @@ private void CreateTrackedLinesIfRequiredWithMessage()
110122

111123
private void CreateTrackedLines(bool initial)
112124
{
125+
string filePath = this.textInfo.FilePath;
113126
ITextSnapshot currentSnapshot = this.textBuffer.CurrentSnapshot;
114127
if (initial)
115128
{
116-
string serializedCoverage = this.dynamicCoverageStore.GetSerializedCoverage(this.textInfo.FilePath);
129+
string serializedCoverage = this.dynamicCoverageStore.GetSerializedCoverage(filePath);
117130
if (serializedCoverage != null)
118131
{
119-
this.trackedLines = this.trackedLinesFactory.Create(serializedCoverage, currentSnapshot);
132+
this.trackedLines = this.trackedLinesFactory.Create(serializedCoverage, currentSnapshot, filePath);
120133
return;
121134
}
122135
}
123136

124137
var lines = this.fileLineCoverage.GetLines(this.textInfo.FilePath).ToList();
125-
this.trackedLines = this.trackedLinesFactory.Create(lines, currentSnapshot);
138+
this.trackedLines = this.trackedLinesFactory.Create(lines, currentSnapshot, filePath);
126139
}
127140

128141
private bool EditorCoverageColouringModeOff()
@@ -133,6 +146,7 @@ private bool EditorCoverageColouringModeOff()
133146

134147
private void TextBuffer_ChangedOnBackground(object sender, TextContentChangedEventArgs e)
135148
{
149+
this.lastChanged = DateTime.Now;
136150
if (this.trackedLines != null)
137151
{
138152
this.UpdateTrackedLines(e);
@@ -178,5 +192,7 @@ public void Handle(NewCoverageLinesMessage message)
178192
this.CreateTrackedLinesIfRequiredWithMessage();
179193
}
180194
}
195+
196+
public void Handle(TestExecutionStartingMessage message) => this.lastTestExecutionStarting = DateTime.Now;
181197
}
182198
}

0 commit comments

Comments
 (0)