6 changed files with 124 additions and 2 deletions
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
// 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 ICSharpCode.SharpDevelop.Dom; |
||||
|
||||
namespace ICSharpCode.PythonBinding |
||||
{ |
||||
public class PythonMethodReturnValueResolver : IPythonResolver |
||||
{ |
||||
PythonMemberResolver memberResolver; |
||||
|
||||
public PythonMethodReturnValueResolver(PythonMemberResolver memberResolver) |
||||
{ |
||||
this.memberResolver = memberResolver; |
||||
} |
||||
|
||||
public ResolveResult Resolve(PythonResolverContext resolverContext) |
||||
{ |
||||
string methodName = GetMethodName(resolverContext.Expression); |
||||
if (methodName != null) { |
||||
PythonResolverContext newResolverContext = resolverContext.Clone(methodName); |
||||
IMember member = memberResolver.FindMember(newResolverContext); |
||||
return CreateResolveResult(member); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
string GetMethodName(string expression) |
||||
{ |
||||
int methodParametersStartIndex = expression.IndexOf('('); |
||||
if ((methodParametersStartIndex > 0) && expression.EndsWith(")")) { |
||||
return expression.Substring(0, methodParametersStartIndex); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
MemberResolveResult CreateResolveResult(IMember member) |
||||
{ |
||||
if (member != null) { |
||||
return new MemberResolveResult(null, null, member); |
||||
} |
||||
return null; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,66 @@
@@ -0,0 +1,66 @@
|
||||
// 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 ICSharpCode.SharpDevelop.Dom; |
||||
using NUnit.Framework; |
||||
using PythonBinding.Tests.Utils; |
||||
using UnitTesting.Tests.Utils; |
||||
|
||||
namespace PythonBinding.Tests.Resolver |
||||
{ |
||||
[TestFixture] |
||||
public class ResolveMethodReturnValueTests |
||||
{ |
||||
PythonResolverTestsHelper resolverHelper; |
||||
MockClass myClass; |
||||
DefaultMethod myMethod; |
||||
|
||||
void CreateResolver() |
||||
{ |
||||
resolverHelper = new PythonResolverTestsHelper(); |
||||
myClass = resolverHelper.CreateClass("MyClass"); |
||||
myMethod = myClass.AddMethod("MyMethod"); |
||||
myMethod.ReturnType = new DefaultReturnType(myClass); |
||||
|
||||
resolverHelper.ProjectContent.SetClassToReturnFromGetClass("MyClass", myClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void Resolve_ExpressionToResolveIsMethodCallWithNoParameters_ReturnsMemberResolveResultWithResolvedMemberAsMethod() |
||||
{ |
||||
CreateResolver(); |
||||
string code = "MyClass.MyMethod()"; |
||||
resolverHelper.Resolve(code); |
||||
|
||||
MemberResolveResult result = resolverHelper.MemberResolveResult; |
||||
IMember resolvedMember = result.ResolvedMember; |
||||
|
||||
Assert.AreEqual(myMethod, resolvedMember); |
||||
} |
||||
|
||||
[Test] |
||||
public void Resolve_ExpressionToResolveIsMethodCallWithNoParameters_ReturnsMemberResolveResultWithMethodReturnValueAsResolvedType() |
||||
{ |
||||
CreateResolver(); |
||||
string code = "MyClass.MyMethod()"; |
||||
resolverHelper.Resolve(code); |
||||
|
||||
MemberResolveResult result = resolverHelper.MemberResolveResult; |
||||
IReturnType resolvedType = result.ResolvedType; |
||||
IReturnType expectedResolvedType = myMethod.ReturnType; |
||||
|
||||
Assert.AreEqual(expectedResolvedType, resolvedType); |
||||
} |
||||
|
||||
[Test] |
||||
public void Resolve_ExpressionHasCloseParenthesisButNoOpenParenthesis_NoArgumentOutOfRangeExceptionThrownAndResolveResultIsNull() |
||||
{ |
||||
CreateResolver(); |
||||
string code = "MyClass.MyMethod)"; |
||||
resolverHelper.Resolve(code); |
||||
|
||||
Assert.IsNull(resolverHelper.ResolveResult); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue