Skip to content

Commit

Permalink
backup
Browse files Browse the repository at this point in the history
  • Loading branch information
tonyhallett committed May 8, 2024
1 parent b71b4c4 commit e787be9
Show file tree
Hide file tree
Showing 15 changed files with 229 additions and 129 deletions.
3 changes: 3 additions & 0 deletions FineCodeCoverage/FineCodeCoverage.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@
<PackageReference Include="Newtonsoft.Json">
<Version>13.0.1</Version>
</PackageReference>
<PackageReference Include="NUnit">
<Version>3.13.1</Version>
</PackageReference>
<PackageReference Include="ReflectObject">
<Version>1.0.0</Version>
</PackageReference>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ public void Should_Not_UseFileCodeSpanRangeServiceForChanges()
}

[Test]
public void Should_CoverageOnlyFromFileCodeSpanRangeService()
public void Should_CoverageFromFileCodeSpanRangeService_And_Additional_Lines()
{
Assert.True(new BlazorCoverageContentType(null).CoverageOnlyFromFileCodeSpanRangeService);
Assert.False(new BlazorCoverageContentType(null).CoverageOnlyFromFileCodeSpanRangeService);
}

[Test]
Expand Down
146 changes: 102 additions & 44 deletions FineCodeCoverageTests/Editor/DynamicCoverage/BufferLineCoverage_Tests.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public void Should_Have_NewCodeTracker_When_CoverageContentType_Has_LineExcluder

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

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

mockContainingCodeTrackedLinesFactory.VerifyAll();
}
Expand Down Expand Up @@ -116,42 +116,41 @@ public void Should_Use_CoverageContentType_FileCodeSpanRangeService_When_UseFile

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

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

mockContainingCodeTrackedLinesFactory.VerifyAll();
}

[Test]
public void Should_Create_Non_Tracking_When_Coverage_Lines_Not_Within_TextSnapshot()
[TestCase(true)]
[TestCase(false)]
public void Should_Create_Null_TrackedLines__When_Coverage_Lines_Not_Within_TextSnapshot(bool inSnapshot)
{
var line1 = new Line(1);
var line2 = new Line(100);
var line2 = new Line(inSnapshot ? 2 : 100);

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

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

mockContainingCodeTrackedLinesFactory.Setup(containingCodeTrackedLinesFactory => containingCodeTrackedLinesFactory.Create(
new List<IContainingCodeTracker> { },
null,
null
)).Returns(trackedLinesFromFactory);
var mockCoverageContentType = new Mock<ICoverageContentType>();
mockCoverageContentType.SetupGet(coverageContentType => coverageContentType.ContentTypeName).Returns("contenttypename");
mockCoverageContentType.SetupGet(coverageContentType => coverageContentType.FileCodeSpanRangeService).Returns(new Mock<IFileCodeSpanRangeService>().Object);
mockCoverageContentType.SetupGet(coverageContentTyoe => coverageContentTyoe.UseFileCodeSpanRangeServiceForChanges).Returns(true);
mockCoverageContentType.SetupGet(coverageContentType => coverageContentType.LineExcluder).Returns(new Mock<ILineExcluder>().Object);
autoMoqer.SetInstance(new ICoverageContentType[] { mockCoverageContentType.Object });

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

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

mockContainingCodeTrackedLinesFactory.VerifyAll();
if (inSnapshot)
{
Assert.IsNotNull(trackedLines);
}
else
{
Assert.IsNull(trackedLines);
}
}

[TestCase(ContainingCodeTrackerType.CoverageLines, 1, DynamicCoverageType.Covered, true, true)]
Expand Down Expand Up @@ -205,7 +204,7 @@ bool newLines
}
else
{
Assert.Null(serializedEditorDynamicCoverage.NewCodeLineNumbers);
Assert.IsEmpty(serializedEditorDynamicCoverage.NewCodeLineNumbers);
}
Assert.That(serializedEditorDynamicCoverage.Text, Is.EqualTo("text"));
var serializedContainingCodeTracker = serializedEditorDynamicCoverage.SerializedContainingCodeTrackers.Single();
Expand All @@ -217,34 +216,21 @@ bool newLines
Assert.That(serializedEditorDynamicCoverage.UsedFileCodeSpanRangeService, Is.EqualTo(usedFileCodeSpanRangeService));
}

