diff --git a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs index 2f95c9b90e..27c473589e 100644 --- a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs +++ b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs @@ -85,6 +85,10 @@ namespace SearchAndReplace switch (state) { case TextIteratorState.Resetted: + if (textBuffer.Length == 0) { + state = TextIteratorState.Done; + return false; + } Position = endOffset; state = TextIteratorState.Iterating; return true; diff --git a/src/Main/Base/Test/ForwardIteratorWithEmptyTextBufferTestFixture.cs b/src/Main/Base/Test/ForwardIteratorWithEmptyTextBufferTestFixture.cs new file mode 100644 index 0000000000..b45b549c34 --- /dev/null +++ b/src/Main/Base/Test/ForwardIteratorWithEmptyTextBufferTestFixture.cs @@ -0,0 +1,47 @@ +// +// +// +// +// $Revision$ +// + +using System; +using ICSharpCode.SharpDevelop.Tests.Utils; +using ICSharpCode.TextEditor.Document; +using SearchAndReplace; +using NUnit.Framework; + +namespace ICSharpCode.SharpDevelop.Tests +{ + /// + /// The fix for SD2-857 highlighted another bug (SD2-1312) in the + /// ForwardTextIterator where it does not handle the case where + /// the ITextBufferStrategy has a length of zero. + /// + [TestFixture] + public class ForwardIteratorWithEmptyTextBufferTestFixture + { + ForwardTextIterator forwardTextIterator; + + [SetUp] + public void SetUp() + { + // Create the document to be iterated through. + MockDocument doc = new MockDocument(); + StringTextBufferStrategy textBufferStrategy = new StringTextBufferStrategy(); + doc.TextBufferStrategy = textBufferStrategy; + ProvidedDocumentInformation docInfo = new ProvidedDocumentInformation(doc, + @"C:\Temp\test.txt", + 0); + + // Create the forward iterator. + forwardTextIterator = new ForwardTextIterator(docInfo); + } + + [Test] + public void CannotMoveAhead() + { + Assert.IsFalse(forwardTextIterator.MoveAhead(1)); + } + } +} diff --git a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj index e6769bd950..77d40a37bb 100644 --- a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj +++ b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj @@ -53,6 +53,7 @@ +