diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index 12f91d3dd8..a9bcaa3611 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -96,6 +96,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs index 153002c087..802aa44ee8 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs @@ -46,7 +46,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE } public virtual CodeElements Members { - get { throw new NotImplementedException(); } + get { return new CodeTypeMembers(ProjectContent, Class); } } public virtual CodeElements Bases { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeMembers.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeMembers.cs new file mode 100644 index 0000000000..fa352035ab --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeMembers.cs @@ -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.SharpDevelop.Dom; + +namespace ICSharpCode.PackageManagement.EnvDTE +{ + public class CodeTypeMembers : CodeElementsList + { + IProjectContent projectContent; + IClass c; + + public CodeTypeMembers(IProjectContent projectContent, IClass c) + { + this.projectContent = projectContent; + this.c = c; + AddMembers(); + } + + void AddMembers() + { + foreach (IProperty property in c.Properties) { + AddProperty(property); + } + foreach (IField field in c.Fields) { + AddField(field); + } + foreach (IMethod method in c.Methods) { + AddMethod(method); + } + } + + void AddMethod(IMethod method) + { + AddCodeElement(new CodeFunction(method)); + } + + void AddField(IField field) + { + AddCodeElement(new CodeVariable(field)); + } + + void AddProperty(IProperty property) + { + AddCodeElement(new CodeProperty2(property)); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index acd6695927..69d15dc3b5 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -87,11 +87,14 @@ + + + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttribute2Tests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttribute2Tests.cs index 57e37ab71d..6c0b9f4408 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttribute2Tests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttribute2Tests.cs @@ -98,7 +98,7 @@ namespace PackageManagement.Tests.EnvDTE CodeElements args = codeAttribute.Arguments; - CodeAttributeArgument attributeArg = args.ToList().FirstOrDefault() as CodeAttributeArgument; + CodeAttributeArgument attributeArg = args.FirstCodeAttributeArgumentOrDefault(); Assert.AreEqual(1, args.Count); Assert.AreEqual(String.Empty, attributeArg.Name); @@ -114,7 +114,7 @@ namespace PackageManagement.Tests.EnvDTE CodeElements args = codeAttribute.Arguments; - CodeAttributeArgument attributeArg = args.ToList().FirstOrDefault() as CodeAttributeArgument; + CodeAttributeArgument attributeArg = args.FirstCodeAttributeArgumentOrDefault(); Assert.AreEqual("Name", attributeArg.Name); Assert.AreEqual("\"StringValue\"", attributeArg.Value); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttributesTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttributesTests.cs index 3843959773..5d3f3fc0b1 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttributesTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttributesTests.cs @@ -14,31 +14,28 @@ namespace PackageManagement.Tests.EnvDTE [TestFixture] public class CodeAttributesTests { - IClass fakeClass; CodeAttributes attributes; - ProjectContentHelper helper; + ClassHelper helper; [SetUp] public void Init() { - helper = new ProjectContentHelper(); + helper = new ClassHelper(); } void CreateCodeAttributes() { - attributes = new CodeAttributes(fakeClass); + attributes = new CodeAttributes(helper.Class); } void CreateMSBuildClass() { - fakeClass = helper.AddClassToProjectContent("MyClass"); + helper.CreateClass("MyClass"); } void AddAttributeToClass(string name) { - var attributeHelper = new AttributeHelper(); - attributeHelper.CreateAttribute(name); - attributeHelper.AddAttributeToClass(fakeClass); + helper.AddAttributeToClass(name); } List GetEnumerator() @@ -53,11 +50,9 @@ namespace PackageManagement.Tests.EnvDTE AddAttributeToClass("TestAttribute"); CreateCodeAttributes(); - List attributeList = GetEnumerator(); + CodeAttribute2 attribute = attributes.FirstCodeAttribute2OrDefault(); - CodeAttribute2 attribute = attributeList.FirstOrDefault() as CodeAttribute2; - - Assert.AreEqual(1, attributeList.Count); + Assert.AreEqual(1, attributes.Count); Assert.AreEqual("Test", attribute.Name); } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs index 3e4a489aac..57305048d0 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs @@ -14,67 +14,81 @@ namespace PackageManagement.Tests.EnvDTE public class CodeClass2Tests { CodeClass2 codeClass; - ProjectContentHelper helper; - IClass fakeClass; + ClassHelper helper; void CreateProjectContent() { - helper = new ProjectContentHelper(); + helper = new ClassHelper(); } void CreateClass(string name) { - fakeClass = helper.AddClassToProjectContent(name); + helper.CreateClass(name); CreateClass(); } void CreatePublicClass(string name) { - fakeClass = helper.AddPublicClassToProjectContent(name); + helper.CreatePublicClass(name); CreateClass(); } void CreatePrivateClass(string name) { - fakeClass = helper.AddPrivateClassToProjectContent(name); + helper.CreatePrivateClass(name); CreateClass(); } void CreateClass() { - codeClass = new CodeClass2(helper.FakeProjectContent, fakeClass); + codeClass = new CodeClass2(helper.ProjectContentHelper.FakeProjectContent, helper.Class); } void AddInterfaceToProjectContent(string fullName) { - helper.AddInterfaceToProjectContent(fullName); + helper.ProjectContentHelper.AddInterfaceToProjectContent(fullName); } void AddClassToProjectContent(string fullName) { - helper.AddClassToProjectContent(fullName); + helper.CreateClass(fullName); } void AddInterfaceToClassBaseTypes(string fullName, string dotNetName) { - helper.AddInterfaceToClassBaseTypes(fakeClass, fullName, dotNetName); + helper.AddInterfaceToClassBaseTypes(fullName, dotNetName); } void AddClassToClassBaseTypes(string fullName) { - helper.AddClassToClassBaseTypes(fakeClass, fullName); + helper.AddClassToClassBaseTypes(fullName); } void AddBaseTypeToClass(string fullName) { - helper.AddBaseTypeToClass(fakeClass, fullName); + helper.AddBaseTypeToClass(fullName); + } + + void AddMethodToClass(string fullyQualifiedName) + { + helper.AddMethodToClass(fullyQualifiedName); + } + + void AddPropertyToClass(string fullyQualifiedName) + { + helper.AddPropertyToClass(fullyQualifiedName); + } + + void AddFieldToClass(string fullyQualifiedName) + { + helper.AddFieldToClass(fullyQualifiedName); } [Test] public void Language_CSharpProject_ReturnsCSharpModelLanguage() { CreateProjectContent(); - helper.ProjectContentIsForCSharpProject(); + helper.ProjectContentHelper.ProjectContentIsForCSharpProject(); CreateClass("MyClass"); string language = codeClass.Language; @@ -86,7 +100,7 @@ namespace PackageManagement.Tests.EnvDTE public void Language_VisualBasicProject_ReturnsVisualBasicModelLanguage() { CreateProjectContent(); - helper.ProjectContentIsForVisualBasicProject(); + helper.ProjectContentHelper.ProjectContentIsForVisualBasicProject(); CreateClass("MyClass"); string language = codeClass.Language; @@ -124,7 +138,7 @@ namespace PackageManagement.Tests.EnvDTE AddInterfaceToClassBaseTypes("System.Collections.Generic.ICollection", "System.Collections.Generic.ICollection{System.String}"); CodeElements codeElements = codeClass.ImplementedInterfaces; - CodeInterface codeInterface = codeElements.FirstOrDefault() as CodeInterface; + CodeInterface codeInterface = codeElements.FirstCodeInterfaceOrDefault(); Assert.AreEqual(1, codeElements.Count); Assert.AreEqual("System.Collections.Generic.ICollection", codeInterface.FullName); @@ -150,11 +164,53 @@ namespace PackageManagement.Tests.EnvDTE AddBaseTypeToClass("System.Object"); CodeElements codeElements = codeClass.Bases; - CodeClass2 baseClass = codeElements.FirstOrDefault() as CodeClass2; + CodeClass2 baseClass = codeElements.FirstCodeClass2OrDefault(); Assert.AreEqual(1, codeElements.Count); Assert.AreEqual("System.Object", baseClass.FullName); Assert.AreEqual("Object", baseClass.Name); } + + [Test] + public void Members_ClassHasOneMethod_ReturnsOneMethod() + { + CreateProjectContent(); + CreatePublicClass("MyClass"); + AddMethodToClass("MyClass.MyMethod"); + + CodeElements codeElements = codeClass.Members; + CodeFunction codeFunction = codeElements.FirstCodeFunctionOrDefault(); + + Assert.AreEqual(1, codeElements.Count); + Assert.AreEqual("MyMethod", codeFunction.Name); + } + + [Test] + public void Members_ClassHasOneProperty_ReturnsOneProperty() + { + CreateProjectContent(); + CreatePublicClass("MyClass"); + AddPropertyToClass("MyClass.MyProperty"); + + CodeElements codeElements = codeClass.Members; + CodeProperty2 codeFunction = codeElements.FirstCodeProperty2OrDefault(); + + Assert.AreEqual(1, codeElements.Count); + Assert.AreEqual("MyProperty", codeFunction.Name); + } + + [Test] + public void Members_ClassHasOneField_ReturnsOneField() + { + CreateProjectContent(); + CreatePublicClass("MyClass"); + AddFieldToClass("MyClass.MyField"); + + CodeElements codeElements = codeClass.Members; + CodeVariable codeVariable = codeElements.FirstCodeVariableOrDefault(); + + Assert.AreEqual(1, codeElements.Count); + Assert.AreEqual("MyField", codeVariable.Name); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs index 4fe1d5a528..0b841078e3 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs @@ -55,7 +55,7 @@ namespace PackageManagement.Tests.EnvDTE helper.AddNamespaceCompletionEntryInNamespace("Parent", "Child"); CreateCodeElements("Parent"); - CodeNamespace codeNamespace = codeElements.ToList().FirstOrDefault() as CodeNamespace; + CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault(); Assert.AreEqual(1, codeElements.Count); Assert.AreEqual("Child", codeNamespace.Name); @@ -105,8 +105,8 @@ namespace PackageManagement.Tests.EnvDTE helper.NoCompletionItemsInNamespace("Parent.Child.GrandChild"); CreateCodeElements("Parent"); - CodeNamespace codeNamespace = codeElements.ToList().FirstOrDefault() as CodeNamespace; - CodeNamespace grandChildNamespace = codeNamespace.Members.ToList().FirstOrDefault() as CodeNamespace; + CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault(); + CodeNamespace grandChildNamespace = codeNamespace.Members.FirstCodeNamespaceOrDefault(); Assert.AreEqual("GrandChild", grandChildNamespace.Name); } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeFunctionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeFunctionTests.cs index b937b4d8af..11dee77206 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeFunctionTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeFunctionTests.cs @@ -14,55 +14,35 @@ namespace PackageManagement.Tests.EnvDTE public class CodeFunctionTests { CodeFunction codeFunction; - IMethod method; - ProjectContentHelper helper; + MethodHelper helper; [SetUp] public void Init() { - helper = new ProjectContentHelper(); - } - - void CreateMSBuildMethod(string name) - { - method = MockRepository.GenerateMock(); - method.Stub(m => m.ProjectContent).Return(helper.FakeProjectContent); - } - - void CreateMSBuildPublicMethod(string name) - { - CreateMSBuildMethod(name); - method.Stub(m => m.IsPublic).Return(true); - } - - void CreateMSBuildPrivateMethod(string name) - { - CreateMSBuildMethod(name); - method.Stub(m => m.IsPublic).Return(false); - method.Stub(m => m.IsPrivate).Return(true); + helper = new MethodHelper(); } void CreatePublicFunction(string name) { - CreateMSBuildPublicMethod(name); + helper.CreatePublicMethod(name); CreateFunction(); } void CreatePrivateFunction(string name) { - CreateMSBuildPrivateMethod(name); + helper.CreatePrivateMethod(name); CreateFunction(); } void CreateFunction() { - codeFunction = new CodeFunction(method); + codeFunction = new CodeFunction(helper.Method); } [Test] public void Access_PublicFunction_ReturnsPublic() { - CreatePublicFunction("MyFunction"); + CreatePublicFunction("Class1.MyFunction"); vsCMAccess access = codeFunction.Access; @@ -72,7 +52,7 @@ namespace PackageManagement.Tests.EnvDTE [Test] public void Access_PrivateFunction_ReturnsPrivate() { - CreatePrivateFunction("MyFunction"); + CreatePrivateFunction("Class1.MyFunction"); vsCMAccess access = codeFunction.Access; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs index 6056e8c402..51a511e6eb 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs @@ -103,7 +103,7 @@ namespace PackageManagement.Tests.EnvDTE helper.AddNamespaceCompletionEntryInNamespace(String.Empty, "Test"); CodeElements codeElements = codeModel.CodeElements; - CodeNamespace codeNamespace = codeElements.FirstOrDefault() as CodeNamespace; + CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault(); Assert.AreEqual(1, codeElements.Count); Assert.AreEqual("Test", codeNamespace.FullName); @@ -118,7 +118,7 @@ namespace PackageManagement.Tests.EnvDTE helper.AddNamespaceCompletionEntryInNamespace("First", "Second"); CodeElements codeElements = codeModel.CodeElements; - CodeNamespace codeNamespace = codeElements.FirstOrDefault() as CodeNamespace; + CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault(); Assert.AreEqual(1, codeElements.Count); Assert.AreEqual("First", codeNamespace.FullName); @@ -132,7 +132,7 @@ namespace PackageManagement.Tests.EnvDTE AddClassToProjectContent(String.Empty, "TestClass"); CodeElements codeElements = codeModel.CodeElements; - CodeClass2 codeClass = codeElements.FirstOrDefault() as CodeClass2; + CodeClass2 codeClass = codeElements.FirstCodeClass2OrDefault(); Assert.AreEqual(1, codeElements.Count); Assert.AreEqual("TestClass", codeClass.FullName); @@ -148,11 +148,11 @@ namespace PackageManagement.Tests.EnvDTE helper.NoCompletionItemsInNamespace("First.B"); CodeElements codeElements = codeModel.CodeElements; - CodeNamespace codeNamespace = codeElements.FirstOrDefault() as CodeNamespace; + CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault(); - List members = codeNamespace.Members.ToList(); - CodeNamespace firstChildNamespace = members.FirstOrDefault() as CodeNamespace; - CodeNamespace secondChildNamespace = members.LastOrDefault() as CodeNamespace; + CodeElements members = codeNamespace.Members; + CodeNamespace firstChildNamespace = members.FirstCodeNamespaceOrDefault(); + CodeNamespace secondChildNamespace = members.LastCodeNamespaceOrDefault(); Assert.AreEqual(1, codeElements.Count); Assert.AreEqual("First", codeNamespace.FullName); @@ -168,7 +168,7 @@ namespace PackageManagement.Tests.EnvDTE helper.AddNamespaceCompletionEntriesInNamespace(String.Empty, String.Empty, "Tests"); CodeElements members = codeModel.CodeElements; - CodeNamespace codeNamespace = members.ToList().FirstOrDefault() as CodeNamespace; + CodeNamespace codeNamespace = members.FirstCodeNamespaceOrDefault(); Assert.AreEqual(1, members.Count); Assert.AreEqual("Tests", codeNamespace.Name); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs index cd70d6225c..f216a3820d 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs @@ -43,7 +43,7 @@ namespace PackageManagement.Tests.EnvDTE CreateCodeNamespace("Tests"); CodeElements members = codeNamespace.Members; - CodeClass2 codeClass = members.FirstOrDefault() as CodeClass2; + CodeClass2 codeClass = members.FirstCodeClass2OrDefault(); Assert.AreEqual(1, members.Count); Assert.AreEqual("Tests.MyClass", codeClass.FullName); @@ -57,7 +57,7 @@ namespace PackageManagement.Tests.EnvDTE CreateCodeNamespace("First"); CodeElements members = codeNamespace.Members; - CodeNamespace childNamespace = members.FirstOrDefault() as CodeNamespace; + CodeNamespace childNamespace = members.FirstCodeNamespaceOrDefault(); Assert.AreEqual("First", codeNamespace.Name); Assert.AreEqual(1, members.Count); @@ -84,8 +84,8 @@ namespace PackageManagement.Tests.EnvDTE CreateCodeNamespace("First"); CodeElements members = codeNamespace.Members; - CodeNamespace secondNamespace = members.FirstOrDefault() as CodeNamespace; - CodeNamespace thirdNamespace = secondNamespace.Members.FirstOrDefault() as CodeNamespace; + CodeNamespace secondNamespace = members.FirstCodeNamespaceOrDefault(); + CodeNamespace thirdNamespace = secondNamespace.Members.FirstCodeNamespaceOrDefault(); Assert.AreEqual("First", codeNamespace.Name); Assert.AreEqual(1, members.Count); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs index 52df31e32c..3faecbace7 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs @@ -13,29 +13,26 @@ namespace PackageManagement.Tests.EnvDTE public class CodeTypeTests { CodeType codeType; - ProjectContentHelper helper; - IClass fakeClass; + ClassHelper helper; void CreateProjectContent() { - helper = new ProjectContentHelper(); + helper = new ClassHelper(); } void CreateClass(string name) { - fakeClass = helper.AddClassToProjectContent(name); + helper.CreateClass(name); } void CreateCodeType() { - codeType = new CodeType(helper.FakeProjectContent, fakeClass); + codeType = new CodeType(helper.ProjectContentHelper.FakeProjectContent, helper.Class); } void AddAttributeToClass(string name) { - var attributeHelper = new AttributeHelper(); - attributeHelper.CreateAttribute(name); - attributeHelper.AddAttributeToClass(fakeClass); + helper.AddAttributeToClass(name); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeVariableTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeVariableTests.cs index 03f35d9bff..27c679c20d 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeVariableTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeVariableTests.cs @@ -14,49 +14,29 @@ namespace PackageManagement.Tests.EnvDTE public class CodeVariableTests { CodeVariable codeVariable; - IField field; - ProjectContentHelper helper; + FieldHelper helper; [SetUp] public void Init() { - helper = new ProjectContentHelper(); + helper = new FieldHelper(); } - - void CreateMSBuildField(string name) - { - field = MockRepository.GenerateMock(); - field.Stub(f => f.ProjectContent).Return(helper.FakeProjectContent); - } - - void CreateMSBuildPublicField(string name) - { - CreateMSBuildField(name); - field.Stub(f => f.IsPublic).Return(true); - } - - void CreateMSBuildPrivateField(string name) - { - CreateMSBuildField(name); - field.Stub(f => f.IsPublic).Return(false); - field.Stub(f => f.IsPrivate).Return(true); - } - + void CreatePublicVariable(string name) { - CreateMSBuildPublicField(name); + helper.CreatePublicField(name); CreateVariable(); } void CreatePrivateVariable(string name) { - CreateMSBuildPrivateField(name); + helper.CreatePrivateField(name); CreateVariable(); } void CreateVariable() { - codeVariable = new CodeVariable(field); + codeVariable = new CodeVariable(helper.Field); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ClassHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ClassHelper.cs new file mode 100644 index 0000000000..33770d8d1e --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ClassHelper.cs @@ -0,0 +1,125 @@ +// 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; +using Rhino.Mocks; + +namespace PackageManagement.Tests.Helpers +{ + public class ClassHelper + { + public IClass Class; + public ProjectContentHelper ProjectContentHelper = new ProjectContentHelper(); + + List methods = new List(); + List properties = new List(); + List fields = new List(); + + 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); + } + + public void AddAttributeToClass(string name) + { + var attributeHelper = new AttributeHelper(); + attributeHelper.CreateAttribute(name); + 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(); + baseTypes.Add(baseType); + + Class.Stub(c => c.BaseTypes).Return(baseTypes); + } + + IReturnType CreateBaseType(IClass baseTypeClass, string baseTypeFullName, string baseTypeDotNetName) + { + IReturnType baseType = MockRepository.GenerateStub(); + baseType.Stub(b => b.GetUnderlyingClass()).Return(baseTypeClass); + baseType.Stub(b => b.FullyQualifiedName).Return(baseTypeFullName); + baseType.Stub(b => b.DotNetName).Return(baseTypeDotNetName); + return baseType; + } + + 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); + } + + /// + /// Name should include the class prefix (e.g. "Class1.MyMethod"); + /// + public void AddMethodToClass(string fullyQualifiedName) + { + var helper = new MethodHelper(); + helper.ProjectContentHelper = ProjectContentHelper; + helper.CreateMethod(fullyQualifiedName); + methods.Add(helper.Method); + } + + /// + /// Name should include the class prefix (e.g. "Class1.MyProperty"); + /// + public void AddPropertyToClass(string fullyQualifiedName) + { + var helper = new PropertyHelper(); + helper.ProjectContentHelper = ProjectContentHelper; + helper.CreateProperty(fullyQualifiedName); + + properties.Add(helper.Property); + } + + /// + /// Name should include the class prefix (e.g. "Class1.MyField"); + /// + public void AddFieldToClass(string fullyQualifiedName) + { + var helper = new FieldHelper(); + helper.ProjectContentHelper = ProjectContentHelper; + helper.CreateField(fullyQualifiedName); + + fields.Add(helper.Field); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/CodeElementsHelpers.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/CodeElementsHelpers.cs index 000537dfd6..83bdc6d784 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/CodeElementsHelpers.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/CodeElementsHelpers.cs @@ -10,11 +10,6 @@ namespace PackageManagement.Tests.Helpers { public static class CodeElementsHelpers { - public static CodeElement FirstOrDefault(this CodeElements codeElements) - { - return ToList(codeElements).FirstOrDefault(); - } - public static List ToList(this CodeElements codeElements) { var list = new List(); @@ -23,5 +18,60 @@ namespace PackageManagement.Tests.Helpers } return list; } + + public static CodeElement FirstOrDefault(this CodeElements codeElements) + { + return ToList(codeElements).FirstOrDefault(); + } + + public static CodeFunction FirstCodeFunctionOrDefault(this CodeElements codeElements) + { + return codeElements.FirstOrDefault() as CodeFunction; + } + + public static CodeClass2 FirstCodeClass2OrDefault(this CodeElements codeElements) + { + return codeElements.FirstOrDefault() as CodeClass2; + } + + public static CodeInterface FirstCodeInterfaceOrDefault(this CodeElements codeElements) + { + return codeElements.FirstOrDefault() as CodeInterface; + } + + public static CodeAttributeArgument FirstCodeAttributeArgumentOrDefault(this CodeElements codeElements) + { + return codeElements.FirstOrDefault() as CodeAttributeArgument; + } + + public static CodeNamespace FirstCodeNamespaceOrDefault(this CodeElements codeElements) + { + return codeElements.FirstOrDefault() as CodeNamespace; + } + + public static CodeNamespace LastCodeNamespaceOrDefault(this CodeElements codeElements) + { + return codeElements.LastOrDefault() as CodeNamespace; + } + + public static CodeElement LastOrDefault(this CodeElements codeElements) + { + return codeElements.ToList().LastOrDefault(); + } + + public static CodeAttribute2 FirstCodeAttribute2OrDefault(this CodeElements codeElements) + { + return codeElements.FirstOrDefault() as CodeAttribute2; + } + + public static CodeProperty2 FirstCodeProperty2OrDefault(this CodeElements codeElements) + { + return codeElements.FirstOrDefault() as CodeProperty2; + } + + public static CodeVariable FirstCodeVariableOrDefault(this CodeElements codeElements) + { + return codeElements.FirstOrDefault() as CodeVariable; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FieldHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FieldHelper.cs new file mode 100644 index 0000000000..083da1399c --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FieldHelper.cs @@ -0,0 +1,38 @@ +// 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 Rhino.Mocks; + +namespace PackageManagement.Tests.Helpers +{ + public class FieldHelper + { + public IField Field; + public ProjectContentHelper ProjectContentHelper = new ProjectContentHelper(); + + /// + /// Field name should include the class prefix (e.g. "Class1.MyField") + /// + public void CreateField(string fullyQualifiedName) + { + Field = MockRepository.GenerateMock(); + Field.Stub(f => f.ProjectContent).Return(ProjectContentHelper.FakeProjectContent); + Field.Stub(f => f.FullyQualifiedName).Return(fullyQualifiedName); + } + + public void CreatePublicField(string fullyQualifiedName) + { + CreateField(fullyQualifiedName); + Field.Stub(f => f.IsPublic).Return(true); + } + + public void CreatePrivateField(string fullyQualifiedName) + { + CreateField(fullyQualifiedName); + Field.Stub(f => f.IsPublic).Return(false); + Field.Stub(f => f.IsPrivate).Return(true); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/MethodHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/MethodHelper.cs new file mode 100644 index 0000000000..c85ca5b0ab --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/MethodHelper.cs @@ -0,0 +1,38 @@ +// 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 Rhino.Mocks; + +namespace PackageManagement.Tests.Helpers +{ + public class MethodHelper + { + public IMethod Method; + public ProjectContentHelper ProjectContentHelper = new ProjectContentHelper(); + + /// + /// Method name should include class prefix (e.g. "Class1.MyMethod") + /// + public void CreateMethod(string fullyQualifiedName) + { + Method = MockRepository.GenerateMock(); + Method.Stub(m => m.ProjectContent).Return(ProjectContentHelper.FakeProjectContent); + Method.Stub(m => m.FullyQualifiedName).Return(fullyQualifiedName); + } + + public void CreatePublicMethod(string name) + { + CreateMethod(name); + Method.Stub(m => m.IsPublic).Return(true); + } + + public void CreatePrivateMethod(string name) + { + CreateMethod(name); + Method.Stub(m => m.IsPublic).Return(false); + Method.Stub(m => m.IsPrivate).Return(true); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs index b6e09d9130..86ceda6e7e 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs @@ -223,43 +223,5 @@ namespace PackageManagement.Tests.Helpers MakeClassPrivate(fakeDelegate); return fakeDelegate; } - - public void AddInterfaceToClassBaseTypes(IClass fakeClass, string interfaceFullName, string dotNetName) - { - IClass interfaceClass = AddInterfaceToProjectContent(interfaceFullName); - AddClassToClassBaseTypes(fakeClass, interfaceClass, interfaceFullName, dotNetName); - } - - public void AddClassToClassBaseTypes(IClass fakeClass, IClass baseTypeClass, string baseTypeFullName, string baseTypeDotNetName) - { - IReturnType baseType = CreateBaseType(baseTypeClass, baseTypeFullName, baseTypeDotNetName); - var baseTypes = new List(); - baseTypes.Add(baseType); - - fakeClass.Stub(c => c.BaseTypes).Return(baseTypes); - } - - IReturnType CreateBaseType(IClass baseTypeClass, string baseTypeFullName, string baseTypeDotNetName) - { - IReturnType baseType = MockRepository.GenerateStub(); - baseType.Stub(b => b.GetUnderlyingClass()).Return(baseTypeClass); - baseType.Stub(b => b.FullyQualifiedName).Return(baseTypeFullName); - baseType.Stub(b => b.DotNetName).Return(baseTypeDotNetName); - return baseType; - } - - public void AddClassToClassBaseTypes(IClass fakeClass, string fullName) - { - IClass baseTypeClass = AddClassToProjectContent(fullName); - AddClassToClassBaseTypes(fakeClass, baseTypeClass, fullName, fullName); - } - - public void AddBaseTypeToClass(IClass fakeClass, string fullName) - { - IClass baseTypeClass = AddClassToProjectContent(fullName); - IReturnType baseType = CreateBaseType(baseTypeClass, fullName, fullName); - - fakeClass.Stub(c => c.BaseType).Return(baseType); - } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs index 85d598fbcc..b8d737902e 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs @@ -14,11 +14,13 @@ namespace PackageManagement.Tests.Helpers public List Attributes = new List(); public ProjectContentHelper ProjectContentHelper = new ProjectContentHelper(); - public void CreateProperty(string name) + /// + /// Property name should include class prefix (e.g. "Class1.MyProperty") + /// + public void CreateProperty(string fullyQualifiedName) { Property = MockRepository.GenerateMock(); - Property.Stub(p => p.Name).Return(name); - Property.Stub(p => p.FullyQualifiedName).Return(name); + Property.Stub(p => p.FullyQualifiedName).Return(fullyQualifiedName); Property.Stub(p => p.Attributes).Return(Attributes); Property.Stub(p => p.ProjectContent).Return(ProjectContentHelper.FakeProjectContent); }