[Test]
public void Should_Deserialize_As_Empty_TrackedLines_If_Text_Has_Changed_Outside_Editor()
[TestCase(true)]
[TestCase(false)]
public void Should_Deserialize_AsNull_TrackedLines_If_Text_Has_Changed_Outside_Editor(bool textChanged)
{
var autoMoqer = new AutoMoqer();
var mockNewCodeTrackerFactory = autoMoqer.GetMock<INewCodeTrackerFactory>();
mockNewCodeTrackerFactory.Setup(newCodeTrackerFactory => newCodeTrackerFactory.Create(It.IsAny<ILineExcluder>(), It.IsAny<List<int>>(), It.IsAny<ITextSnapshot>()))
.Returns(new Mock<INewCodeTracker>().Object);

var mockTextSnaphot = new Mock<ITextSnapshot>();
mockTextSnaphot.SetupGet(textSnapshot => textSnapshot.ContentType.TypeName)
.Returns("contenttypename");
mockTextSnaphot.Setup(textSnapshot => textSnapshot.GetText()).Returns("changedtext");
mockTextSnaphot.Setup(textSnapshot => textSnapshot.GetText()).Returns(textChanged ? "changedtext" : "text");

var newLineExcluder = new Mock<ILineExcluder>().Object;
var mockCoverageContentType = new Mock<ICoverageContentType>();
mockCoverageContentType.SetupGet(coverageContentType => coverageContentType.ContentTypeName)
.Returns("contenttypename");
mockCoverageContentType.SetupGet(coverageContentType => coverageContentType.LineExcluder).Returns(newLineExcluder);
autoMoqer.SetInstance(new ICoverageContentType[] { mockCoverageContentType.Object });

var mockContainingCodeTrackedLinesFactory = autoMoqer.GetMock<IContainingCodeTrackedLinesFactory>();
var containingCodeTrackerTrackedLinesFromFactory = new Mock<IContainingCodeTrackerTrackedLines>().Object;
mockContainingCodeTrackedLinesFactory.Setup(
containingCodeTrackedLinesFactory => containingCodeTrackedLinesFactory.Create(
new List<IContainingCodeTracker>(),
null,
null
)).Returns(containingCodeTrackerTrackedLinesFromFactory);

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

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

var deserializedTrackedLines = containingCodeTrackedLinesBuilder.Create(
"serializedState", mockTextSnaphot.Object,"");

var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
if (textChanged)
{
Assert.IsNull(deserializedTrackedLines);
}
else
{
Assert.IsNotNull(deserializedTrackedLines);
}

Assert.False(containingCodeTrackerTrackedLinesWithState.UsedFileCodeSpanRangeService);
Assert.That(containingCodeTrackerTrackedLinesWithState.Wrapped, Is.SameAs(containingCodeTrackerTrackedLinesFromFactory));
}
}

Expand Down Expand Up @@ -301,7 +294,7 @@ public void Should_Create_CoverageLines_ContainingCodeTracker_For_Each_Line_When

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

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

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

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

var trackedLinesWithState = containingCodeTrackedLinesBuilder.Create(lines, mockTextSnapshot.Object) as ContainingCodeTrackerTrackedLinesWithState;
var trackedLinesWithState = containingCodeTrackedLinesBuilder.Create(lines, mockTextSnapshot.Object,"") as ContainingCodeTrackerTrackedLinesWithState;

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


var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;

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


var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;

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

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


var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;

Assert.That(containingCodeTrackerTrackedLinesWithState.Wrapped, Is.SameAs(containingCodeTrackerTrackedLinesFromFactory));
}
Expand Down Expand Up @@ -949,7 +942,7 @@ public void Should_Create_CoverageLines_ContainingCodeTracker_For_Each_Line()

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

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

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


var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;
Assert.False(containingCodeTrackerTrackedLinesWithState.UsedFileCodeSpanRangeService);
Assert.That(containingCodeTrackerTrackedLinesWithState.Wrapped, Is.SameAs(containingCodeTrackerTrackedLinesFromFactory));

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


var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object) as ContainingCodeTrackerTrackedLinesWithState;
var containingCodeTrackerTrackedLinesWithState = containingCodeTrackedLinesBuilder.Create("serializedState", mockTextSnaphot.Object, "") as ContainingCodeTrackerTrackedLinesWithState;

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

Expand Down
10 changes: 8 additions & 2 deletions FineCodeCoverageTests/TestContainerDiscovery_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -392,8 +392,14 @@ public void Should_Not_Handle_OperationState_Changes_When_The_testOperationState

RaiseTestExecutionCancelling();
Assert.That(invoked, Is.EqualTo(canInvoke));
}

}
[Test]
public void Should_Send_TestExecutionStartingMessage_When_TestExecutionStarting()
{
var operation = new Mock<IOperation>().Object;
RaiseTestExecutionStarting(operation);
mocker.Verify<IEventAggregator>(eventAggregator => eventAggregator.SendMessage(It.IsAny<TestExecutionStartingMessage>(),null));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public BlazorCoverageContentType(IBlazorFileCodeSpanRangeService blazorFileCodeS

public IFileCodeSpanRangeService FileCodeSpanRangeService => this.blazorFileCodeSpanRangeService;

public bool CoverageOnlyFromFileCodeSpanRangeService => true;
public bool CoverageOnlyFromFileCodeSpanRangeService => false;

// Unfortunately, the generated docuent from the workspace is not up to date
public bool UseFileCodeSpanRangeServiceForChanges => false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public List<CodeSpanRange> GetFileCodeSpanRanges(ITextSnapshot snapshot)
{
return null; // sometimes the generated document has not been generated
}

return nodes.Select(node => new { Node = node, MappedLineSpan = this.syntaxNodeLocationMapper.Map(node) })
.Where(a => a.MappedLineSpan.Path == filePath)
.Select(a => new CodeSpanRange(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using FineCodeCoverage.Core.Utilities;
using FineCodeCoverage.Editor.Tagging.Base;
using FineCodeCoverage.Engine;
using FineCodeCoverage.Engine.Model;
using FineCodeCoverage.Impl;
using FineCodeCoverage.Options;
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Editor;

namespace FineCodeCoverage.Editor.DynamicCoverage
{
internal class BufferLineCoverage : IBufferLineCoverage, IListener<NewCoverageLinesMessage>
internal class BufferLineCoverage :
IBufferLineCoverage, IListener<NewCoverageLinesMessage>, IListener<TestExecutionStartingMessage>
{
private readonly ITextInfo textInfo;
private readonly IEventAggregator eventAggregator;
Expand All @@ -22,6 +24,8 @@ internal class BufferLineCoverage : IBufferLineCoverage, IListener<NewCoverageLi
private ITrackedLines trackedLines;
private bool? editorCoverageModeOff;
private IFileLineCoverage fileLineCoverage;
private Nullable<DateTime> lastChanged;
private DateTime lastTestExecutionStarting;
public BufferLineCoverage(
IFileLineCoverage fileLineCoverage,
ITextInfo textInfo,
Expand Down Expand Up @@ -100,7 +104,15 @@ private void CreateTrackedLinesIfRequired(bool initial)
private void CreateTrackedLinesIfRequiredWithMessage()
{
bool hadTrackedLines = this.trackedLines != null;
this.CreateTrackedLinesIfRequired(false);
if (!this.lastChanged.HasValue || this.lastChanged < this.lastTestExecutionStarting)
{
this.CreateTrackedLinesIfRequired(false);
}
else
{
this.trackedLines = null;
}

bool hasTrackedLines = this.trackedLines != null;
if (hadTrackedLines || hasTrackedLines)
{
Expand All @@ -110,19 +122,20 @@ private void CreateTrackedLinesIfRequiredWithMessage()

private void CreateTrackedLines(bool initial)
{
string filePath = this.textInfo.FilePath;
ITextSnapshot currentSnapshot = this.textBuffer.CurrentSnapshot;
if (initial)
{
string serializedCoverage = this.dynamicCoverageStore.GetSerializedCoverage(this.textInfo.FilePath);
string serializedCoverage = this.dynamicCoverageStore.GetSerializedCoverage(filePath);
if (serializedCoverage != null)
{
this.trackedLines = this.trackedLinesFactory.Create(serializedCoverage, currentSnapshot);
this.trackedLines = this.trackedLinesFactory.Create(serializedCoverage, currentSnapshot, filePath);
return;
}
}

var lines = this.fileLineCoverage.GetLines(this.textInfo.FilePath).ToList();
this.trackedLines = this.trackedLinesFactory.Create(lines, currentSnapshot);
this.trackedLines = this.trackedLinesFactory.Create(lines, currentSnapshot, filePath);
}

private bool EditorCoverageColouringModeOff()
Expand All @@ -133,6 +146,7 @@ private bool EditorCoverageColouringModeOff()

private void TextBuffer_ChangedOnBackground(object sender, TextContentChangedEventArgs e)
{
this.lastChanged = DateTime.Now;
if (this.trackedLines != null)
{
this.UpdateTrackedLines(e);
Expand Down Expand Up @@ -178,5 +192,7 @@ public void Handle(NewCoverageLinesMessage message)
this.CreateTrackedLinesIfRequiredWithMessage();
}
}

public void Handle(TestExecutionStartingMessage message) => this.lastTestExecutionStarting = DateTime.Now;
}
}
Loading

0 comments on commit e787be9

Please sign in to comment.