Skip to content

Commit 2071f51

Browse files
authored
Merge pull request #408 from tonyhallett/fix-updated-line-numbers-out-of-range
Fix updated line numbers out of range
2 parents a5fb411 + 26fcd77 commit 2071f51

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

FineCodeCoverageTests/Editor/DynamicCoverage/BufferLineCoverage_Tests.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -235,30 +235,31 @@ public void Should_Send_CoverageChangedMessage_When_Necessary(
235235

236236
[TestCase(true)]
237237
[TestCase(false)]
238-
public void Should_Update_TrackedLines_When_Text_Buffer_ChangedOnBackground(bool textLinesChanged)
238+
public void Should_Update_TrackedLines_When_Text_Buffer_ChangedOnBackground(bool linesInRange)
239239
{
240240
SimpleTextInfoSetUp();
241241

242-
var afterSnapshot = new Mock<ITextSnapshot>().Object;
242+
var mockAfterSnapshot = new Mock<ITextSnapshot>();
243+
mockAfterSnapshot.SetupGet(textSnapshot => textSnapshot.LineCount).Returns(linesInRange ? 100 : 11);
243244

244245
var newSpan = new Span(1, 2);
245246
var mockTrackedLines = new Mock<ITrackedLines>();
246-
var changedLineNumbers = textLinesChanged ? new List<int> { 1, 2 } : new List<int>();
247-
mockTrackedLines.Setup(trackedLines => trackedLines.GetChangedLineNumbers(afterSnapshot, new List<Span> { newSpan }))
247+
var changedLineNumbers = new List<int> { 11, 12 };
248+
mockTrackedLines.Setup(trackedLines => trackedLines.GetChangedLineNumbers(mockAfterSnapshot.Object, new List<Span> { newSpan }))
248249
.Returns(changedLineNumbers);
249250
autoMoqer.Setup<ITrackedLinesFactory, ITrackedLines>(trackedLinesFactory => trackedLinesFactory.Create(It.IsAny<List<ILine>>(), It.IsAny<ITextSnapshot>(), It.IsAny<Language>()))
250251
.Returns(mockTrackedLines.Object);
251252

252253

253254
var bufferLineCoverage = autoMoqer.Create<BufferLineCoverage>();
254255

255-
mockTextBuffer.Raise(textBuffer => textBuffer.ChangedOnBackground += null, CreateTextContentChangedEventArgs(afterSnapshot, newSpan));
256+
mockTextBuffer.Raise(textBuffer => textBuffer.ChangedOnBackground += null, CreateTextContentChangedEventArgs(mockAfterSnapshot.Object, newSpan));
256257

257258
autoMoqer.Verify<IEventAggregator>(
258259
eventAggregator => eventAggregator.SendMessage(
259-
It.Is<CoverageChangedMessage>(message => message.AppliesTo == "filepath" && message.BufferLineCoverage == bufferLineCoverage && message.ChangedLineNumbers == changedLineNumbers)
260+
It.Is<CoverageChangedMessage>(message => message.AppliesTo == "filepath" && message.BufferLineCoverage == bufferLineCoverage && message.ChangedLineNumbers.SequenceEqual(changedLineNumbers))
260261
, null
261-
), Times.Exactly(textLinesChanged ? 1 : 0));
262+
), Times.Exactly(linesInRange ? 1 : 0));
262263

263264
}
264265

SharedProject/Editor/DynamicCoverage/Management/BufferLineCoverage.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ private void TextBuffer_ChangedOnBackground(object sender, TextContentChangedEve
139139

140140
private void UpdateTrackedLines(TextContentChangedEventArgs e)
141141
{
142-
IEnumerable<int> changedLineNumbers = this.trackedLines.GetChangedLineNumbers(e.After, e.Changes.Select(change => change.NewSpan).ToList());
142+
IEnumerable<int> changedLineNumbers = this.trackedLines.GetChangedLineNumbers(e.After, e.Changes.Select(change => change.NewSpan).ToList())
143+
.Where(changedLine => changedLine >= 0 && changedLine < e.After.LineCount);
143144
this.SendCoverageChangedMessageIfChanged(changedLineNumbers);
144145
}
145146

0 commit comments

Comments
 (0)