Browse Source

Set DependentUpon for file added to EnvDTE file project item.

The T4MVC template uses EnvDTE.ProjectItems.AddFromFile() to add its generated files as dependent files.
If the project items belong to a file then the DependentUpon property is set in the MSBuild project.
pull/28/head
Matt Ward 13 years ago
parent
commit
3b15af69c1
  1. 19
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileProjectItems.cs
  2. 6
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs
  3. 10
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs
  4. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  5. 108
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/FileProjectItemsTests.cs
  6. 23
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs

19
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileProjectItems.cs

@ -17,11 +17,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -17,11 +17,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public class FileProjectItems : ProjectItems
{
ProjectItem projectItem;
IPackageManagementFileService fileService;
public FileProjectItems(ProjectItem projectItem)
: base(projectItem.ContainingProject, projectItem, new PackageManagementFileService())
: this(projectItem, new PackageManagementFileService())
{
}
public FileProjectItems(ProjectItem projectItem, IPackageManagementFileService fileService)
: base(projectItem.ContainingProject, projectItem, fileService)
{
this.projectItem = projectItem;
this.fileService = fileService;
}
protected override IEnumerable<ProjectItem> GetProjectItems()
@ -46,5 +53,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -46,5 +53,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE
.Where(item => item is SD.FileProjectItem)
.Select(item => (SD.FileProjectItem)item);
}
protected override ProjectItem AddFileProjectItemToProject(string fileName)
{
return AddFileProjectItemWithDependent(fileName);
}
ProjectItem AddFileProjectItemWithDependent(string fileName)
{
return Project.AddFileProjectItemWithDependentUsingFullPath(fileName, projectItem.Name);
}
}
}

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

@ -157,9 +157,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -157,9 +157,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
internal ProjectItem AddFileProjectItemUsingFullPath(string path)
{
return AddFileProjectItemWithDependentUsingFullPath(path, null);
}
internal ProjectItem AddFileProjectItemWithDependentUsingFullPath(string path, string dependentUpon)
{
FileProjectItem fileProjectItem = CreateFileProjectItemUsingFullPath(path);
fileProjectItem.FileName = path;
fileProjectItem.DependentUpon = dependentUpon;
AddProjectItemToMSBuildProject(fileProjectItem);
return new ProjectItem(this, fileProjectItem);
}

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

@ -119,13 +119,21 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -119,13 +119,21 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual ProjectItem AddFromFile(string fileName)
{
using (IProjectBrowserUpdater updater = Project.CreateProjectBrowserUpdater()) {
ProjectItem projectItem = Project.AddFileProjectItemUsingFullPath(fileName);
ProjectItem projectItem = AddFileProjectItemToProject(fileName);
Project.Save();
fileService.ParseFile(fileName);
return projectItem;
}
}
/// <summary>
/// Adds a file to the project with this ProjectItems as its parent.
/// </summary>
protected virtual ProjectItem AddFileProjectItemToProject(string fileName)
{
return Project.AddFileProjectItemUsingFullPath(fileName);
}
public virtual int Count {
get { return GetProjectItems().Count(); }
}

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

@ -98,6 +98,7 @@ @@ -98,6 +98,7 @@
<Compile Include="Src\EnvDTE\DocumentTests.cs" />
<Compile Include="Src\EnvDTE\EditPointTests.cs" />
<Compile Include="Src\EnvDTE\FileCodeModel2Tests.cs" />
<Compile Include="Src\EnvDTE\FileProjectItemsTests.cs" />
<Compile Include="Src\EnvDTE\NamespaceNameTests.cs" />
<Compile Include="Src\EnvDTE\ProjectsTests.cs" />
<Compile Include="Src\EnvDTE\SolutionGlobalsTests.cs" />

108
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/FileProjectItemsTests.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 System.Collections;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
using Rhino.Mocks;
using DTE = ICSharpCode.PackageManagement.EnvDTE;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class FileProjectItemsTests
{
TestableDTEProject project;
FileProjectItems fileProjectItems;
TestableProject msbuildProject;
FakeFileService fakeFileService;
void CreateProjectWithOneFileInProjectFolder(
string include,
string projectFileName = @"c:\projects\MyProject\MyProject.csproj")
{
project = new TestableDTEProject();
msbuildProject = project.TestableProject;
fakeFileService = project.FakeFileService;
msbuildProject.FileName = projectFileName;
msbuildProject.AddFile(include);
}
void CreateFileProjectItemsFromFileInProjectFolder(string include)
{
DTE.ProjectItem projectItem = project.ProjectItems.Item(include);
fileProjectItems = new DTE.FileProjectItems(projectItem, fakeFileService);
}
IProjectBrowserUpdater CreateProjectBrowserUpdater()
{
IProjectBrowserUpdater projectBrowserUpdater = MockRepository.GenerateStub<IProjectBrowserUpdater>();
project.FakeProjectService.ProjectBrowserUpdater = projectBrowserUpdater;
return projectBrowserUpdater;
}
[Test]
public void AddFromFile_AddFromFileFromProjectItemsBelongingToFile_FileIsParsed()
{
string projectFileName = @"d:\projects\myproject\MyProject.csproj";
CreateProjectWithOneFileInProjectFolder("MainForm.cs", projectFileName);
CreateFileProjectItemsFromFileInProjectFolder("MainForm.cs");
string fileName = @"d:\projects\myproject\MainForm.Designer.cs";
fileProjectItems.AddFromFile(fileName);
string parsedFileName = fakeFileService.FileNamePassedToParseFile;
Assert.AreEqual(fileName, parsedFileName);
}
[Test]
public void AddFromFile_AddFromFileFromProjectItemsBelongingToFile_ReturnsProjectItemAdded()
{
string projectFileName = @"d:\projects\myproject\MyProject.csproj";
CreateProjectWithOneFileInProjectFolder("MainForm.cs", projectFileName);
CreateFileProjectItemsFromFileInProjectFolder("MainForm.cs");
string fileName = @"d:\projects\myproject\MainForm.Designer.cs";
DTE.ProjectItem itemAdded = fileProjectItems.AddFromFile(fileName);
string fullPath = (string)itemAdded.Properties.Item("FullPath").Value;
Assert.AreEqual("MainForm.Designer.cs", itemAdded.Name);
Assert.AreEqual(fileName, fullPath);
}
[Test]
public void AddFromFile_AddFromFileFromProjectItemsBelongingToFile_ProjectIsSaved()
{
string projectFileName = @"d:\projects\myproject\MyProject.csproj";
CreateProjectWithOneFileInProjectFolder("MainForm.cs", projectFileName);
CreateFileProjectItemsFromFileInProjectFolder("MainForm.cs");
string fileName = @"d:\projects\myproject\MainForm.Designer.cs";
fileProjectItems.AddFromFile(fileName);
bool saved = msbuildProject.IsSaved;
Assert.IsTrue(saved);
}
[Test]
public void AddFromFile_AddFromFileFromProjectItemsBelongingToFile_ProjectBrowserUpdaterIsDisposed()
{
string projectFileName = @"d:\projects\myproject\MyProject.csproj";
CreateProjectWithOneFileInProjectFolder("MainForm.cs", projectFileName);
IProjectBrowserUpdater projectBrowserUpdater = CreateProjectBrowserUpdater();
CreateFileProjectItemsFromFileInProjectFolder("MainForm.cs");
string fileName = @"d:\projects\myproject\MainForm.Designer.cs";
fileProjectItems.AddFromFile(fileName);
projectBrowserUpdater.AssertWasCalled(updater => updater.Dispose());
}
}
}

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

@ -667,7 +667,7 @@ namespace PackageManagement.Tests.EnvDTE @@ -667,7 +667,7 @@ namespace PackageManagement.Tests.EnvDTE
projectBrowserUpdater.AssertWasCalled(updater => updater.Dispose());
}
[Test]
public void AddFromDirectory_EmptyDirectoryInsideProject_ProjectBrowserUpdaterIsDisposed()
{
@ -840,5 +840,26 @@ namespace PackageManagement.Tests.EnvDTE @@ -840,5 +840,26 @@ namespace PackageManagement.Tests.EnvDTE
Assert.Throws<ArgumentException>(() => projectItems.Item("unknown.cs"));
}
[Test]
public void AddFromFile_AddFromFileFromProjectItemsBelongingToFile_FileIsAddedAsDependentFile()
{
CreateProjectItems();
msbuildProject.FileName = @"d:\projects\myproject\myproject.csproj";
msbuildProject.AddFile("MainForm.cs");
string fileName = @"d:\projects\myproject\MainForm.Designer.cs";
msbuildProject.ItemTypeToReturnFromGetDefaultItemType = ItemType.Page;
projectItems = project.ProjectItems.Item("MainForm.cs").ProjectItems;
projectItems.AddFromFile(fileName);
FileProjectItem fileItem = msbuildProject.FindFile(fileName);
Assert.AreEqual("MainForm.Designer.cs", fileItem.Include);
Assert.AreEqual(fileName, fileItem.FileName);
Assert.AreEqual(ItemType.Page, fileItem.ItemType);
Assert.AreEqual(msbuildProject, fileItem.Project);
Assert.AreEqual("MainForm.cs", fileItem.DependentUpon);
}
}
}

Loading…
Cancel
Save