Browse Source

fix bug in FindAll and added Unit Tests

pull/6/merge
Siegfried Pammer 14 years ago
parent
commit
18e6a68d15
  1. 4
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj
  2. 114
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Search/FindTests.cs
  3. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs

4
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj

@ -85,6 +85,7 @@ @@ -85,6 +85,7 @@
<Compile Include="Document\HeightTests.cs" />
<Compile Include="Document\RandomizedLineManagerTest.cs" />
<Compile Include="Document\LineManagerTests.cs" />
<Compile Include="Search\FindTests.cs" />
<Compile Include="Utils\CaretNavigationTests.cs" />
<Compile Include="Utils\CompressingTreeListTests.cs" />
<Compile Include="Utils\ExtensionMethodsTests.cs" />
@ -104,4 +105,7 @@ @@ -104,4 +105,7 @@
<Name>ICSharpCode.AvalonEdit</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Folder Include="Search" />
</ItemGroup>
</Project>

114
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Search/FindTests.cs

@ -0,0 +1,114 @@ @@ -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);
}
}
}

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs

@ -32,7 +32,7 @@ namespace ICSharpCode.AvalonEdit.Search @@ -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 };
}

Loading…
Cancel
Save