From fe401c77f4b7a7969ccaaad3e4aff582c3509fdd Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 21 Jul 2012 14:39:40 +0100 Subject: [PATCH] Fix scaffolding controller actions. --- .../Project/Src/EnvDTE/CodeType.cs | 10 +++ .../Project/Src/EnvDTE/ProjectItem.cs | 9 ++- .../Test/Src/EnvDTE/CodeTypeTests.cs | 71 +++++++++++++++++++ 3 files changed, 89 insertions(+), 1 deletion(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs index c9dfeabcb4..71811e8c46 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs @@ -3,6 +3,7 @@ using System; using ICSharpCode.SharpDevelop.Dom; +using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.PackageManagement.EnvDTE { @@ -67,5 +68,14 @@ namespace ICSharpCode.PackageManagement.EnvDTE public virtual CodeNamespace Namespace { get { return new CodeNamespace(ProjectContent, Class.Namespace); } } + + public virtual ProjectItem ProjectItem { + get { + if (ProjectContent.Project != null) { + return new ProjectItem((MSBuildBasedProject)ProjectContent.Project, Class); + } + return null; + } + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs index 6089a6d405..c18778f2d4 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs @@ -4,9 +4,11 @@ using System; using System.ComponentModel; using System.IO; + using ICSharpCode.Core; -using SD = ICSharpCode.SharpDevelop.Project; +using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Project; +using SD = ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.PackageManagement.EnvDTE { @@ -27,6 +29,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE Kind = GetKindFromFileProjectItemType(); } + internal ProjectItem(MSBuildBasedProject project, IClass c) + : this(new Project(project), project.FindFile(c.CompilationUnit.FileName)) + { + } + string GetKindFromFileProjectItemType() { if (IsDirectory) { diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs index 89a59271d6..0615a38957 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs @@ -4,6 +4,7 @@ using System; using ICSharpCode.PackageManagement.EnvDTE; using ICSharpCode.SharpDevelop.Dom; +using SDProject = ICSharpCode.SharpDevelop.Project; using NUnit.Framework; using PackageManagement.Tests.Helpers; @@ -30,11 +31,24 @@ namespace PackageManagement.Tests.EnvDTE codeType = new CodeType(helper.ProjectContentHelper.ProjectContent, helper.Class); } + TestableProject AddProjectToProjectContent() + { + TestableProject project = ProjectHelper.CreateTestProject(); + helper.ProjectContentHelper.SetProjectForProjectContent(project); + return project; + } + void AddAttributeToClass(string name) { helper.AddAttributeToClass(name); } + SDProject.FileProjectItem AddFileToProjectAndProjectContent(TestableProject project, string fileName) + { + helper.CompilationUnitHelper.SetFileName(fileName); + return project.AddFile(fileName); + } + [Test] public void Attributes_ClassHasOneAttribute_ReturnsOneAttribute() { @@ -50,5 +64,62 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual(1, attributes.Count); Assert.AreEqual("Test", attribute.Name); } + + [Test] + public void ProjectItem_ProjectContentHasNullProject_ReturnsNull() + { + CreateProjectContent(); + CreateClass("Class1"); + CreateCodeType(); + + ProjectItem item = codeType.ProjectItem; + + Assert.IsNull(item); + } + + [Test] + public void ProjectItem_ProjectContentHasProject_ReturnsNonNullProjectItem() + { + CreateProjectContent(); + TestableProject project = AddProjectToProjectContent(); + AddFileToProjectAndProjectContent(project, @"d:\projects\MyProject\class1.cs"); + CreateClass("Class1"); + CreateCodeType(); + + ProjectItem item = codeType.ProjectItem; + + Assert.IsNotNull(item); + } + + [Test] + public void ProjectItem_ProjectContentHasProject_ReturnsProjectItemThatUsesProject() + { + CreateProjectContent(); + TestableProject project = AddProjectToProjectContent(); + project.FileName = @"d:\projects\MyProject\MyProject.csproj"; + AddFileToProjectAndProjectContent(project, @"d:\projects\MyProject\class1.cs"); + CreateClass("Class1"); + CreateCodeType(); + + ProjectItem item = codeType.ProjectItem; + + Assert.AreEqual(@"d:\projects\MyProject\MyProject.csproj", item.ContainingProject.FileName); + } + + [Test] + public void ProjectItem_ProjectContentHasProject_ReturnsProjectItemThatUsesProjectFileItem() + { + CreateProjectContent(); + TestableProject project = AddProjectToProjectContent(); + string fileName = @"d:\projects\MyProject\test.cs"; + SDProject.FileProjectItem fileProjectItem = AddFileToProjectAndProjectContent(project, fileName); + + CreateClass("Class1"); + CreateCodeType(); + + ProjectItem item = codeType.ProjectItem; + + Assert.AreEqual("test.cs", item.Name); + } } }