7 changed files with 136 additions and 0 deletions
@ -0,0 +1,33 @@ |
|||||||
|
// 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 PythonSelfResolver : IPythonResolver |
||||||
|
{ |
||||||
|
public ResolveResult Resolve(PythonResolverContext resolverContext, ExpressionResult expressionResult) |
||||||
|
{ |
||||||
|
if (resolverContext.HasCallingClass) { |
||||||
|
if (IsSelfExpression(expressionResult)) { |
||||||
|
return CreateResolveResult(resolverContext); |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
bool IsSelfExpression(ExpressionResult expressionResult) |
||||||
|
{ |
||||||
|
return expressionResult.Expression == "self"; |
||||||
|
} |
||||||
|
|
||||||
|
ResolveResult CreateResolveResult(PythonResolverContext resolverContext) |
||||||
|
{ |
||||||
|
IClass callingClass = resolverContext.CallingClass; |
||||||
|
IReturnType returnType = callingClass.DefaultReturnType; |
||||||
|
return new ResolveResult(callingClass, null, returnType); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,49 @@ |
|||||||
|
// 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.PythonBinding; |
||||||
|
using ICSharpCode.Scripting.Tests.Utils; |
||||||
|
using ICSharpCode.SharpDevelop.Dom; |
||||||
|
using NUnit.Framework; |
||||||
|
|
||||||
|
namespace PythonBinding.Tests.Resolver |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class PythonSelfResolverTests |
||||||
|
{ |
||||||
|
PythonSelfResolver resolver; |
||||||
|
ExpressionResult expression; |
||||||
|
ParseInformation parseInfo; |
||||||
|
PythonResolverContext context; |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void Resolve_NoCallingClass_ReturnsNull() |
||||||
|
{ |
||||||
|
CreatePythonSelfResolver(); |
||||||
|
CreateParseInfo(); |
||||||
|
CreatePythonResolverContext(); |
||||||
|
|
||||||
|
ResolveResult result = resolver.Resolve(context, expression); |
||||||
|
Assert.IsNull(result); |
||||||
|
} |
||||||
|
|
||||||
|
void CreatePythonSelfResolver() |
||||||
|
{ |
||||||
|
resolver = new PythonSelfResolver(); |
||||||
|
expression = new ExpressionResult("self"); |
||||||
|
} |
||||||
|
|
||||||
|
void CreateParseInfo() |
||||||
|
{ |
||||||
|
MockProjectContent projectContent = new MockProjectContent(); |
||||||
|
DefaultCompilationUnit unit = new DefaultCompilationUnit(projectContent); |
||||||
|
parseInfo = new ParseInformation(unit); |
||||||
|
} |
||||||
|
|
||||||
|
void CreatePythonResolverContext() |
||||||
|
{ |
||||||
|
context = new PythonResolverContext(parseInfo); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,45 @@ |
|||||||
|
// 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 UnitTesting.Tests.Utils; |
||||||
|
|
||||||
|
namespace PythonBinding.Tests.Resolver |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class ResolveSelfTests : ResolveTestFixtureBase |
||||||
|
{ |
||||||
|
IClass fooClass; |
||||||
|
|
||||||
|
protected override ExpressionResult GetExpressionResult() |
||||||
|
{ |
||||||
|
fooClass = compilationUnit.Classes[0]; |
||||||
|
return new ExpressionResult("self", ExpressionContext.Default); |
||||||
|
} |
||||||
|
|
||||||
|
protected override string GetPythonScript() |
||||||
|
{ |
||||||
|
return |
||||||
|
"class Foo(self)\r\n" + |
||||||
|
" def bar(self):\r\n" + |
||||||
|
" self\r\n" + |
||||||
|
"\r\n"; |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void Resolve_ExpressionIsSelf_ResolveResultResolvedTypeUnderlyingClassReturnsFooClass() |
||||||
|
{ |
||||||
|
IClass underlyingClass = resolveResult.ResolvedType.GetUnderlyingClass(); |
||||||
|
Assert.AreEqual(fooClass, underlyingClass); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void Resolve_ExpressionIsSelf_ResolveResultCallingClassReturnsFooClass() |
||||||
|
{ |
||||||
|
IClass underlyingClass = resolveResult.CallingClass; |
||||||
|
Assert.AreEqual(fooClass, underlyingClass); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue