Skip to content

Commit 9d256f1

Browse files
authored
Merge pull request #433 from tonyhallett/toggle-coverage-indicators
add toggle functionality
2 parents e997af3 + 4dfbef9 commit 9d256f1

15 files changed

+479
-169
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using AutoMoq;
7+
using FineCodeCoverage.Core.Utilities;
8+
using FineCodeCoverage.Editor.IndicatorVisibility;
9+
using FineCodeCoverage.Output;
10+
using FineCodeCoverageTests.Test_helpers;
11+
using Moq;
12+
using NUnit.Framework;
13+
14+
namespace FineCodeCoverageTests.Editor.IndicatorVisibility
15+
{
16+
internal class FileIndicatorVisibility_Tests
17+
{
18+
[Test]
19+
public void SHould_Export_As_Initializable()
20+
{
21+
ExportsInitializable.Should_Export_IInitializable(typeof(FileIndicatorVisibility));
22+
}
23+
24+
[Test]
25+
public void Should_Add_Itself_As_EventAggregator_Listener()
26+
{
27+
var mockEventAggregator = new Mock<IEventAggregator>();
28+
29+
var fileIndicatorVisibility = new FileIndicatorVisibility(mockEventAggregator.Object);
30+
31+
mockEventAggregator.Verify(eventAggregator => eventAggregator.AddListener(fileIndicatorVisibility,null), Times.Once());
32+
}
33+
34+
[Test]
35+
public void Should_Toggle_IsVisible_And_Raise_VisibilityChanged_When_Handle_ToggleCoverageIndicatorsMessage()
36+
{
37+
var fileIndicatorVisibility = new AutoMoqer().Create<FileIndicatorVisibility>();
38+
var visibilityChangedCount = 0;
39+
fileIndicatorVisibility.VisibilityChanged += (sender, args) => {
40+
visibilityChangedCount++;
41+
};
42+
Assert.True(fileIndicatorVisibility.IsVisible(""));
43+
fileIndicatorVisibility.Handle(new ToggleCoverageIndicatorsMessage());
44+
Assert.False(fileIndicatorVisibility.IsVisible(""));
45+
Assert.AreEqual(1, visibilityChangedCount);
46+
fileIndicatorVisibility.Handle(new ToggleCoverageIndicatorsMessage());
47+
Assert.True(fileIndicatorVisibility.IsVisible(""));
48+
Assert.AreEqual(2, visibilityChangedCount);
49+
50+
}
51+
}
52+
}

FineCodeCoverageTests/Editor/Tagging/Base/CoverageTagger_Tests.cs

Lines changed: 71 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using AutoMoq;
22
using FineCodeCoverage.Core.Utilities;
33
using FineCodeCoverage.Editor.DynamicCoverage;
4+
using FineCodeCoverage.Editor.IndicatorVisibility;
45
using FineCodeCoverage.Editor.Tagging.Base;
56
using FineCodeCoverage.Engine.Model;
67
using FineCodeCoverageTests.Editor.Tagging.Base.Types;
@@ -11,6 +12,7 @@
1112
using NUnit.Framework;
1213
using System;
1314
using System.Collections.Generic;
15+
using System.Linq;
1416
using LineSpan = FineCodeCoverageTests.Editor.Tagging.Types.LineSpan;
1517

1618
namespace FineCodeCoverageTests.Editor.Tagging.Base
@@ -122,7 +124,8 @@ public void Should_HasCoverage_When_Has(bool hasCoverage)
122124
new Mock<ICoverageTypeFilter>().Object,
123125
new Mock<IEventAggregator>().Object,
124126
new Mock<ILineSpanLogic>(MockBehavior.Strict).Object,
125-
new Mock<ILineSpanTagger<DummyTag>>().Object
127+
new Mock<ILineSpanTagger<DummyTag>>().Object,
128+
new Mock<IFileIndicatorVisibility>().Object
126129
);
127130

