diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj index ea99e5af49..0b0d6958ec 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj @@ -85,6 +85,7 @@ + @@ -104,4 +105,7 @@ ICSharpCode.AvalonEdit + + + \ No newline at end of file diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Search/FindTests.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Search/FindTests.cs new file mode 100644 index 0000000000..ffdde55334 --- /dev/null +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Search/FindTests.cs @@ -0,0 +1,114 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Linq; +using ICSharpCode.AvalonEdit.Document; +using NUnit.Framework; + +namespace ICSharpCode.AvalonEdit.Search +{ + [TestFixture] + public class FindTests + { + [Test] + public void SkipWordBorderSimple() + { + var strategy = SearchStrategyFactory.Create("All", false, true, SearchMode.Normal); + var text = new StringTextSource(" FindAllTests "); + var results = strategy.FindAll(text, 0, text.TextLength).ToArray(); + + Assert.IsEmpty(results, "No results should be found!"); + } + + [Test] + public void SkipWordBorder() + { + var strategy = SearchStrategyFactory.Create("AllTests", false, true, SearchMode.Normal); + var text = new StringTextSource("name=\"{FindAllTests}\""); + var results = strategy.FindAll(text, 0, text.TextLength).ToArray(); + + Assert.IsEmpty(results, "No results should be found!"); + } + + [Test] + public void SkipWordBorder2() + { + var strategy = SearchStrategyFactory.Create("AllTests", false, true, SearchMode.Normal); + var text = new StringTextSource("name=\"FindAllTests "); + var results = strategy.FindAll(text, 0, text.TextLength).ToArray(); + + Assert.IsEmpty(results, "No results should be found!"); + } + + [Test] + public void SkipWordBorder3() + { + var strategy = SearchStrategyFactory.Create("// find", false, true, SearchMode.Normal); + var text = new StringTextSource(" // findtest"); + var results = strategy.FindAll(text, 0, text.TextLength).ToArray(); + + Assert.IsEmpty(results, "No results should be found!"); + } + + [Test] + public void WordBorderTest() + { + var strategy = SearchStrategyFactory.Create("// find", false, true, SearchMode.Normal); + var text = new StringTextSource(" // find me"); + var results = strategy.FindAll(text, 0, text.TextLength).ToArray(); + + Assert.AreEqual(1, results.Length, "One result should be found!"); + Assert.AreEqual(" ".Length, results[0].Offset); + Assert.AreEqual("// find".Length, results[0].Length); + } + + [Test] + public void ResultAtStart() + { + var strategy = SearchStrategyFactory.Create("result", false, true, SearchMode.Normal); + var text = new StringTextSource("result // find me"); + var results = strategy.FindAll(text, 0, text.TextLength).ToArray(); + + Assert.AreEqual(1, results.Length, "One result should be found!"); + Assert.AreEqual(0, results[0].Offset); + Assert.AreEqual("result".Length, results[0].Length); + } + + [Test] + public void ResultAtEnd() + { + var strategy = SearchStrategyFactory.Create("me", false, true, SearchMode.Normal); + var text = new StringTextSource("result // find me"); + var results = strategy.FindAll(text, 0, text.TextLength).ToArray(); + + Assert.AreEqual(1, results.Length, "One result should be found!"); + Assert.AreEqual("result // find ".Length, results[0].Offset); + Assert.AreEqual("me".Length, results[0].Length); + } + + [Test] + public void TextWithDots() + { + var strategy = SearchStrategyFactory.Create("Text", false, true, SearchMode.Normal); + var text = new StringTextSource(".Text."); + var results = strategy.FindAll(text, 0, text.TextLength).ToArray(); + + Assert.AreEqual(1, results.Length, "One result should be found!"); + Assert.AreEqual(".".Length, results[0].Offset); + Assert.AreEqual("Text".Length, results[0].Length); + } + + [Test] + public void SimpleTest() + { + var strategy = SearchStrategyFactory.Create("AllTests", false, false, SearchMode.Normal); + var text = new StringTextSource("name=\"FindAllTests "); + var results = strategy.FindAll(text, 0, text.TextLength).ToArray(); + + Assert.AreEqual(1, results.Length, "One result should be found!"); + Assert.AreEqual("name=\"Find".Length, results[0].Offset); + Assert.AreEqual("AllTests".Length, results[0].Length); + } + } +} diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs index 21cd84d755..ad71b7ad2a 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs @@ -32,7 +32,7 @@ namespace ICSharpCode.AvalonEdit.Search int resultEndOffset = result.Length + result.Index; if (offset > result.Index || endOffset < resultEndOffset) continue; - if (matchWholeWords && (!IsWordBorder(document, offset) || !IsWordBorder(document, resultEndOffset))) + if (matchWholeWords && (!IsWordBorder(document, result.Index) || !IsWordBorder(document, resultEndOffset))) continue; yield return new SearchResult { StartOffset = result.Index, Length = result.Length, Data = result }; }