16 changed files with 513 additions and 344 deletions
@ -1,163 +0,0 @@
@@ -1,163 +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; |
||||
using ICSharpCode.SharpDevelop.Project; |
||||
using NUnit.Framework; |
||||
using UnitTesting.Tests.Utils; |
||||
|
||||
namespace UnitTesting.Tests.Utils.Tests |
||||
{ |
||||
[TestFixture] |
||||
public class MockClassTestFixture |
||||
{ |
||||
MockClass outerClass; |
||||
MockClass innerClass; |
||||
|
||||
[Test] |
||||
public void ClassCreatedWithExpectedFullyQualifiedName() |
||||
{ |
||||
string fullyQualifiedName = "MyNamespace.MyClass"; |
||||
MockClass c = new MockClass(fullyQualifiedName); |
||||
Assert.AreEqual(fullyQualifiedName, c.FullyQualifiedName); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClassCreatedWithFullyQualifiedNameHasMatchingDotNetName() |
||||
{ |
||||
string fullyQualifiedName = "MyNamespace.MyClass"; |
||||
MockClass c = new MockClass(fullyQualifiedName); |
||||
Assert.AreEqual(fullyQualifiedName, c.DotNetName); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClassCreatedWithExpectedDotNetName() |
||||
{ |
||||
string fullyQualifiedName = "MyNamespace.MyClass.InnerClass"; |
||||
string dotNetName = "MyNamespace.MyClass+InnerClass"; |
||||
MockClass c = new MockClass(fullyQualifiedName, dotNetName); |
||||
Assert.AreEqual(dotNetName, c.DotNetName); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClassCreatedWithNamespaceTakenFromFullyQualifiedName() |
||||
{ |
||||
string fullyQualifiedName = "MyNamespace.MySubNamespace.MyClass"; |
||||
MockClass c = new MockClass(fullyQualifiedName); |
||||
string expectedNamespace = "MyNamespace.MySubNamespace"; |
||||
Assert.AreEqual(expectedNamespace, c.Namespace); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClassCreatedWithNameTakenFromFullyQualifiedName() |
||||
{ |
||||
string fullyQualifiedName = "MyNamespace.MySubNamespace.MyClass"; |
||||
MockClass c = new MockClass(fullyQualifiedName); |
||||
string expectedName = "MyClass"; |
||||
Assert.AreEqual(expectedName, c.Name); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClassCreatedWithNoNamespaceInFullyQualifiedNameHasNamespaceOfEmptyString() |
||||
{ |
||||
string fullyQualifiedName = "MyClass"; |
||||
MockClass c = new MockClass(fullyQualifiedName); |
||||
string expectedNamespace = String.Empty; |
||||
Assert.AreEqual(expectedNamespace, c.Namespace); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClassHasCompilationUnit() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
Assert.IsNotNull(c.CompilationUnit); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClassHasMockProjectContent() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
Assert.IsNotNull(c.ProjectContent as MockProjectContent); |
||||
} |
||||
|
||||
[Test] |
||||
public void CompoundClassIsClassItself() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
Assert.AreEqual(c, c.GetCompoundClass()); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClassDefaultReturnTypeGetUnderlyingClassMatchesOriginalMockClass() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
IReturnType returnType = c.DefaultReturnType; |
||||
Assert.AreEqual(c, returnType.GetUnderlyingClass()); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClassWithInnerClassHasDeclaringTypeAsOuterClass() |
||||
{ |
||||
CreateClassWithInnerClass(); |
||||
Assert.AreEqual(outerClass, innerClass.DeclaringType); |
||||
} |
||||
|
||||
void CreateClassWithInnerClass() |
||||
{ |
||||
outerClass = new MockClass("MyTests.A"); |
||||
innerClass = new MockClass("MyTests.A.InnerATest", "MyTests.A+InnerATest", outerClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void InnerClassGetCompoundClassReturnsInnerClass() |
||||
{ |
||||
CreateClassWithInnerClass(); |
||||
Assert.AreEqual(innerClass, innerClass.GetCompoundClass()); |
||||
} |
||||
|
||||
[Test] |
||||
public void InnerClassAddedToOuterClassInnerClassCollection() |
||||
{ |
||||
CreateClassWithInnerClass(); |
||||
Assert.AreEqual(innerClass, outerClass.InnerClasses[0]); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClassAddedToBaseTypesBecomesBaseClass() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
MockClass baseClass = new MockClass(); |
||||
DefaultReturnType returnType = new DefaultReturnType(baseClass); |
||||
c.BaseTypes.Add(returnType); |
||||
Assert.AreEqual(baseClass, c.BaseClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void BaseClassPropertyReturnsClassAddedUsingAddBaseClassMethod() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
MockClass baseClass = new MockClass(); |
||||
c.AddBaseClass(baseClass); |
||||
Assert.AreEqual(baseClass, c.BaseClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClassWithProjectContentHasExpectedDotNetName() |
||||
{ |
||||
MockProjectContent projectContent = new MockProjectContent(); |
||||
string expectedName = "MyNamespace.MyTests"; |
||||
MockClass c = new MockClass(projectContent, expectedName); |
||||
Assert.AreEqual(expectedName, c.DotNetName); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetCompoundClassReturnsClassSetWithSetCompoundClass() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
MockClass compoundClass = new MockClass(); |
||||
c.SetCompoundClass(compoundClass); |
||||
Assert.AreEqual(compoundClass, c.GetCompoundClass()); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,237 @@
@@ -0,0 +1,237 @@
|
||||
// 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 ICSharpCode.SharpDevelop.Project; |
||||
using NUnit.Framework; |
||||
using UnitTesting.Tests.Utils; |
||||
|
||||
namespace UnitTesting.Tests.Utils.Tests |
||||
{ |
||||
[TestFixture] |
||||
public class MockClassTests |
||||
{ |
||||
MockClass outerClass; |
||||
MockClass innerClass; |
||||
|
||||
[Test] |
||||
public void FullyQualifiedName_NewInstanceCreatedWithFullyQualifiedName_ReturnsFullyQualifiedName() |
||||
{ |
||||
string expectedFullyQualifiedName = "MyNamespace.MyClass"; |
||||
MockClass c = new MockClass(expectedFullyQualifiedName); |
||||
string fullyQualifiedName = c.FullyQualifiedName; |
||||
Assert.AreEqual(expectedFullyQualifiedName, fullyQualifiedName); |
||||
} |
||||
|
||||
[Test] |
||||
public void DotNetName_NewInstanceCreatedWithFullyQualifiedName_ReturnsDotNetNameThatMatchesFullyQualifiedName() |
||||
{ |
||||
string fullyQualifiedName = "MyNamespace.MyClass"; |
||||
MockClass c = new MockClass(fullyQualifiedName); |
||||
string dotNetName = c.DotNetName; |
||||
Assert.AreEqual(fullyQualifiedName, dotNetName); |
||||
} |
||||
|
||||
[Test] |
||||
public void DotNetName_NewInstanceCreatedWithFullyQualifiedNameAndDotNetName_ReturnsExpectedDotNetName() |
||||
{ |
||||
string fullyQualifiedName = "MyNamespace.MyClass.InnerClass"; |
||||
string expectedDotNetName = "MyNamespace.MyClass+InnerClass"; |
||||
MockClass c = new MockClass(fullyQualifiedName, expectedDotNetName); |
||||
string dotNetName = c.DotNetName; |
||||
Assert.AreEqual(expectedDotNetName, dotNetName); |
||||
} |
||||
|
||||
[Test] |
||||
public void Namespace_NewInstanceCreatedWithFullyQualifiedName_ReturnsNamespaceTakenFromFullyQualifiedName() |
||||
{ |
||||
string fullyQualifiedName = "MyNamespace.MySubNamespace.MyClass"; |
||||
MockClass c = new MockClass(fullyQualifiedName); |
||||
string expectedNamespace = "MyNamespace.MySubNamespace"; |
||||
string actualNamespace = c.Namespace; |
||||
Assert.AreEqual(expectedNamespace, actualNamespace); |
||||
} |
||||
|
||||
[Test] |
||||
public void Name_NewInstanceCreatedWithFullyQualifiedName_ReturnsNameTakenFromFullyQualifiedName() |
||||
{ |
||||
string fullyQualifiedName = "MyNamespace.MySubNamespace.MyClass"; |
||||
MockClass c = new MockClass(fullyQualifiedName); |
||||
string expectedName = "MyClass"; |
||||
string name = c.Name; |
||||
Assert.AreEqual(expectedName, name); |
||||
} |
||||
|
||||
[Test] |
||||
public void Namesapce_NewInstanceCreatedWithFullyQualifiedNameWithNoNamespace_ReturnsEmptyStringAsNamespace() |
||||
{ |
||||
string fullyQualifiedName = "MyClass"; |
||||
MockClass c = new MockClass(fullyQualifiedName); |
||||
string expectedNamespace = String.Empty; |
||||
string actualNamespace = c.Namespace; |
||||
Assert.AreEqual(expectedNamespace, actualNamespace); |
||||
} |
||||
|
||||
[Test] |
||||
public void CompilationUnit_NewInstanceCreated_ReturnsNonNullCompilationUnit() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
ICompilationUnit unit = c.CompilationUnit; |
||||
Assert.IsNotNull(unit); |
||||
} |
||||
|
||||
[Test] |
||||
public void ProjectContent_NewInstanceCreated_ReturnsMockProjectContent() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
MockProjectContent projectContent = c.ProjectContent as MockProjectContent; |
||||
Assert.IsNotNull(projectContent); |
||||
} |
||||
|
||||
[Test] |
||||
public void CompoundClass_NewInstance_ReturnsClassItself() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
IClass compoundClass = c.GetCompoundClass(); |
||||
Assert.AreEqual(c, compoundClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void DefaultReturnTypeGetUnderlyClass_NewInstance_ReturnsOriginalMockClass() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
IReturnType returnType = c.DefaultReturnType; |
||||
IClass underlyingClass = returnType.GetUnderlyingClass(); |
||||
Assert.AreEqual(c, underlyingClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void DeclaringType_NewInstanceWithInnerClass_InnerClassHasOuterClassAsDeclaringType() |
||||
{ |
||||
CreateClassWithInnerClass(); |
||||
IClass declaringType = innerClass.DeclaringType; |
||||
Assert.AreEqual(outerClass, declaringType); |
||||
} |
||||
|
||||
void CreateClassWithInnerClass() |
||||
{ |
||||
outerClass = new MockClass("MyTests.A"); |
||||
innerClass = new MockClass("MyTests.A.InnerATest", "MyTests.A+InnerATest", outerClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetCompoundClass_NewInstanceWithInnerClass_InnerClassReturnsInnerClassAsCompoundClass() |
||||
{ |
||||
CreateClassWithInnerClass(); |
||||
IClass compoundClass = innerClass.GetCompoundClass(); |
||||
Assert.AreEqual(innerClass, compoundClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void InnerClasses_NewInstanceCreatedWithInnerClass_FirstClassInCollectionIsInnerClass() |
||||
{ |
||||
CreateClassWithInnerClass(); |
||||
IClass firstInnerClass = outerClass.InnerClasses[0]; |
||||
Assert.AreEqual(innerClass, firstInnerClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void BaseClass_ClassAddedToBaseTypes_ClassAddedToBaseTypesBecomesBaseClass() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
MockClass baseClass = new MockClass(); |
||||
DefaultReturnType returnType = new DefaultReturnType(baseClass); |
||||
c.BaseTypes.Add(returnType); |
||||
IClass actualBaseClass = c.BaseClass; |
||||
Assert.AreEqual(baseClass, actualBaseClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void BaseClass_AddBaseClassMethodCalled_ReturnsClassAddedUsingAddBaseClassMethod() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
MockClass baseClass = new MockClass(); |
||||
c.AddBaseClass(baseClass); |
||||
IClass actualBaseClass = c.BaseClass; |
||||
Assert.AreEqual(baseClass, actualBaseClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void DotNetName_NewInstanceCreatedWithProjectContent_ReturnsFullyQualifiedNameAsDotNetName() |
||||
{ |
||||
MockProjectContent projectContent = new MockProjectContent(); |
||||
string expectedName = "MyNamespace.MyTests"; |
||||
MockClass c = new MockClass(projectContent, expectedName); |
||||
string dotNetName = c.DotNetName; |
||||
Assert.AreEqual(expectedName, dotNetName); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetCompoundClass_SetCompoundClassMethodCalled_ReturnsClassPassedToSetCompoundClass() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
MockClass compoundClass = new MockClass(); |
||||
c.SetCompoundClass(compoundClass); |
||||
IClass actualCompoundClass = c.GetCompoundClass(); |
||||
Assert.AreEqual(compoundClass, actualCompoundClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddProperty_PassedPropertyName_AddsPropertyToClass() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
c.AddProperty("MyProperty"); |
||||
|
||||
IProperty property = c.Properties[0]; |
||||
string name = property.Name; |
||||
|
||||
Assert.AreEqual("MyProperty", name); |
||||
} |
||||
|
||||
[Test] |
||||
public void InsertPropertyAtStart_PassedPropertyName_AddsPropertyAsFirstProperty() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
c.AddProperty("SecondProperty"); |
||||
c.InsertPropertyAtStart("FirstProperty"); |
||||
|
||||
IProperty property = c.Properties[0]; |
||||
string name = property.Name; |
||||
|
||||
Assert.AreEqual("FirstProperty", name); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddProperty_PassedPropertyName_ReturnsPropertyWithExpectedName() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
IProperty property = c.AddProperty("MyProperty"); |
||||
string name = property.Name; |
||||
|
||||
Assert.AreEqual("MyProperty", name); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddEvent_PassedEventName_AddsEventToClass() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
c.AddEvent("MyEvent"); |
||||
|
||||
IEvent myEvent = c.Events[0]; |
||||
string name = myEvent.Name; |
||||
|
||||
Assert.AreEqual("MyEvent", name); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddEvent_PassedEventName_ReturnsEventWithExpectedName() |
||||
{ |
||||
MockClass c = new MockClass(); |
||||
IEvent myEvent = c.AddEvent("MyEvent"); |
||||
string name = myEvent.Name; |
||||
|
||||
Assert.AreEqual("MyEvent", name); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,84 @@
@@ -0,0 +1,84 @@
|
||||
// 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 System.Collections.Generic; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
|
||||
namespace ICSharpCode.PythonBinding |
||||
{ |
||||
/// <summary>
|
||||
/// Resolves properties, events and fields.
|
||||
/// </summary>
|
||||
public class PythonMemberResolver : IPythonResolver |
||||
{ |
||||
PythonClassResolver classResolver; |
||||
|
||||
public PythonMemberResolver(PythonClassResolver classResolver) |
||||
{ |
||||
this.classResolver = classResolver; |
||||
} |
||||
|
||||
public ResolveResult Resolve(PythonResolverContext resolverContext, ExpressionResult expressionResult) |
||||
{ |
||||
IMember member = FindMember(resolverContext, expressionResult.Expression); |
||||
if (member != null) { |
||||
return CreateMemberResolveResult(member); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
IMember FindMember(PythonResolverContext resolverContext, string expression) |
||||
{ |
||||
MemberName memberName = new MemberName(expression); |
||||
if (memberName.HasName) { |
||||
IClass c = resolverContext.GetClass(memberName.Type); |
||||
if (c != null) { |
||||
return FindMemberInClass(c, memberName.Name); |
||||
} else { |
||||
return FindMember(resolverContext, memberName); |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
MemberResolveResult CreateMemberResolveResult(IMember member) |
||||
{ |
||||
return new MemberResolveResult(null, null, member); |
||||
} |
||||
|
||||
IMember FindMemberInClass(IClass matchingClass, string memberName) |
||||
{ |
||||
List<IMember> members = GetMembers(matchingClass); |
||||
foreach (IMember member in members) { |
||||
if (member.Name == memberName) { |
||||
return member; |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
List<IMember> GetMembers(IClass c) |
||||
{ |
||||
List<IMember> members = new List<IMember>(); |
||||
members.AddRange(c.Events); |
||||
members.AddRange(c.Properties); |
||||
return members; |
||||
} |
||||
|
||||
IMember FindMember(PythonResolverContext resolverContext, MemberName memberName) |
||||
{ |
||||
IMember parentMember = FindMember(resolverContext, memberName.Type); |
||||
if (parentMember != null) { |
||||
return FindMemberInParent(parentMember, memberName.Name); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
IMember FindMemberInParent(IMember parentMember, string propertyName) |
||||
{ |
||||
IClass parentMemberClass = parentMember.ReturnType.GetUnderlyingClass(); |
||||
return FindMemberInClass(parentMemberClass, propertyName); |
||||
} |
||||
} |
||||
} |
@ -1,74 +0,0 @@
@@ -1,74 +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 PythonPropertyResolver : IPythonResolver |
||||
{ |
||||
PythonClassResolver classResolver; |
||||
|
||||
public PythonPropertyResolver(PythonClassResolver classResolver) |
||||
{ |
||||
this.classResolver = classResolver; |
||||
} |
||||
|
||||
public ResolveResult Resolve(PythonResolverContext resolverContext, ExpressionResult expressionResult) |
||||
{ |
||||
IProperty property = FindProperty(resolverContext, expressionResult.Expression); |
||||
if (property != null) { |
||||
return CreateMemberResolveResult(property); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
IProperty FindProperty(PythonResolverContext resolverContext, string expression) |
||||
{ |
||||
MemberName memberName = new MemberName(expression); |
||||
IClass matchingClass = FindClass(resolverContext, memberName.Type); |
||||
if (matchingClass != null) { |
||||
return FindPropertyInClass(matchingClass, memberName.Name); |
||||
} else if (memberName.HasName) { |
||||
return FindProperty(resolverContext, memberName); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
MemberResolveResult CreateMemberResolveResult(IProperty property) |
||||
{ |
||||
return new MemberResolveResult(null, null, property); |
||||
} |
||||
|
||||
IClass FindClass(PythonResolverContext resolverContext, string typeName) |
||||
{ |
||||
return classResolver.GetClass(resolverContext, typeName); |
||||
} |
||||
|
||||
IProperty FindPropertyInClass(IClass matchingClass, string memberName) |
||||
{ |
||||
foreach (IProperty property in matchingClass.Properties) { |
||||
if (property.Name == memberName) { |
||||
return property; |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
IProperty FindProperty(PythonResolverContext resolverContext, MemberName memberName) |
||||
{ |
||||
IProperty parentProperty = FindProperty(resolverContext, memberName.Type); |
||||
if (parentProperty != null) { |
||||
return FindPropertyInProperty(parentProperty, memberName.Name); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
IProperty FindPropertyInProperty(IProperty parentProperty, string propertyName) |
||||
{ |
||||
IClass parentPropertyClass = parentProperty.ReturnType.GetUnderlyingClass(); |
||||
return FindPropertyInClass(parentPropertyClass, propertyName); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,78 @@
@@ -0,0 +1,78 @@
|
||||
// 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 |
||||
{ |
||||
/// <summary>
|
||||
/// Tests resolving events for the following classes:
|
||||
///
|
||||
/// public class MyClass
|
||||
/// {
|
||||
/// public event EventHandler MyEvent;
|
||||
/// }
|
||||
///
|
||||
/// </summary>
|
||||
[TestFixture] |
||||
public class ResolveClassEventTests |
||||
{ |
||||
PythonResolverTestsHelper resolverHelper; |
||||
IEvent myClassEvent; |
||||
MockClass myClass; |
||||
IProperty eventHandlerTargetProperty; |
||||
|
||||
void CreateClassWithOneEvent() |
||||
{ |
||||
resolverHelper = new PythonResolverTestsHelper(); |
||||
myClass = resolverHelper.CreateClass("MyClass"); |
||||
myClassEvent = myClass.AddEvent("MyEvent"); |
||||
|
||||
AddEventHandlerClass(); |
||||
|
||||
resolverHelper.ProjectContent.SetClassToReturnFromGetClass("MyClass", myClass); |
||||
} |
||||
|
||||
void AddEventHandlerClass() |
||||
{ |
||||
MockClass eventHandlerClass = resolverHelper.CreateClass("EventHandler"); |
||||
eventHandlerTargetProperty = eventHandlerClass.AddProperty("Target"); |
||||
myClassEvent.ReturnType = new DefaultReturnType(eventHandlerClass); |
||||
} |
||||
|
||||
[Test] |
||||
public void Resolve_ExpressionIsForEventOnClass_MemberResolveResultResolvedTypeIsClassEvent() |
||||
{ |
||||
CreateClassWithOneEvent(); |
||||
resolverHelper.Resolve("MyClass.MyEvent"); |
||||
IMember resolvedMember = resolverHelper.MemberResultResult.ResolvedMember; |
||||
|
||||
Assert.AreEqual(myClassEvent, resolvedMember); |
||||
} |
||||
|
||||
[Test] |
||||
public void Resolve_ExpressionIsForSecondEventOnClass_MemberResolveResultResolvedTypeIsSecondEvent() |
||||
{ |
||||
CreateClassWithOneEvent(); |
||||
IEvent secondEvent = myClass.AddEvent("SecondEvent"); |
||||
resolverHelper.Resolve("MyClass.SecondEvent"); |
||||
IMember resolvedMember = resolverHelper.MemberResultResult.ResolvedMember; |
||||
|
||||
Assert.AreEqual(secondEvent, resolvedMember); |
||||
} |
||||
|
||||
[Test] |
||||
public void Resolve_ExpressionIsForEventHandlerTargetProperty_MemberResolveResultResolvedTypeIsEventHandlerTargetProperty() |
||||
{ |
||||
CreateClassWithOneEvent(); |
||||
resolverHelper.Resolve("MyClass.MyEvent.Target"); |
||||
IMember resolvedMember = resolverHelper.MemberResultResult.ResolvedMember; |
||||
|
||||
Assert.AreEqual(eventHandlerTargetProperty, resolvedMember); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
// 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.SharpDevelop.Dom; |
||||
using UnitTesting.Tests.Utils; |
||||
using ScriptingUtils = ICSharpCode.Scripting.Tests.Utils; |
||||
|
||||
namespace PythonBinding.Tests.Utils |
||||
{ |
||||
public class PythonResolverTestsHelper |
||||
{ |
||||
public ScriptingUtils.MockProjectContent ProjectContent; |
||||
public DefaultCompilationUnit CompilationUnit; |
||||
public ParseInformation ParseInfo; |
||||
public PythonResolverContext Context; |
||||
public PythonResolver Resolver; |
||||
public ResolveResult ResolveResult; |
||||
|
||||
public PythonResolverTestsHelper() |
||||
{ |
||||
ProjectContent = new ScriptingUtils.MockProjectContent(); |
||||
CompilationUnit = new DefaultCompilationUnit(ProjectContent); |
||||
ParseInfo = new ParseInformation(CompilationUnit); |
||||
Context = new PythonResolverContext(ParseInfo); |
||||
|
||||
Resolver = new PythonResolver(); |
||||
} |
||||
|
||||
public ResolveResult Resolve(string expression) |
||||
{ |
||||
ExpressionResult expressionResult = new ExpressionResult(expression); |
||||
ResolveResult = Resolver.Resolve(Context, expressionResult); |
||||
return ResolveResult; |
||||
} |
||||
|
||||
public MemberResolveResult MemberResultResult { |
||||
get { return ResolveResult as MemberResolveResult; } |
||||
} |
||||
|
||||
public MockClass CreateClass(string name) |
||||
{ |
||||
return new MockClass(ProjectContent, name); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue