You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
6.7 KiB
228 lines
6.7 KiB
// 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 System.Linq; |
|
using ICSharpCode.SharpDevelop.Dom; |
|
using Rhino.Mocks; |
|
|
|
namespace PackageManagement.Tests.Helpers |
|
{ |
|
public class ClassHelper |
|
{ |
|
public IClass Class; |
|
public ProjectContentHelper ProjectContentHelper = new ProjectContentHelper(); |
|
public CompilationUnitHelper CompilationUnitHelper = new CompilationUnitHelper(); |
|
|
|
List<IMethod> methods = new List<IMethod>(); |
|
List<IProperty> properties = new List<IProperty>(); |
|
List<IField> fields = new List<IField>(); |
|
|
|
public void CreateClass(string name) |
|
{ |
|
Class = ProjectContentHelper.AddClassToProjectContent(name); |
|
InitializeClassCommon(); |
|
} |
|
|
|
void InitializeClassCommon() |
|
{ |
|
Class.Stub(c => c.Methods).Return(methods); |
|
Class.Stub(c => c.Properties).Return(properties); |
|
Class.Stub(c => c.Fields).Return(fields); |
|
Class.Stub(c => c.CompilationUnit).Return(CompilationUnitHelper.CompilationUnit); |
|
} |
|
|
|
public void AddAttributeToClass(string attributeTypeName) |
|
{ |
|
var attributeHelper = new AttributeHelper(); |
|
attributeHelper.CreateAttribute(attributeTypeName); |
|
attributeHelper.AddAttributeToClass(Class); |
|
} |
|
|
|
public void CreatePublicClass(string name) |
|
{ |
|
Class = ProjectContentHelper.AddPublicClassToProjectContent(name); |
|
InitializeClassCommon(); |
|
} |
|
|
|
public void CreatePrivateClass(string name) |
|
{ |
|
Class = ProjectContentHelper.AddPrivateClassToProjectContent(name); |
|
InitializeClassCommon(); |
|
} |
|
|
|
public void AddInterfaceToClassBaseTypes(string interfaceFullName, string dotNetName) |
|
{ |
|
IClass interfaceClass = ProjectContentHelper.AddInterfaceToProjectContent(interfaceFullName); |
|
AddClassToClassBaseTypes(interfaceClass, interfaceFullName, dotNetName); |
|
} |
|
|
|
public void AddClassToClassBaseTypes(IClass baseTypeClass, string baseTypeFullName, string baseTypeDotNetName) |
|
{ |
|
IReturnType baseType = CreateBaseType(baseTypeClass, baseTypeFullName, baseTypeDotNetName); |
|
var baseTypes = new List<IReturnType>(); |
|
baseTypes.Add(baseType); |
|
|
|
Class.Stub(c => c.BaseTypes).Return(baseTypes); |
|
} |
|
|
|
ReturnTypeHelper CreateBaseTypeHelper(IClass baseTypeClass, string baseTypeFullName, string baseTypeDotNetName) |
|
{ |
|
var returnTypeHelper = new ReturnTypeHelper(); |
|
returnTypeHelper.CreateReturnType(baseTypeFullName); |
|
returnTypeHelper.AddUnderlyingClass(baseTypeClass); |
|
returnTypeHelper.AddDotNetName(baseTypeDotNetName); |
|
return returnTypeHelper; |
|
} |
|
|
|
IReturnType CreateBaseType(IClass baseTypeClass, string baseTypeFullName, string baseTypeDotNetName) |
|
{ |
|
return CreateBaseTypeHelper(baseTypeClass, baseTypeFullName, baseTypeDotNetName).ReturnType; |
|
} |
|
|
|
public void AddClassToClassBaseTypes(string fullName) |
|
{ |
|
IClass baseTypeClass = ProjectContentHelper.AddClassToProjectContent(fullName); |
|
AddClassToClassBaseTypes(baseTypeClass, fullName, fullName); |
|
} |
|
|
|
public void AddBaseTypeToClass(string fullName) |
|
{ |
|
IClass baseTypeClass = ProjectContentHelper.AddClassToProjectContent(fullName); |
|
IReturnType baseType = CreateBaseType(baseTypeClass, fullName, fullName); |
|
|
|
Class.Stub(c => c.BaseType).Return(baseType); |
|
} |
|
|
|
/// <summary> |
|
/// Name should include the class prefix (e.g. "Class1.MyMethod"); |
|
/// </summary> |
|
public void AddMethodToClass(string fullyQualifiedName) |
|
{ |
|
AddMethodToClass(fullyQualifiedName, DomRegion.Empty, DomRegion.Empty); |
|
} |
|
|
|
public void AddMethodToClass(string fullyQualifiedName, DomRegion region, DomRegion bodyRegion) |
|
{ |
|
var helper = new MethodHelper(); |
|
helper.ProjectContentHelper = ProjectContentHelper; |
|
helper.CreateMethod(fullyQualifiedName); |
|
helper.SetRegion(region); |
|
helper.SetBodyRegion(bodyRegion); |
|
helper.SetDeclaringType(Class); |
|
methods.Add(helper.Method); |
|
} |
|
|
|
/// <summary> |
|
/// Name should include the class prefix (e.g. "Class1.MyProperty"); |
|
/// </summary> |
|
public void AddPropertyToClass(string fullyQualifiedName) |
|
{ |
|
var helper = new PropertyHelper(); |
|
helper.ProjectContentHelper = ProjectContentHelper; |
|
helper.CreateProperty(fullyQualifiedName); |
|
|
|
properties.Add(helper.Property); |
|
} |
|
|
|
/// <summary> |
|
/// Name should include the class prefix (e.g. "Class1.MyField"); |
|
/// </summary> |
|
public void AddFieldToClass(string fullyQualifiedName) |
|
{ |
|
AddFieldToClass(fullyQualifiedName, DomRegion.Empty); |
|
} |
|
|
|
public void AddFieldToClass(string fullyQualifiedName, DomRegion region) |
|
{ |
|
var helper = new FieldHelper(); |
|
helper.ProjectContentHelper = ProjectContentHelper; |
|
helper.CreateField(fullyQualifiedName); |
|
helper.SetRegion(region); |
|
|
|
fields.Add(helper.Field); |
|
} |
|
|
|
public void AddClassNamespace(string name) |
|
{ |
|
Class.Stub(c => c.Namespace).Return(name); |
|
} |
|
|
|
public void SetClassRegion(DomRegion classRegion) |
|
{ |
|
Class.Stub(c => c.Region).Return(classRegion); |
|
} |
|
|
|
public void SetClassFileName(string fileName) |
|
{ |
|
CompilationUnitHelper.SetFileName(fileName); |
|
} |
|
|
|
public void SetClassType(ClassType type) |
|
{ |
|
Class.Stub(c => c.ClassType).Return(type); |
|
} |
|
|
|
public void SetProjectForProjectContent(object project) |
|
{ |
|
ProjectContentHelper.SetProjectForProjectContent(project); |
|
} |
|
|
|
public void MakeClassAbstract() |
|
{ |
|
Class.Stub(c => c.IsAbstract).Return(true); |
|
} |
|
|
|
public void MakeClassPartial() |
|
{ |
|
Class.Stub(c => c.IsPartial).Return(true); |
|
} |
|
|
|
public void AddNamespaceUsingScopeToClass(string namespaceName) |
|
{ |
|
var usingScopeHelper = new UsingScopeHelper(); |
|
usingScopeHelper.SetNamespaceName(namespaceName); |
|
|
|
Class.Stub(c => c.UsingScope).Return(usingScopeHelper.UsingScope); |
|
} |
|
|
|
public void SetDotNetName(string className) |
|
{ |
|
Class.Stub(c => c.DotNetName).Return(className); |
|
} |
|
|
|
/// <summary> |
|
/// Classes at the end of the array are at the top of the inheritance tree. |
|
/// </summary> |
|
public void AddClassInheritanceTreeClassesOnly(params string[] classNames) |
|
{ |
|
List<IClass> classes = CreateClassInheritanceTree(classNames); |
|
Class.Stub(c => c.ClassInheritanceTreeClassesOnly).Return(classes); |
|
} |
|
|
|
List<IClass> CreateClassInheritanceTree(string[] classNames) |
|
{ |
|
return classNames |
|
.Select(name => CreateClassHelperWithPublicClass(name).Class) |
|
.ToList(); |
|
} |
|
|
|
ClassHelper CreateClassHelperWithPublicClass(string name) |
|
{ |
|
var classHelper = new ClassHelper(); |
|
classHelper.CreatePublicClass(name); |
|
return classHelper; |
|
} |
|
|
|
public void SetRegionBeginLine(int line) |
|
{ |
|
SetRegion(new DomRegion(line, 1)); |
|
} |
|
|
|
public void SetRegion(DomRegion region) |
|
{ |
|
Class.Stub(c => c.Region).Return(region); |
|
} |
|
} |
|
}
|
|
|