11using AutoMoq ;
22using FineCodeCoverage . Core . Utilities ;
33using FineCodeCoverage . Editor . DynamicCoverage ;
4+ using FineCodeCoverage . Editor . IndicatorVisibility ;
45using FineCodeCoverage . Editor . Tagging . Base ;
56using FineCodeCoverage . Engine . Model ;
67using FineCodeCoverageTests . Editor . Tagging . Base . Types ;
1112using NUnit . Framework ;
1213using System ;
1314using System . Collections . Generic ;
15+ using System . Linq ;
1416using LineSpan = FineCodeCoverageTests . Editor . Tagging . Types . LineSpan ;
1517
1618namespace 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}
0 commit comments