From 843dbf498266c1023aef467da05da5d920f564c9 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 4 Jun 2012 15:33:57 +0100 Subject: [PATCH] Implement EnvDTE.CodeTypeRef.AsString. --- .../Project/Src/EnvDTE/CodeTypeRef.cs | 9 +++ .../Src/EnvDTE/IReturnTypeExtensions.cs | 20 ++++++ .../Test/Src/EnvDTE/CodeClass2Tests.cs | 2 +- .../Test/Src/EnvDTE/CodeDelegateTests.cs | 2 +- .../EnvDTE/CodeElementsInNamespaceTests.cs | 2 +- .../Test/Src/EnvDTE/CodeInterfaceTests.cs | 2 +- .../Test/Src/EnvDTE/CodeModelTests.cs | 2 +- .../Test/Src/EnvDTE/CodeNamespaceTests.cs | 2 +- .../Test/Src/EnvDTE/CodeStructTests.cs | 2 +- .../Test/Src/EnvDTE/CodeTypeRef2Tests.cs | 65 ++++++++++++++++++- .../Test/Src/EnvDTE/CodeTypeTests.cs | 2 +- .../Test/Src/EnvDTE/ProjectTests.cs | 2 +- .../Test/Src/Helpers/FieldHelper.cs | 2 +- .../Test/Src/Helpers/MethodHelper.cs | 2 +- .../Test/Src/Helpers/ProjectContentHelper.cs | 24 +++---- .../Test/Src/Helpers/PropertyHelper.cs | 2 +- .../Test/Src/Helpers/ReturnTypeHelper.cs | 3 + 17 files changed, 121 insertions(+), 24 deletions(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs index f7cfebfe3a..5bfdb6aa17 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs @@ -28,6 +28,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE get { return ReturnType.GetFullName(); } } + public virtual string AsString { + get { + if (projectContent.Language == LanguageProperties.VBNet) { + return ReturnType.AsVisualBasicString(); + } + return ReturnType.AsCSharpString(); + } + } + public virtual CodeElement Parent { get { return parent; } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IReturnTypeExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IReturnTypeExtensions.cs index 653a9fdcd1..492b1f7e38 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IReturnTypeExtensions.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IReturnTypeExtensions.cs @@ -2,6 +2,8 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.Collections.Generic; +using ICSharpCode.NRefactory.Ast; using ICSharpCode.SharpDevelop.Dom; namespace ICSharpCode.PackageManagement.EnvDTE @@ -15,5 +17,23 @@ namespace ICSharpCode.PackageManagement.EnvDTE .Replace('{', '<') .Replace('}', '>'); } + + public static string AsCSharpString(this IReturnType returnType) + { + string name = String.Empty; + if (TypeReference.PrimitiveTypesCSharpReverse.TryGetValue(returnType.FullyQualifiedName, out name)) { + return name; + } + return returnType.GetFullName(); + } + + public static string AsVisualBasicString(this IReturnType returnType) + { + string name = String.Empty; + if (TypeReference.PrimitiveTypesVBReverse.TryGetValue(returnType.FullyQualifiedName, out name)) { + return name; + } + return returnType.GetFullName(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs index fefff838ee..777664fb5e 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs @@ -41,7 +41,7 @@ namespace PackageManagement.Tests.EnvDTE void CreateClass() { - codeClass = new CodeClass2(helper.ProjectContentHelper.FakeProjectContent, helper.Class); + codeClass = new CodeClass2(helper.ProjectContentHelper.ProjectContent, helper.Class); } void AddInterfaceToProjectContent(string fullName) diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeDelegateTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeDelegateTests.cs index 80fef5938f..def6241fcf 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeDelegateTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeDelegateTests.cs @@ -36,7 +36,7 @@ namespace PackageManagement.Tests.EnvDTE void CreateDelegate() { - codeDelegate = new CodeDelegate(helper.FakeProjectContent, fakeDelegate); + codeDelegate = new CodeDelegate(helper.ProjectContent, fakeDelegate); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs index c4f87c6b0a..0a41c74649 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs @@ -24,7 +24,7 @@ namespace PackageManagement.Tests.EnvDTE void CreateCodeElements(string namespaceName) { - codeElements = new CodeElementsInNamespace(helper.FakeProjectContent, namespaceName); + codeElements = new CodeElementsInNamespace(helper.ProjectContent, namespaceName); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeInterfaceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeInterfaceTests.cs index ed354e3f4c..f17a244ce5 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeInterfaceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeInterfaceTests.cs @@ -24,7 +24,7 @@ namespace PackageManagement.Tests.EnvDTE void CreateInterface() { IClass c = helper.AddInterfaceToProjectContent("MyInterface"); - codeInterface = new CodeInterface(helper.FakeProjectContent, c); + codeInterface = new CodeInterface(helper.ProjectContent, c); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs index 51a511e6eb..3837f0d9b7 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs @@ -24,7 +24,7 @@ namespace PackageManagement.Tests.EnvDTE helper = new ProjectContentHelper(); msbuildProject = ProjectHelper.CreateTestProject(); helper.SetProjectForProjectContent(msbuildProject); - codeModel = new CodeModel(helper.FakeProjectContent); + codeModel = new CodeModel(helper.ProjectContent); } void AddClassToProjectContent(string className) diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs index 1a8dc26987..a540ebcc1f 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs @@ -17,7 +17,7 @@ namespace PackageManagement.Tests.EnvDTE void CreateCodeNamespace(string namespaceName) { - codeNamespace = new CodeNamespace(helper.FakeProjectContent, namespaceName); + codeNamespace = new CodeNamespace(helper.ProjectContent, namespaceName); } void CreateProjectContent() diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeStructTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeStructTests.cs index 430c8ad11a..5bc98df487 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeStructTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeStructTests.cs @@ -36,7 +36,7 @@ namespace PackageManagement.Tests.EnvDTE void CreateStruct() { - codeStruct = new CodeStruct(helper.FakeProjectContent, fakeStruct); + codeStruct = new CodeStruct(helper.ProjectContent, fakeStruct); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeRef2Tests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeRef2Tests.cs index 4a58128e83..9855719155 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeRef2Tests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeRef2Tests.cs @@ -33,7 +33,7 @@ namespace PackageManagement.Tests.EnvDTE void CreateCodeTypeRef2() { - typeRef = new CodeTypeRef2(classHelper.ProjectContentHelper.FakeProjectContent, parent, helper.ReturnType); + typeRef = new CodeTypeRef2(classHelper.ProjectContentHelper.ProjectContent, parent, helper.ReturnType); } void ReturnTypeUsesDifferentProjectContent() @@ -48,6 +48,16 @@ namespace PackageManagement.Tests.EnvDTE classHelper.ProjectContentHelper.SetProjectForProjectContent(project); } + void ProjectContentIsForVisualBasicProject() + { + classHelper.ProjectContentHelper.ProjectContentIsForVisualBasicProject(); + } + + void ProjectContentIsForCSharpProject() + { + classHelper.ProjectContentHelper.ProjectContentIsForCSharpProject(); + } + [Test] public void CodeType_ReturnTypeIsSystemString_ReturnsCodeClass2ForSystemStringType() { @@ -124,5 +134,58 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual("System.Nullable", name); } + + [Test] + public void AsString_ReturnTypeIsSystemStringInCSharpProject_ReturnsString() + { + helper.CreateReturnType("System.String"); + ProjectContentIsForCSharpProject(); + AddUnderlyingClassToReturnType("System.String"); + CreateCodeTypeRef2(); + + string name = typeRef.AsString; + + Assert.AreEqual("string", name); + } + + [Test] + public void AsString_ReturnTypeIsSystemInt32InCSharpProject_ReturnsInt() + { + helper.CreateReturnType("System.Int32"); + AddUnderlyingClassToReturnType("System.Int32"); + ProjectContentIsForCSharpProject(); + CreateCodeTypeRef2(); + + string name = typeRef.AsString; + + Assert.AreEqual("int", name); + } + + [Test] + public void AsString_ReturnTypeIsSystemInt32InVisualBasicProject_ReturnsInteger() + { + helper.CreateReturnType("System.Int32"); + AddUnderlyingClassToReturnType("System.Int32"); + ProjectContentIsForVisualBasicProject(); + CreateCodeTypeRef2(); + + string name = typeRef.AsString; + + Assert.AreEqual("Integer", name); + } + + [Test] + public void AsString_ReturnTypeIsCustomType_ReturnsFullTypeName() + { + helper.CreateReturnType("Test.MyClass"); + AddUnderlyingClassToReturnType("Test.MyClass"); + ProjectContentIsForCSharpProject(); + helper.AddDotNetName("Test.MyClass"); + CreateCodeTypeRef2(); + + string name = typeRef.AsString; + + Assert.AreEqual("Test.MyClass", name); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs index 3faecbace7..89a59271d6 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs @@ -27,7 +27,7 @@ namespace PackageManagement.Tests.EnvDTE void CreateCodeType() { - codeType = new CodeType(helper.ProjectContentHelper.FakeProjectContent, helper.Class); + codeType = new CodeType(helper.ProjectContentHelper.ProjectContent, helper.Class); } void AddAttributeToClass(string name) diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs index 0a1f3c680d..263b44463e 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs @@ -27,7 +27,7 @@ namespace PackageManagement.Tests.EnvDTE helper = new ProjectContentHelper(); fakeProjectService = MockRepository.GenerateStub(); - fakeProjectService.Stub(service => service.GetProjectContent(msbuildProject)).Return(helper.FakeProjectContent); + fakeProjectService.Stub(service => service.GetProjectContent(msbuildProject)).Return(helper.ProjectContent); fakeFileService = MockRepository.GenerateStub(); project = new Project(msbuildProject, fakeProjectService, fakeFileService); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FieldHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FieldHelper.cs index 8d771386d1..b40a148c67 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FieldHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FieldHelper.cs @@ -19,7 +19,7 @@ namespace PackageManagement.Tests.Helpers public void CreateField(string fullyQualifiedName) { Field = MockRepository.GenerateMock(); - Field.Stub(f => f.ProjectContent).Return(ProjectContentHelper.FakeProjectContent); + Field.Stub(f => f.ProjectContent).Return(ProjectContentHelper.ProjectContent); Field.Stub(f => f.FullyQualifiedName).Return(fullyQualifiedName); } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/MethodHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/MethodHelper.cs index a27ba23f91..c211b62fc0 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/MethodHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/MethodHelper.cs @@ -18,7 +18,7 @@ namespace PackageManagement.Tests.Helpers public void CreateMethod(string fullyQualifiedName) { Method = MockRepository.GenerateMock(); - Method.Stub(m => m.ProjectContent).Return(ProjectContentHelper.FakeProjectContent); + Method.Stub(m => m.ProjectContent).Return(ProjectContentHelper.ProjectContent); Method.Stub(m => m.FullyQualifiedName).Return(fullyQualifiedName); } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs index 86ceda6e7e..833ba6e6d8 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs @@ -13,18 +13,18 @@ namespace PackageManagement.Tests.Helpers { public class ProjectContentHelper { - public IProjectContent FakeProjectContent; + public IProjectContent ProjectContent; public List NamespaceNames = new List(); public ProjectContentHelper() { - FakeProjectContent = MockRepository.GenerateStub(); - FakeProjectContent.Stub(pc => pc.NamespaceNames).Return(NamespaceNames); + ProjectContent = MockRepository.GenerateStub(); + ProjectContent.Stub(pc => pc.NamespaceNames).Return(NamespaceNames); } public void SetProjectForProjectContent(IProject project) { - FakeProjectContent.Stub(pc => pc.Project).Return(project); + ProjectContent.Stub(pc => pc.Project).Return(project); } public IClass AddClassToProjectContentAndCompletionEntries(string namespaceName, string className) @@ -39,7 +39,7 @@ namespace PackageManagement.Tests.Helpers public void AddCompletionEntriesToNamespace(string namespaceName, List namespaceContents) { - FakeProjectContent.Stub(pc => pc.GetNamespaceContents(namespaceName)).Return(namespaceContents); + ProjectContent.Stub(pc => pc.GetNamespaceContents(namespaceName)).Return(namespaceContents); } public void NoCompletionItemsInNamespace(string namespaceName) @@ -49,7 +49,7 @@ namespace PackageManagement.Tests.Helpers public IClass AddClassToProjectContent(string className) { - IClass fakeClass = AddClassToProjectContentCommon(FakeProjectContent, className); + IClass fakeClass = AddClassToProjectContentCommon(ProjectContent, className); SetClassType(fakeClass, ClassType.Class); return fakeClass; } @@ -68,7 +68,7 @@ namespace PackageManagement.Tests.Helpers IClass AddClassToProjectContentCommon(IProjectContent projectContent, string className) { IClass fakeClass = MockRepository.GenerateMock(); - FakeProjectContent.Stub(pc => pc.GetClass(className, 0)).Return(fakeClass); + ProjectContent.Stub(pc => pc.GetClass(className, 0)).Return(fakeClass); fakeClass.Stub(c => c.FullyQualifiedName).Return(className); fakeClass.Stub(c => c.ProjectContent).Return(projectContent); return fakeClass; @@ -76,7 +76,7 @@ namespace PackageManagement.Tests.Helpers public IClass AddInterfaceToProjectContent(string interfaceName) { - return AddInterfaceToProjectContent(FakeProjectContent, interfaceName); + return AddInterfaceToProjectContent(ProjectContent, interfaceName); } public IClass AddInterfaceToDifferentProjectContent(string interfaceName) @@ -131,7 +131,7 @@ namespace PackageManagement.Tests.Helpers public void AddClassToCompletionEntries(string namespaceName, string className) { - AddClassToCompletionEntries(FakeProjectContent, namespaceName, className); + AddClassToCompletionEntries(ProjectContent, namespaceName, className); } void AddClassToCompletionEntries(IProjectContent projectContent, string namespaceName, string className) @@ -147,6 +147,7 @@ namespace PackageManagement.Tests.Helpers { TestableProject project = ProjectHelper.CreateTestProject(); project.FileName = @"c:\projects\myproject.csproj"; + ProjectContent.Stub(pc => pc.Language).Return(LanguageProperties.CSharp); SetProjectForProjectContent(project); } @@ -154,6 +155,7 @@ namespace PackageManagement.Tests.Helpers { TestableProject project = ProjectHelper.CreateTestProject(); project.FileName = @"c:\projects\myproject.vbproj"; + ProjectContent.Stub(pc => pc.Language).Return(LanguageProperties.VBNet); SetProjectForProjectContent(project); } @@ -180,7 +182,7 @@ namespace PackageManagement.Tests.Helpers public IClass AddStructToProjectContent(string name) { - IClass fakeStruct = AddClassToProjectContentCommon(FakeProjectContent, name); + IClass fakeStruct = AddClassToProjectContentCommon(ProjectContent, name); SetClassType(fakeStruct, ClassType.Struct); return fakeStruct; } @@ -201,7 +203,7 @@ namespace PackageManagement.Tests.Helpers public IClass AddDelegateToProjectContent(string name) { - IClass fakeDelegate = AddClassToProjectContentCommon(FakeProjectContent, name); + IClass fakeDelegate = AddClassToProjectContentCommon(ProjectContent, name); SetClassType(fakeDelegate, ClassType.Delegate); return fakeDelegate; } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs index 8be4c396ae..4cdbbe477d 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs @@ -26,7 +26,7 @@ namespace PackageManagement.Tests.Helpers Property.Stub(p => p.FullyQualifiedName).Return(fullyQualifiedName); Property.Stub(p => p.Attributes).Return(attributes); Property.Stub(p => p.Parameters).Return(parameters); - Property.Stub(p => p.ProjectContent).Return(ProjectContentHelper.FakeProjectContent); + Property.Stub(p => p.ProjectContent).Return(ProjectContentHelper.ProjectContent); } public void AddAttribute(string fullName, string shortName) diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReturnTypeHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReturnTypeHelper.cs index 5c4c0b3414..0b7fbd5aae 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReturnTypeHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReturnTypeHelper.cs @@ -10,6 +10,7 @@ namespace PackageManagement.Tests.Helpers public class ReturnTypeHelper { public IReturnType ReturnType; + public ProjectContentHelper ProjectContentHelper = new ProjectContentHelper(); public void CreateReturnType(string fullyQualifiedName) { @@ -31,5 +32,7 @@ namespace PackageManagement.Tests.Helpers { ReturnType.Stub(t => t.GetUnderlyingClass()).Return(c); } + + } }