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 };
}