Browse Source

Fix custom scaffolder unable to file scaffolding powershell file.

pull/28/head
Matt Ward 13 years ago
parent
commit
88d645b64e
  1. 13
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItem.cs
  2. 8
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs
  3. 24
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemRelationship.cs
  4. 35
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs

13
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItem.cs

@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
using System;
using System.IO;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using SD = ICSharpCode.SharpDevelop.Project;
@ -23,17 +25,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -23,17 +25,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE
static FileProjectItem CreateFileProjectItem(Project project, string relativePath)
{
string directory = GetLastDirectoryName(relativePath);
return new FileProjectItem(project.MSBuildProject, ItemType.Folder, directory);
return new FileProjectItem(project.MSBuildProject, ItemType.Folder, relativePath);
}
static string GetLastDirectoryName(string relativePath)
static string GetSubdirectoryName(string relativePath)
{
// string[] directoryNames = relativePath.Split('\\');
// if (directoryNames.Length > 1) {
// return directoryNames[1];
// }
return relativePath;
return relativePath.Split('\\').First();
}
public DirectoryProjectItem(Project project, FileProjectItem projectItem)

8
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs

@ -141,9 +141,13 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -141,9 +141,13 @@ namespace ICSharpCode.PackageManagement.EnvDTE
internal string GetIncludePath(string fileName)
{
string parentFileName = (string)GetProperty(FullPathPropertyName);
string relativeDirectory = ContainingProject.GetRelativePath(parentFileName);
string relativeDirectory = ContainingProject.GetRelativePath(projectItem.FileName);
return Path.Combine(relativeDirectory, fileName);
}
internal string GetIncludePath()
{
return projectItem.Include;
}
}
}

24
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemRelationship.cs

@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
using System;
using System.IO;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using SD = ICSharpCode.SharpDevelop.Project;
@ -10,15 +12,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -10,15 +12,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
public class ProjectItemRelationship
{
public ProjectItemRelationship(ProjectItem projectItem, SD.ProjectItem msbuildProjectItem)
public ProjectItemRelationship(ProjectItem parentProjectItem, SD.ProjectItem msbuildProjectItem)
{
this.ProjectItem = projectItem;
this.ParentProjectItem = parentProjectItem;
this.MSBuildProjectItem = msbuildProjectItem;
this.Project = projectItem.ContainingProject;
this.Project = parentProjectItem.ContainingProject;
GetRelationship();
}
public ProjectItem ProjectItem { get; private set; }
public ProjectItem ParentProjectItem { get; private set; }
public SD.ProjectItem MSBuildProjectItem { get; private set; }
public Project Project { get; private set; }
@ -48,7 +50,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -48,7 +50,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
bool IsChildItem()
{
return ProjectItem.IsChildItem(MSBuildProjectItem);
return ParentProjectItem.IsChildItem(MSBuildProjectItem);
}
ProjectItem CreateProjectItem()
@ -58,12 +60,20 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -58,12 +60,20 @@ namespace ICSharpCode.PackageManagement.EnvDTE
bool IsInChildDirectory()
{
return MSBuildProjectItemDirectory.StartsWith(ProjectItem.Name);
return MSBuildProjectItemDirectory.StartsWith(ParentProjectItem.GetIncludePath());
}
ProjectItem CreateDirectoryItem()
{
return new DirectoryProjectItem(Project, MSBuildProjectItemDirectory);
string relativePath = GetPathOneDirectoryBelowParentProjectItem();
return new DirectoryProjectItem(Project, relativePath);
}
string GetPathOneDirectoryBelowParentProjectItem()
{
string[] parentDirectories = ParentProjectItem.GetIncludePath().Split('\\');
string[] directories = MSBuildProjectItemDirectory.Split('\\');
return String.Join(@"\", directories.Take(parentDirectories.Length + 1).ToArray());
}
}
}

35
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs

@ -64,6 +64,11 @@ namespace PackageManagement.Tests.EnvDTE @@ -64,6 +64,11 @@ namespace PackageManagement.Tests.EnvDTE
.SingleOrDefault(item => item.Name == name);
}
DTE.ProjectItem GetFirstChildItem(ProjectItems projectItems)
{
return projectItems.OfType<DTE.ProjectItem>().FirstOrDefault();
}
[Test]
public void AddFromFileCopy_AddFileNameOutsideProjectFolder_FileIsIncludedInProjectInProjectFolder()
{
@ -688,5 +693,35 @@ namespace PackageManagement.Tests.EnvDTE @@ -688,5 +693,35 @@ namespace PackageManagement.Tests.EnvDTE
string expectedDirectory = @"d:\projects\MyProject\CodeTemplates\Scaffolders";
Assert.AreEqual(expectedDirectory, directory);
}
[Test]
public void GetEnumerator_ProjectHasOneFileInFolderThreeLevelsDeep_FileReturnedInProjectItems()
{
CreateProjectItems();
msbuildProject.FileName = @"d:\projects\MyProject\MyProject.csproj";
msbuildProject.AddFile(@"CodeTemplates\Scaffolders\jQueryPlugin\jQueryPlugin.ps1");
DTE.ProjectItem codeTemplatesFolderItem = GetChildItem(projectItems, "CodeTemplates");
DTE.ProjectItem scaffolderFolderItem = GetChildItem(codeTemplatesFolderItem.ProjectItems, "Scaffolders");
DTE.ProjectItem jqueryPluginFolderItem = GetChildItem(scaffolderFolderItem.ProjectItems, "jQueryPlugin");
DTE.ProjectItem jqueryPluginFileItem = GetFirstChildItem(jqueryPluginFolderItem.ProjectItems);
Assert.AreEqual("jQueryPlugin.ps1", jqueryPluginFileItem.Name);
}
[Test]
public void Item_GetFileProjectItemByNameWhenProjectHasOneFileInFolderThreeLevelsDeep_ReturnsFileProjectItem()
{
CreateProjectItems();
msbuildProject.FileName = @"d:\projects\MyProject\MyProject.csproj";
msbuildProject.AddFile(@"CodeTemplates\Scaffolders\jQueryPlugin\jQueryPlugin.ps1");
DTE.ProjectItem codeTemplatesFolderItem = GetChildItem(projectItems, "CodeTemplates");
DTE.ProjectItem scaffolderFolderItem = GetChildItem(codeTemplatesFolderItem.ProjectItems, "Scaffolders");
DTE.ProjectItem jqueryPluginFolderItem = GetChildItem(scaffolderFolderItem.ProjectItems, "jQueryPlugin");
DTE.ProjectItem jqueryPluginFileItem = jqueryPluginFolderItem.ProjectItems.Item("jQueryPlugin.ps1");
Assert.AreEqual("jQueryPlugin.ps1", jqueryPluginFileItem.Name);
}
}
}

Loading…
Cancel
Save