128131
Assert.That(coverageTagger.HasCoverage, Is.EqualTo(hasCoverage));
@@ -161,7 +164,8 @@ public void Should_Not_Raise_TagsChanged_For_CoverageTypeFilterChangedMessage_If
161164
new DummyCoverageTypeFilter(),
162165
new Mock<IEventAggregator>().Object,
163166
new Mock<ILineSpanLogic>(MockBehavior.Strict).Object,
164-
new Mock<ILineSpanTagger<DummyTag>>().Object
167+
new Mock<ILineSpanTagger<DummyTag>>().Object,
168+
new Mock<IFileIndicatorVisibility>().Object
165169
);
166170

167171
var tagsChanged = false;
@@ -185,7 +189,8 @@ public void Should_Return_No_Tags_If_No_Coverage_Lines()
185189
new Mock<ICoverageTypeFilter>().Object,
186190
new Mock<IEventAggregator>().Object,
187191
new Mock<ILineSpanLogic>(MockBehavior.Strict).Object,
188-
new Mock<ILineSpanTagger<DummyTag>>().Object
192+
new Mock<ILineSpanTagger<DummyTag>>().Object,
193+
new Mock<IFileIndicatorVisibility>().Object
189194
);
190195

191196
var tags = coverageTagger.GetTags(new NormalizedSnapshotSpanCollection());
@@ -219,7 +224,7 @@ public void Should_GetLineSpans_From_LineSpanLogic_For_The_Spans_When_Coverage_A
219224
mockTextSnapshot.SetupGet(currentSnapshot => currentSnapshot.Length).Returns(10);
220225
mockTextInfo.SetupGet(textBufferAndFile => textBufferAndFile.TextBuffer.CurrentSnapshot).Returns(mockTextSnapshot.Object);
221226
mockTextInfo.SetupGet(textBufferWithFilePath => textBufferWithFilePath.FilePath).Returns("filepath");
222-
227+
autoMoqer.Setup<IFileIndicatorVisibility,bool>(fileIndicatorVisibility => fileIndicatorVisibility.IsVisible(It.IsAny<string>())).Returns(true);
223228
var coverageTagger = autoMoqer.Create<CoverageTagger<DummyTag>>();
224229
var spans = new NormalizedSnapshotSpanCollection();
225230

@@ -270,6 +275,8 @@ public void Should_GetTagsSpans_For_Filtered_LineSpans()
270275
)
271276
.Returns(lineSpans);
272277

278+
autoMoqer.Setup<ITextInfo,string>(textInfo => textInfo.FilePath).Returns("filepath");
279+
autoMoqer.Setup<IFileIndicatorVisibility, bool>(fileIndicatorVisibility => fileIndicatorVisibility.IsVisible("filepath")).Returns(true);
273280
var coverageTagger = autoMoqer.Create<CoverageTagger<DummyTag>>();
274281

275282
var tags = coverageTagger.GetTags(new NormalizedSnapshotSpanCollection());
@@ -285,5 +292,65 @@ IDynamicLine CreateLine(DynamicCoverageType coverageType)
285292
}
286293

