7 changed files with 136 additions and 0 deletions
@ -0,0 +1,33 @@
@@ -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 @@
@@ -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 @@
@@ -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