12 changed files with 378 additions and 54 deletions
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
// 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.IO; |
||||
|
||||
using ICSharpCode.SharpDevelop.Project; |
||||
using SD = ICSharpCode.SharpDevelop.Project; |
||||
|
||||
namespace ICSharpCode.PackageManagement.EnvDTE |
||||
{ |
||||
public class ChildProjectItems : IEnumerable<ProjectItem> |
||||
{ |
||||
public ChildProjectItems(ProjectItem projectItem) |
||||
{ |
||||
this.ProjectItem = projectItem; |
||||
this.Project = projectItem.ContainingProject; |
||||
} |
||||
|
||||
ProjectItem ProjectItem { get; set; } |
||||
Project Project { get; set; } |
||||
|
||||
IEnumerator IEnumerable.GetEnumerator() |
||||
{ |
||||
return GetEnumerator(); |
||||
} |
||||
|
||||
public IEnumerator<ProjectItem> GetEnumerator() |
||||
{ |
||||
foreach (SD.ProjectItem msbuildProjectItem in Project.MSBuildProject.Items) { |
||||
ProjectItem item = ConvertToProjectItem(msbuildProjectItem); |
||||
if (item != null) { |
||||
yield return item; |
||||
} |
||||
} |
||||
} |
||||
|
||||
ProjectItem ConvertToProjectItem(SD.ProjectItem msbuildProjectItem) |
||||
{ |
||||
ProjectItemRelationship relationship = ProjectItem.GetRelationship(msbuildProjectItem); |
||||
return relationship.GetChild(); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
// 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; |
||||
using SD = ICSharpCode.SharpDevelop.Project; |
||||
|
||||
namespace ICSharpCode.PackageManagement.EnvDTE |
||||
{ |
||||
public class DirectoryProjectItem : ProjectItem |
||||
{ |
||||
string relativePath; |
||||
|
||||
public DirectoryProjectItem( |
||||
Project project, |
||||
string relativePath) |
||||
: this(project, CreateFileProjectItem(project, relativePath)) |
||||
{ |
||||
this.relativePath = relativePath; |
||||
} |
||||
|
||||
static FileProjectItem CreateFileProjectItem(Project project, string relativePath) |
||||
{ |
||||
string directory = GetLastDirectoryName(relativePath); |
||||
return new FileProjectItem(project.MSBuildProject, ItemType.Folder, directory); |
||||
} |
||||
|
||||
static string GetLastDirectoryName(string relativePath) |
||||
{ |
||||
string[] directoryNames = relativePath.Split('\\'); |
||||
return directoryNames[1]; |
||||
} |
||||
|
||||
public DirectoryProjectItem(Project project, FileProjectItem projectItem) |
||||
: base(project, projectItem) |
||||
{ |
||||
} |
||||
|
||||
internal override bool IsChildItem(SD.ProjectItem msbuildProjectItem) |
||||
{ |
||||
string directory = Path.GetDirectoryName(msbuildProjectItem.Include); |
||||
if (directory == relativePath) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
// 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.Generic; |
||||
|
||||
namespace ICSharpCode.PackageManagement.EnvDTE |
||||
{ |
||||
public class DirectoryProjectItems : ProjectItems |
||||
{ |
||||
ProjectItem projectItem; |
||||
|
||||
public DirectoryProjectItems(ProjectItem projectItem) |
||||
: base(projectItem.ContainingProject, new PackageManagementFileService()) |
||||
{ |
||||
this.projectItem = projectItem; |
||||
} |
||||
|
||||
public override IEnumerator<ProjectItem> GetEnumerator() |
||||
{ |
||||
var items = new ChildProjectItems(projectItem); |
||||
return items.GetEnumerator(); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,69 @@
@@ -0,0 +1,69 @@
|
||||
// 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; |
||||
using SD = ICSharpCode.SharpDevelop.Project; |
||||
|
||||
namespace ICSharpCode.PackageManagement.EnvDTE |
||||
{ |
||||
public class ProjectItemRelationship |
||||
{ |
||||
public ProjectItemRelationship(ProjectItem projectItem, SD.ProjectItem msbuildProjectItem) |
||||
{ |
||||
this.ProjectItem = projectItem; |
||||
this.MSBuildProjectItem = msbuildProjectItem; |
||||
this.Project = projectItem.ContainingProject; |
||||
GetRelationship(); |
||||
} |
||||
|
||||
public ProjectItem ProjectItem { get; private set; } |
||||
public SD.ProjectItem MSBuildProjectItem { get; private set; } |
||||
public Project Project { get; private set; } |
||||
|
||||
string MSBuildProjectItemDirectory; |
||||
|
||||
void GetRelationship() |
||||
{ |
||||
GetMSBuildProjectItemDirectory(); |
||||
} |
||||
|
||||
void GetMSBuildProjectItemDirectory() |
||||
{ |
||||
MSBuildProjectItemDirectory = Path.GetDirectoryName(MSBuildProjectItem.Include); |
||||
} |
||||
|
||||
public ProjectItem GetChild() |
||||
{ |
||||
if (IsChildItem()) { |
||||
return CreateProjectItem(); |
||||
} else { |
||||
if (IsInChildDirectory()) { |
||||
return CreateDirectoryItem(); |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
bool IsChildItem() |
||||
{ |
||||
return ProjectItem.IsChildItem(MSBuildProjectItem); |
||||
} |
||||
|
||||
ProjectItem CreateProjectItem() |
||||
{ |
||||
return new ProjectItem(Project, MSBuildProjectItem as FileProjectItem); |
||||
} |
||||
|
||||
bool IsInChildDirectory() |
||||
{ |
||||
return MSBuildProjectItemDirectory.StartsWith(ProjectItem.Name); |
||||
} |
||||
|
||||
ProjectItem CreateDirectoryItem() |
||||
{ |
||||
return new DirectoryProjectItem(Project, MSBuildProjectItemDirectory); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,100 @@
@@ -0,0 +1,100 @@
|
||||
// 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 ICSharpCode.PackageManagement.EnvDTE; |
||||
using DTE = ICSharpCode.PackageManagement.EnvDTE; |
||||
using NUnit.Framework; |
||||
using PackageManagement.Tests.Helpers; |
||||
|
||||
namespace PackageManagement.Tests.EnvDTE |
||||
{ |
||||
[TestFixture] |
||||
public class ProjectItemTests |
||||
{ |
||||
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 ProjectItems_ProjectHasOneFileInsideSrcDirectory_ReturnsOneFileForSrcDirectory() |
||||
{ |
||||
CreateProjectItems(); |
||||
msbuildProject.AddFile(@"src\program.cs"); |
||||
|
||||
var directoryItem = projectItems.Item("src"); |
||||
var directoryProjectItems = directoryItem.ProjectItems; |
||||
var files = new List<DTE.ProjectItem>(directoryProjectItems); |
||||
|
||||
string[] expectedFiles = new string[] { |
||||
"program.cs" |
||||
}; |
||||
|
||||
ProjectItemCollectionAssert.AreEqual(expectedFiles, files); |
||||
} |
||||
|
||||
[Test] |
||||
public void ProjectItems_ProjectHasTestDirectoryInsideSrcDirectory_ReturnsTestDirectoryItemForSrcDirectory() |
||||
{ |
||||
CreateProjectItems(); |
||||
msbuildProject.AddDirectory(@"src\test"); |
||||
|
||||
var directoryItem = projectItems.Item("src"); |
||||
var directoryProjectItems = directoryItem.ProjectItems; |
||||
var items = directoryProjectItems as IEnumerable; |
||||
|
||||
string[] expectedItems = new string[] { |
||||
"test" |
||||
}; |
||||
|
||||
ProjectItemCollectionAssert.AreEqual(expectedItems, items); |
||||
} |
||||
|
||||
[Test] |
||||
public void ProjectItems_ProjectHasTwoFilesOneNotInSrcDirectory_ReturnsOneFileItemForSrcDirectory() |
||||
{ |
||||
CreateProjectItems(); |
||||
msbuildProject.AddFile(@"src\test.cs"); |
||||
msbuildProject.AddFile("program.cs"); |
||||
|
||||
var directoryItem = projectItems.Item("src"); |
||||
var directoryProjectItems = directoryItem.ProjectItems; |
||||
var items = directoryProjectItems as IEnumerable; |
||||
|
||||
string[] expectedItems = new string[] { |
||||
"test.cs" |
||||
}; |
||||
|
||||
ProjectItemCollectionAssert.AreEqual(expectedItems, items); |
||||
} |
||||
|
||||
[Test] |
||||
public void ProjectItems_ProjectHasOneFileInTestDirectoryTwoLevelsDeep_ReturnsOneFileItemForTestDirectory() |
||||
{ |
||||
CreateProjectItems(); |
||||
msbuildProject.AddFile(@"src\test\test.cs"); |
||||
|
||||
var directoryItem = projectItems.Item("src"); |
||||
var testDirectoryItem = directoryItem.ProjectItems.Item("test"); |
||||
var testDirectoryProjectItems = testDirectoryItem.ProjectItems; |
||||
var items = testDirectoryProjectItems as IEnumerable; |
||||
|
||||
string[] expectedItems = new string[] { |
||||
"test.cs" |
||||
}; |
||||
|
||||
ProjectItemCollectionAssert.AreEqual(expectedItems, items); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
|
||||
// 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 DTE = ICSharpCode.PackageManagement.EnvDTE; |
||||
using NUnit.Framework; |
||||
|
||||
namespace PackageManagement.Tests.Helpers |
||||
{ |
||||
public static class ProjectItemCollectionAssert |
||||
{ |
||||
public static void AreEqual(string[] expectedItems, List<DTE.ProjectItem> itemsList) |
||||
{ |
||||
var actualItems = new List<string>(); |
||||
itemsList.ForEach(r => actualItems.Add(r.Name)); |
||||
|
||||
CollectionAssert.AreEqual(expectedItems, actualItems); |
||||
} |
||||
|
||||
public static void AreEqual(string[] expectedItems, IEnumerable itemsList) |
||||
{ |
||||
var actualItems = new List<string>(); |
||||
foreach (DTE.ProjectItem item in itemsList) { |
||||
actualItems.Add(item.Name); |
||||
} |
||||
|
||||
CollectionAssert.AreEqual(expectedItems, actualItems); |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue