From d5c6e2aad218845a0a710719b27047f0a27f6830 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 26 Nov 2009 14:22:25 +0000 Subject: [PATCH] Fixed SD2-1623 - Boo: Find references does not return any results git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@5277 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/CodeCompletion/ExpressionFinder.cs | 24 +++++-- .../BooBinding/Test/BooBinding.Tests.csproj | 4 +- .../BooBinding/Test/ExpressionFinderTests.cs | 68 +++++++++++++++++++ 3 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 src/AddIns/BackendBindings/Boo/BooBinding/Test/ExpressionFinderTests.cs diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ExpressionFinder.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ExpressionFinder.cs index 2c4c80b509..fc7d1dff3b 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ExpressionFinder.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ExpressionFinder.cs @@ -14,14 +14,14 @@ using ICSharpCode.SharpDevelop.Dom; namespace Grunwald.BooBinding.CodeCompletion { - // TODO: We could need some unit tests for this. public class ExpressionFinder : IExpressionFinder { - string fileName; + public ExpressionFinder() + { + } public ExpressionFinder(string fileName) { - this.fileName = fileName; } #region RemoveLastPart @@ -79,6 +79,14 @@ namespace Grunwald.BooBinding.CodeCompletion const string _openingBrackets = "{[("; public ExpressionResult FindExpression(string inText, int offset) + { + ExpressionResult r = FindExpressionInternal(inText, offset); + if (string.IsNullOrEmpty(r.Expression)) + r.Expression = null; + return r; + } + + ExpressionResult FindExpressionInternal(string inText, int offset) { offset--; // earlier all ExpressionFinder calls had an inexplicable "cursor - 1". // The IExpressionFinder API now uses normal cursor offsets, so we need to adjust the offset @@ -154,7 +162,8 @@ namespace Grunwald.BooBinding.CodeCompletion ExpressionResult GetExpression(string inText, int start, int end) { - if (start == end) return ExpressionResult.Empty; + if (start == end) + return new ExpressionResult(string.Empty); StringBuilder b = new StringBuilder(); bool wasSpace = true; int i = start; @@ -234,7 +243,7 @@ namespace Grunwald.BooBinding.CodeCompletion #region Find Full Expression public ExpressionResult FindFullExpression(string inText, int offset) { - ExpressionResult result = FindExpression(inText, offset); + ExpressionResult result = FindExpressionInternal(inText, offset); if (result.Expression == null) return result; StringBuilder b = new StringBuilder(result.Expression); @@ -261,7 +270,10 @@ namespace Grunwald.BooBinding.CodeCompletion } else { if (bracketStack.Count == 0) { b.Append(inText, offset, i - offset); - result.Expression = b.ToString(); + if (b.Length == 0) + result.Expression = null; + else + result.Expression = b.ToString(); return result; } else if (c == '\0') { // end of document diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Test/BooBinding.Tests.csproj b/src/AddIns/BackendBindings/Boo/BooBinding/Test/BooBinding.Tests.csproj index a41a25679c..fa5e211d01 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Test/BooBinding.Tests.csproj +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Test/BooBinding.Tests.csproj @@ -1,4 +1,5 @@ - + + Library Grunwald.BooBinding.Tests @@ -47,6 +48,7 @@ + diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Test/ExpressionFinderTests.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Test/ExpressionFinderTests.cs new file mode 100644 index 0000000000..8322d41ee5 --- /dev/null +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Test/ExpressionFinderTests.cs @@ -0,0 +1,68 @@ +// +// +// +// +// $Revision$ +// + +using System; +using Grunwald.BooBinding.CodeCompletion; +using ICSharpCode.SharpDevelop.Dom; +using NUnit.Framework; + +namespace Grunwald.BooBinding.Tests +{ + [TestFixture] + public class ExpressionFinderTests + { + const string code = "class A:\n\tpublic simple = 1\n// comment\ndef main():\n\tpass"; + ExpressionFinder ef = new ExpressionFinder(); + + void FindFull(string program, string location, string expectedExpression, ExpressionContext expectedContext) + { + int pos = program.IndexOf(location); + if (pos < 0) Assert.Fail("location not found in program"); + ExpressionResult er = ef.FindFullExpression(program, pos); + Assert.AreEqual(expectedExpression, er.Expression); + if (expectedContext != null) { + Assert.AreEqual(expectedContext, er.Context); + } + } + + [Test] + public void Simple() + { + FindFull(code, "mple = 1", "simple", ExpressionContext.Default); + } + + [Test] + public void SimpleBeginningOfExpression() + { + FindFull(code, "simple = 1", "simple", ExpressionContext.Default); + } + + [Test] + public void NoMatchForComment1() + { + FindFull(code, "// comment", null, null); + } + + [Test] + public void NoMatchForComment2() + { + FindFull(code, "/ comment", null, null); + } + + [Test] + public void NoMatchForComment3() + { + FindFull(code, " comment", null, null); + } + + [Test] + public void NoMatchForComment4() + { + FindFull(code, "comment", null, null); + } + } +}