287294
}
295+
296+
[TestCase(true,false)]
297+
[TestCase(false, true)]
298+
public void Should_Raise_TagsChanged_When_FileIndicatorVisibility_Toggled(bool newVisibility,bool expectedTagsChanged)
299+
{
300+
var autoMoqer = new AutoMoqer();
301+
var mockTextBuffer = new Mock<ITextBuffer2>();
302+
var mockSnapshot = new Mock<ITextSnapshot>();
303+
mockSnapshot.SetupGet(textSnapshot => textSnapshot.Length).Returns(10);
304+
mockTextBuffer.SetupGet(textBuffer => textBuffer.CurrentSnapshot).Returns(mockSnapshot.Object);
305+
autoMoqer.Setup<ITextInfo,string>(textInfo => textInfo.FilePath).Returns("filepath");
306+
autoMoqer.Setup<ITextInfo,ITextBuffer>(textInfo => textInfo.TextBuffer).Returns(mockTextBuffer.Object);
307+
var mockFileIndicatorVisibility = autoMoqer.GetMock<IFileIndicatorVisibility>();
308+
mockFileIndicatorVisibility.SetupSequence(fileIndicatorVisibility => fileIndicatorVisibility.IsVisible("filepath"))
309+
.Returns(true)
310+
.Returns(newVisibility);
311+
var coverageTagger = autoMoqer.Create<CoverageTagger<DummyTag>>();
312+
var tagsChanged = false;
313+
coverageTagger.TagsChanged += (sender, args) =>
314+
{
315+
tagsChanged = true;
316+
};
317+
mockFileIndicatorVisibility.Raise(fileIndicatorVisibility => fileIndicatorVisibility.VisibilityChanged += null, EventArgs.Empty);
318+
319+
Assert.That(tagsChanged, Is.EqualTo(expectedTagsChanged));
320+
}
321+
322+
[TestCase(true)]
323+
[TestCase(false)]
324+
public void Should_Have_No_Tags_When_FileIndicatorVisibility_Is_Initially_False(bool initiallyVisible)
325+
{
326+
var autoMoqer = new AutoMoqer();
327+
autoMoqer.Setup<ICoverageTypeFilter, bool>(coverageTypeFilter => coverageTypeFilter.Show(DynamicCoverageType.Covered)).Returns(true);
328+
var mockLineSpan = new Mock<ILineSpan>();
329+
mockLineSpan.SetupGet(lineSpan => lineSpan.Line.CoverageType).Returns(DynamicCoverageType.Covered);
330+
autoMoqer.Setup<ILineSpanLogic, IEnumerable<ILineSpan>>(lineSpanLogic =>
331+
lineSpanLogic.GetLineSpans(It.IsAny<IBufferLineCoverage>(), It.IsAny<NormalizedSnapshotSpanCollection>())
332+
).Returns(new List<ILineSpan> { mockLineSpan.Object });
333+
334+
var mockFileIndicatorVisibility = autoMoqer.GetMock<IFileIndicatorVisibility>();
335+
mockFileIndicatorVisibility.Setup(fileIndicatorVisibility => fileIndicatorVisibility.IsVisible(It.IsAny<string>()))
336+
.Returns(initiallyVisible);
337+
var coverageTagger = autoMoqer.Create<CoverageTagger<DummyTag>>();
338+
339+
var tags = coverageTagger.GetTags(new NormalizedSnapshotSpanCollection()).ToList();
340+
341+
Assert.That(tags.Count, Is.EqualTo(initiallyVisible ? 1 : 0));
342+
}
343+
344+
[Test]
345+
public void Should_Remove_FileIndicatorVisibility_VisibilityChange_Handler_When_Dispose()
346+
{
347+
var autoMoqer = new AutoMoqer();
348+
var mockFileIndicatorVisibility = autoMoqer.GetMock<IFileIndicatorVisibility>();
349+
350+
var coverageTagger = autoMoqer.Create<CoverageTagger<DummyTag>>();
351+
coverageTagger.Dispose();
352+
353+
mockFileIndicatorVisibility.VerifyRemove(fileIndicatorVisibility => fileIndicatorVisibility.VisibilityChanged -= It.IsAny<EventHandler>());
354+
}
288355
}
289356
}

FineCodeCoverageTests/FineCodeCoverageTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
<Compile Include="Editor\DynamicCoverage\TrackedNewCodeLine_Tests.cs" />
9393
<Compile Include="Editor\DynamicCoverage\LineTracker_Tests.cs" />
9494
<Compile Include="Editor\DynamicCoverage\TrackingSpanRangeUpdatingTracker_Tests.cs" />
95+
<Compile Include="Editor\IndicatorVisibility\FileIndicatorVisibility_Tests.cs" />
9596
<Compile Include="Editor\Management\CoverageClassificationTypeService_Tests.cs" />
9697
<Compile Include="Editor\Management\CoverageFontAndColorsCategoryItemNames_Tests.cs" />
9798
<Compile Include="Editor\Management\FontsAndColorsHelper_Tests.cs" />

0 commit comments

Comments
 (0)