12 changed files with 104 additions and 74 deletions
@ -1,28 +0,0 @@ |
|||||||
// 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 PythonDotNetMethodResolver |
|
||||||
{ |
|
||||||
PythonClassResolver classResolver; |
|
||||||
|
|
||||||
public PythonDotNetMethodResolver(PythonClassResolver classResolver) |
|
||||||
{ |
|
||||||
this.classResolver = classResolver; |
|
||||||
} |
|
||||||
|
|
||||||
public ResolveResult Resolve(PythonResolverContext resolverContext) |
|
||||||
{ |
|
||||||
MemberName memberName = resolverContext.CreateExpressionMemberName(); |
|
||||||
IClass matchingClass = classResolver.GetClass(resolverContext, memberName.Type); |
|
||||||
if (matchingClass != null) { |
|
||||||
return new PythonMethodGroupResolveResult(matchingClass, memberName.Name); |
|
||||||
} |
|
||||||
return null; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,29 +0,0 @@ |
|||||||
// 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 PythonMethodResolver : IPythonResolver |
|
||||||
{ |
|
||||||
PythonDotNetMethodResolver dotNetMethodResolver; |
|
||||||
PythonStandardModuleMethodResolver standardModuleMethodResolver; |
|
||||||
|
|
||||||
public PythonMethodResolver(PythonClassResolver classResolver, PythonStandardModuleResolver standardModuleResolver) |
|
||||||
{ |
|
||||||
dotNetMethodResolver = new PythonDotNetMethodResolver(classResolver); |
|
||||||
standardModuleMethodResolver = new PythonStandardModuleMethodResolver(standardModuleResolver); |
|
||||||
} |
|
||||||
|
|
||||||
public ResolveResult Resolve(PythonResolverContext resolverContext) |
|
||||||
{ |
|
||||||
ResolveResult resolveResult = dotNetMethodResolver.Resolve(resolverContext); |
|
||||||
if (resolveResult != null) { |
|
||||||
return resolveResult; |
|
||||||
} |
|
||||||
return standardModuleMethodResolver.Resolve(resolverContext); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,57 @@ |
|||||||
|
// 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 ResolveLocalVariableMethodTests |
||||||
|
{ |
||||||
|
PythonResolverTestsHelper resolverHelper; |
||||||
|
MockClass myClass; |
||||||
|
|
||||||
|
void CreateClassWithOneProperty() |
||||||
|
{ |
||||||
|
resolverHelper = new PythonResolverTestsHelper(); |
||||||
|
myClass = resolverHelper.CreateClass("MyClass"); |
||||||
|
myClass.AddMethod("MyMethod"); |
||||||
|
|
||||||
|
resolverHelper.ProjectContent.SetClassToReturnFromGetClass("MyClass", myClass); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void Resolve_ExpressionIsForMethodOnLocalVariable_MethodGroupResolveResultNameIsMethodName() |
||||||
|
{ |
||||||
|
CreateClassWithOneProperty(); |
||||||
|
string code = |
||||||
|
"a = MyClass()\r\n" + |
||||||
|
"a.MyMethod"; |
||||||
|
|
||||||
|
resolverHelper.Resolve("a.MyMethod", code); |
||||||
|
string methodName = resolverHelper.MethodGroupResolveResult.Name; |
||||||
|
string expectedMethodName = "MyMethod"; |
||||||
|
|
||||||
|
Assert.AreEqual(expectedMethodName, methodName); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void Resolve_ExpressionIsForMethodOnLocalVariable_MethodGroupResolveResultContainingTypeUnderlyingClassIsMyClass() |
||||||
|
{ |
||||||
|
CreateClassWithOneProperty(); |
||||||
|
string code = |
||||||
|
"a = MyClass()\r\n" + |
||||||
|
"a.MyMethod"; |
||||||
|
|
||||||
|
resolverHelper.Resolve("a.MyMethod", code); |
||||||
|
IClass c = resolverHelper.MethodGroupResolveResult.ContainingType.GetUnderlyingClass(); |
||||||
|
|
||||||
|
Assert.AreEqual(myClass, c); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue