public void OnBatchedTagsChanged_CacheCleanupIsCalled() { var cacheMock = new Mock <ICachingAdornmentFactory>(); var snapshot = CreateSnapshot(length: 123); var textView = CreateWpfTextView(snapshot); var locViz1 = CreateLocationViz(); var locViz2 = CreateLocationViz(); // The setup for the aggregator is different for this test since we're using a different // overload of "GetTags" from all of the other tests. // Here, we're expecting a SnapshotSpan covering the whole snapshot to be passed in var wholeSnapshotSpan = new SnapshotSpan(snapshot, 0, snapshot.Length); var mappingSpan1 = CreateMappingTagSpan(snapshot, new SelectedIssueLocationTag(locViz1)); var mappingSpan2 = CreateMappingTagSpan(snapshot, new SelectedIssueLocationTag(locViz2)); var aggregatorMock = new Mock <ITagAggregator <ISelectedIssueLocationTag> >(); aggregatorMock.Setup(x => x.GetTags(wholeSnapshotSpan)) .Returns(new[] { mappingSpan1, mappingSpan2 }); var testSubject = new IssueLocationAdornmentTagger(aggregatorMock.Object, textView, cacheMock.Object); cacheMock.Invocations.Count.Should().Be(0); // Act RaiseBatchedTagsChanged(aggregatorMock); aggregatorMock.Verify(x => x.GetTags(wholeSnapshotSpan), Times.Once); cacheMock.Verify(x => x.Refresh(new[] { locViz1, locViz2 }), Times.Once); }
public void GetTags_HasSelectedIssueLocationTags_ReturnsExpectedAdornmentTags() { var snapshot = CreateSnapshot(length: 50); var inputSpans = CreateSpanCollectionSpanningWholeSnapshot(snapshot); var selectedLoc1 = CreateLocationViz(snapshot, new Span(1, 5), "selection 1"); var selectedLoc2 = CreateLocationViz(snapshot, new Span(20, 25), "selection 2"); var aggregator = CreateSelectedIssueAggregator(selectedLoc1, selectedLoc2); var viewMock = CreateWpfTextView(snapshot); var testSubject = new IssueLocationAdornmentTagger(aggregator, viewMock); // Act var actual = testSubject.GetTags(inputSpans).ToArray(); actual.Length.Should().Be(2); actual[0].Span.Span.Start.Should().Be(selectedLoc1.Span.Value.Span.Start); actual[1].Span.Span.Start.Should().Be(selectedLoc2.Span.Value.Span.Start); actual[0].Span.Span.Length.Should().Be(0); actual[1].Span.Span.Length.Should().Be(0); var adornment1 = actual[0].Tag.Adornment as IssueLocationAdornment; adornment1.Should().NotBeNull(); adornment1.LocationViz.Should().Be(selectedLoc1); var adornment2 = actual[1].Tag.Adornment as IssueLocationAdornment; adornment2.Should().NotBeNull(); adornment2.LocationViz.Should().Be(selectedLoc2); }
public void Ctor_SubscribesToEvents() { var aggregatorMock = new Mock <ITagAggregator <ISelectedIssueLocationTag> >(); aggregatorMock.SetupAdd(x => x.BatchedTagsChanged += (sender, args) => { }); // Act var testSubject = new IssueLocationAdornmentTagger(aggregatorMock.Object, ValidTextView); var expectedCallCount = Times.Exactly(2); // once for our class, once for the base class aggregatorMock.VerifyAdd(x => x.BatchedTagsChanged += It.IsAny <EventHandler <BatchedTagsChangedEventArgs> >(), expectedCallCount); }
public void GetTags_NoSelectedIssueLocationTags_ReturnsEmpty() { var snapshot = CreateSnapshot(length: 50); var inputSpans = CreateSpanCollectionSpanningWholeSnapshot(snapshot); var aggregator = CreateSelectedIssueAggregator(); var viewMock = CreateWpfTextView(snapshot); var testSubject = new IssueLocationAdornmentTagger(aggregator, viewMock); // Act testSubject.GetTags(inputSpans) .Should().BeEmpty(); }