Browse Source

Support adding files into the project with PowerShell scripts.

pull/15/head
Matt Ward 15 years ago
parent
commit
fa0d1d9b24
  1. 1
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 31
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs
  3. 40
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs
  4. 1
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementFileService.cs
  5. 10
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementFileService.cs
  6. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  7. 108
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs
  8. 9
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFileService.cs
  9. 14
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableDTEProject.cs
  10. 3
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs

1
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -72,6 +72,7 @@ @@ -72,6 +72,7 @@
<Compile Include="Src\Design\FakePackageManagementProject.cs" />
<Compile Include="Src\EnvDTE\DTE.cs" />
<Compile Include="Src\EnvDTE\ItemOperations.cs" />
<Compile Include="Src\EnvDTE\ProjectItems.cs" />
<Compile Include="Src\EnvDTE\ProjectObject.cs" />
<Compile Include="Src\EnvDTE\Properties.cs" />
<Compile Include="Src\EnvDTE\Property.cs" />

31
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs

@ -12,17 +12,24 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -12,17 +12,24 @@ namespace ICSharpCode.PackageManagement.EnvDTE
IPackageManagementProjectService projectService;
public Project(MSBuildBasedProject project)
: this(project, new PackageManagementProjectService())
: this(
project,
new PackageManagementProjectService(),
new PackageManagementFileService())
{
}
public Project(MSBuildBasedProject project, IPackageManagementProjectService projectService)
public Project(
MSBuildBasedProject project,
IPackageManagementProjectService projectService,
IPackageManagementFileService fileService)
{
this.MSBuildProject = project;
this.projectService = projectService;
Object = new ProjectObject(this);
Properties = new Properties(this);
ProjectItems = new ProjectItems(this, fileService);
}
public string Name {
@ -31,6 +38,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -31,6 +38,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public ProjectObject Object { get; private set; }
public Properties Properties { get; private set; }
public ProjectItems ProjectItems { get; private set; }
internal MSBuildBasedProject MSBuildProject { get; private set; }
@ -54,5 +62,24 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -54,5 +62,24 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
projectService.RemoveProjectItem(MSBuildProject, referenceItem);
}
internal void AddFile(string include)
{
var fileProjectItem = CreateFileProjectItem(include);
projectService.AddProjectItem(MSBuildProject, fileProjectItem);
}
FileProjectItem CreateFileProjectItem(string include)
{
ItemType itemType = GetDefaultItemType(include);
var fileProjectItem = new FileProjectItem(MSBuildProject, itemType);
fileProjectItem.Include = include;
return fileProjectItem;
}
ItemType GetDefaultItemType(string include)
{
return MSBuildProject.GetDefaultItemType(include);
}
}
}

40
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
// 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.IO;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class ProjectItems
{
Project project;
IPackageManagementFileService fileService;
public ProjectItems(Project project, IPackageManagementFileService fileService)
{
this.project = project;
this.fileService = fileService;
}
public void AddFromFileCopy(string filePath)
{
string include = Path.GetFileName(filePath);
CopyFileIntoProject(filePath, include);
project.AddFile(include);
project.Save();
}
void CopyFileIntoProject(string oldFileName, string fileName)
{
string newFileName = GetFileNameInProject(fileName);
fileService.CopyFile(oldFileName, newFileName);
}
string GetFileNameInProject(string fileName)
{
return Path.Combine(project.MSBuildProject.Directory, fileName);
}
}
}

1
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementFileService.cs

@ -10,5 +10,6 @@ namespace ICSharpCode.PackageManagement @@ -10,5 +10,6 @@ namespace ICSharpCode.PackageManagement
void RemoveFile(string path);
void RemoveDirectory(string path);
void OpenFile(string fileName);
void CopyFile(string oldFileName, string newFileName);
}
}

10
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementFileService.cs

@ -38,5 +38,15 @@ namespace ICSharpCode.PackageManagement @@ -38,5 +38,15 @@ namespace ICSharpCode.PackageManagement
FileService.OpenFile(fileName);
}
}
public void CopyFile(string oldFileName, string newFileName)
{
if (WorkbenchSingleton.InvokeRequired) {
Action<string, string> action = CopyFile;
WorkbenchSingleton.SafeThreadAsyncCall<string, string>(action, oldFileName, newFileName);
} else {
FileService.CopyFile(oldFileName, newFileName, isDirectory: false, overwrite: false);
}
}
}
}

1
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -71,6 +71,7 @@ @@ -71,6 +71,7 @@
</Compile>
<Compile Include="Src\AddPackageReferenceCommandTests.cs" />
<Compile Include="Src\EnvDTE\DTETests.cs" />
<Compile Include="Src\EnvDTE\ProjectItemsTests.cs" />
<Compile Include="Src\EnvDTE\ProjectTests.cs" />
<Compile Include="Src\EnvDTE\PropertyTests.cs" />
<Compile Include="Src\EnvDTE\ReferencesTests.cs" />

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

@ -0,0 +1,108 @@ @@ -0,0 +1,108 @@
// 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.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class ProjectItemsTests
{
TestableDTEProject project;
ProjectItems projectItems;
TestableProject msbuildProject;
FakeFileService fakeFileService;
void CreateProjectItems()
{
project = new TestableDTEProject();
msbuildProject = project.TestableProject;
projectItems = project.ProjectItems;
fakeFileService = project.FakeFileService;
}
[Test]
public void AddFromFileCopy_AddFileNameOutsideProjectFolder_FileIsIncludedInProjectInProjectFolder()
{
CreateProjectItems();
msbuildProject.FileName = @"d:\projects\myproject\myproject\myproject.csproj";
string fileName = @"d:\projects\myproject\packages\tools\test.cs";
projectItems.AddFromFileCopy(fileName);
var fileItem = msbuildProject.Items[0] as FileProjectItem;
Assert.AreEqual("test.cs", fileItem.Include);
}
[Test]
public void AddFromFileCopy_AddFileNameOutsideProjectFolder_FileItemTypeTakenFromProject()
{
CreateProjectItems();
msbuildProject.FileName = @"d:\projects\myproject\myproject\myproject.csproj";
string fileName = @"d:\projects\myproject\packages\tools\test.cs";
msbuildProject.ItemTypeToReturnFromGetDefaultItemType = ItemType.Page;
projectItems.AddFromFileCopy(fileName);
var fileItem = msbuildProject.Items[0] as FileProjectItem;
Assert.AreEqual(ItemType.Page, fileItem.ItemType);
}
[Test]
public void AddFromFileCopy_AddFileNameOutsideProjectFolder_FileNamePassedToDetermineFileItemType()
{
CreateProjectItems();
msbuildProject.FileName = @"d:\projects\myproject\myproject\myproject.csproj";
string fileName = @"d:\projects\myproject\packages\tools\test.cs";
msbuildProject.ItemTypeToReturnFromGetDefaultItemType = ItemType.Page;
projectItems.AddFromFileCopy(fileName);
Assert.AreEqual("test.cs", msbuildProject.FileNamePassedToGetDefaultItemType);
}
[Test]
public void AddFromFileCopy_AddFileNameOutsideProjectFolder_ProjectIsSaved()
{
CreateProjectItems();
msbuildProject.FileName = @"d:\projects\myproject\myproject\myproject.csproj";
string fileName = @"d:\projects\myproject\packages\tools\test.cs";
msbuildProject.ItemTypeToReturnFromGetDefaultItemType = ItemType.Page;
projectItems.AddFromFileCopy(fileName);
bool saved = msbuildProject.IsSaved;
Assert.IsTrue(saved);
}
[Test]
public void AddFromFileCopy_AddFileNameOutsideProjectFolder_FileIsCopied()
{
CreateProjectItems();
msbuildProject.FileName = @"d:\projects\myproject\myproject\myproject.csproj";
string fileName = @"d:\projects\myproject\packages\tools\test.cs";
msbuildProject.ItemTypeToReturnFromGetDefaultItemType = ItemType.Page;
projectItems.AddFromFileCopy(fileName);
string[] expectedFileNames = new string[] {
@"d:\projects\myproject\packages\tools\test.cs",
@"d:\projects\myproject\myproject\test.cs"
};
string[] actualFileNames = new string[] {
fakeFileService.OldFileNamePassedToCopyFile,
fakeFileService.NewFileNamePassedToCopyFile
};
CollectionAssert.AreEqual(expectedFileNames, actualFileNames);
}
}
}

9
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFileService.cs

@ -45,5 +45,14 @@ namespace PackageManagement.Tests.Helpers @@ -45,5 +45,14 @@ namespace PackageManagement.Tests.Helpers
{
FileNamePassedToOpenFile = fileName;
}
public string OldFileNamePassedToCopyFile;
public string NewFileNamePassedToCopyFile;
public void CopyFile(string oldFileName, string newFileName)
{
OldFileNamePassedToCopyFile = oldFileName;
NewFileNamePassedToCopyFile = newFileName;
}
}
}

14
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableDTEProject.cs

@ -12,6 +12,7 @@ namespace PackageManagement.Tests.Helpers @@ -12,6 +12,7 @@ namespace PackageManagement.Tests.Helpers
{
public TestableProject TestableProject;
public FakePackageManagementProjectService FakeProjectService;
public FakeFileService FakeFileService;
public TestableDTEProject()
: this(ProjectHelper.CreateTestProject())
@ -19,15 +20,22 @@ namespace PackageManagement.Tests.Helpers @@ -19,15 +20,22 @@ namespace PackageManagement.Tests.Helpers
}
public TestableDTEProject(TestableProject project)
: this(project, new FakePackageManagementProjectService())
: this(
project,
new FakePackageManagementProjectService(),
new FakeFileService(project))
{
}
public TestableDTEProject(TestableProject project, FakePackageManagementProjectService projectService)
: base(project, projectService)
public TestableDTEProject(
TestableProject project,
FakePackageManagementProjectService projectService,
FakeFileService fileService)
: base(project, projectService, fileService)
{
this.TestableProject = project;
this.FakeProjectService = projectService;
this.FakeFileService = fileService;
}
}
}

3
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs

@ -25,8 +25,11 @@ namespace PackageManagement.Tests.Helpers @@ -25,8 +25,11 @@ namespace PackageManagement.Tests.Helpers
ItemsWhenSaved = Items;
}
public string FileNamePassedToGetDefaultItemType;
public override ItemType GetDefaultItemType(string fileName)
{
FileNamePassedToGetDefaultItemType = fileName;
return ItemTypeToReturnFromGetDefaultItemType;
}

Loading…
Cancel
Save