From 92df3493a999d5a09693b617115debf77a46b206 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Fri, 29 Apr 2011 15:15:53 +0100 Subject: [PATCH] Add minimal support for accessing project files inside subdirectories in PowerShell scripts. --- .../Project/PackageManagement.csproj | 6 +- .../Project/Src/EnvDTE/ChildProjectItems.cs | 46 ++++++++ .../Src/EnvDTE/DirectoryProjectItem.cs | 49 +++++++++ .../Src/EnvDTE/DirectoryProjectItems.cs | 25 +++++ .../Project/Src/EnvDTE/ProjectItem.cs | 31 ++++-- .../Src/EnvDTE/ProjectItemRelationship.cs | 69 ++++++++++++ .../Project/Src/EnvDTE/ProjectItems.cs | 11 +- ...ectory.cs => ProjectItemsInsideProject.cs} | 21 ++-- .../Test/PackageManagement.Tests.csproj | 2 + .../Test/Src/EnvDTE/ProjectItemTests.cs | 100 ++++++++++++++++++ .../Test/Src/EnvDTE/ProjectItemsTests.cs | 40 ++----- .../Helpers/ProjectItemCollectionAssert.cs | 32 ++++++ 12 files changed, 378 insertions(+), 54 deletions(-) create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ChildProjectItems.cs create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItem.cs create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItems.cs create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemRelationship.cs rename src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/{ProjectItemsInsideDirectory.cs => ProjectItemsInsideProject.cs} (83%) create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectItemCollectionAssert.cs diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index d8ce06c0a3..fe3eb1580d 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -70,14 +70,18 @@ + + + - + + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ChildProjectItems.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ChildProjectItems.cs new file mode 100644 index 0000000000..e5b0b9ec09 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ChildProjectItems.cs @@ -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 + { + 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 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(); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItem.cs new file mode 100644 index 0000000000..c5c7ecabd3 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItem.cs @@ -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; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItems.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItems.cs new file mode 100644 index 0000000000..d2220f6ed2 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItems.cs @@ -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 GetEnumerator() + { + var items = new ChildProjectItems(projectItem); + return items.GetEnumerator(); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs index 2bfbb81695..27e56bad03 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs @@ -4,8 +4,9 @@ using System; using System.ComponentModel; using System.IO; - +using ICSharpCode.Core; using SD = ICSharpCode.SharpDevelop.Project; +using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.PackageManagement.EnvDTE { @@ -15,17 +16,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE public const string CopyToOutputDirectoryPropertyName = "CopyToOutputDirectory"; public const string CustomToolPropertyName = "CustomTool"; - public ProjectItem(Project project, SD.FileProjectItem projectItem) + public ProjectItem(Project project, FileProjectItem projectItem) { this.projectItem = projectItem; this.ContainingProject = project; + this.ProjectItems = new DirectoryProjectItems(this); CreateProperties(); } void CreateProperties() { var propertyFactory = new ProjectItemPropertyFactory(this); - Properties = new Properties(propertyFactory); + Properties = new Properties(propertyFactory); } public string Name { @@ -34,6 +36,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE public Properties Properties { get; private set; } public Project ContainingProject { get; private set; } + public ProjectItems ProjectItems { get; private set; } internal object GetProperty(string name) { @@ -61,14 +64,30 @@ namespace ICSharpCode.PackageManagement.EnvDTE void SetCopyToOutputDirectory(object value) { - SD.CopyToOutputDirectory copyToOutputDirectory = ConvertToCopyToOutputDirectory(value); + CopyToOutputDirectory copyToOutputDirectory = ConvertToCopyToOutputDirectory(value); projectItem.CopyToOutputDirectory = copyToOutputDirectory; } - SD.CopyToOutputDirectory ConvertToCopyToOutputDirectory(object value) + CopyToOutputDirectory ConvertToCopyToOutputDirectory(object value) { string valueAsString = value.ToString(); - return (SD.CopyToOutputDirectory)Enum.Parse(typeof(SD.CopyToOutputDirectory), valueAsString); + return (CopyToOutputDirectory)Enum.Parse(typeof(CopyToOutputDirectory), valueAsString); + } + + internal bool IsMatchByName(string name) + { + return String.Equals(this.Name, name, StringComparison.InvariantCultureIgnoreCase); + } + + internal virtual bool IsChildItem(SD.ProjectItem msbuildProjectItem) + { + string directory = Path.GetDirectoryName(msbuildProjectItem.Include); + return IsMatchByName(directory); + } + + internal ProjectItemRelationship GetRelationship(SD.ProjectItem msbuildProjectItem) + { + return new ProjectItemRelationship(this, msbuildProjectItem); } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemRelationship.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemRelationship.cs new file mode 100644 index 0000000000..aa1afabf05 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemRelationship.cs @@ -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); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs index 03c1485e80..569888bb1b 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs @@ -38,9 +38,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE return Path.Combine(project.MSBuildProject.Directory, fileName); } - public IEnumerator GetEnumerator() + public virtual IEnumerator GetEnumerator() { - var items = new ProjectItemsInsideDirectory(project); + var items = new ProjectItemsInsideProject(project); return items.GetEnumerator(); } @@ -52,16 +52,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE public ProjectItem Item(string name) { foreach (ProjectItem item in this) { - if (IsMatch(item, name)) { + if (item.IsMatchByName(name)) { return item; } } return null; } - - bool IsMatch(ProjectItem item, string name) - { - return String.Equals(item.Name, name, StringComparison.InvariantCultureIgnoreCase); - } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemsInsideDirectory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemsInsideProject.cs similarity index 83% rename from src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemsInsideDirectory.cs rename to src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemsInsideProject.cs index dd46b190d5..1d5a8d96f1 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemsInsideDirectory.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemsInsideProject.cs @@ -7,15 +7,16 @@ using System.Collections.Generic; using System.IO; using SD = ICSharpCode.SharpDevelop.Project; +using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.PackageManagement.EnvDTE { - public class ProjectItemsInsideDirectory : IEnumerable + public class ProjectItemsInsideProject : IEnumerable { Project project; Dictionary directoriesIncluded = new Dictionary(); - public ProjectItemsInsideDirectory(Project project) + public ProjectItemsInsideProject(Project project) { this.project = project; } @@ -32,14 +33,14 @@ namespace ICSharpCode.PackageManagement.EnvDTE ProjectItem ConvertToProjectItem(SD.ProjectItem item) { - var fileItem = item as SD.FileProjectItem; + var fileItem = item as FileProjectItem; if (fileItem != null) { return ConvertFileToProjectItem(fileItem); } return null; } - ProjectItem ConvertFileToProjectItem(SD.FileProjectItem fileItem) + ProjectItem ConvertFileToProjectItem(FileProjectItem fileItem) { if (IsInProjectRootFolder(fileItem)) { if (IsDirectory(fileItem)) { @@ -50,7 +51,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE return ConvertDirectoryToProjectItem(fileItem); } - bool IsInProjectRootFolder(SD.FileProjectItem item) + bool IsInProjectRootFolder(FileProjectItem item) { if (item.IsLink) { return !HasDirectoryInPath(item.VirtualName); @@ -64,12 +65,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE return !String.IsNullOrEmpty(directoryName); } - bool IsDirectory(SD.FileProjectItem fileItem) + bool IsDirectory(FileProjectItem fileItem) { - return fileItem.ItemType == SD.ItemType.Folder; + return fileItem.ItemType == ItemType.Folder; } - ProjectItem CreateDirectoryProjectItemIfDirectoryNotAlreadyIncluded(SD.FileProjectItem fileItem) + ProjectItem CreateDirectoryProjectItemIfDirectoryNotAlreadyIncluded(FileProjectItem fileItem) { string directory = fileItem.Include; if (!IsDirectoryIncludedAlready(directory)) { @@ -79,7 +80,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE return null; } - ProjectItem ConvertDirectoryToProjectItem(SD.FileProjectItem fileItem) + ProjectItem ConvertDirectoryToProjectItem(FileProjectItem fileItem) { string subDirectoryName = GetFirstSubDirectoryName(fileItem.Include); if (IsDirectoryInsideProject(subDirectoryName)) { @@ -114,7 +115,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE ProjectItem CreateDirectoryProjectItem(string directoryName) { - var directoryItem = new SD.FileProjectItem(project.MSBuildProject, SD.ItemType.Folder); + var directoryItem = new FileProjectItem(project.MSBuildProject, ItemType.Folder); directoryItem.Include = directoryName; return new ProjectItem(project, directoryItem); } diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index bde267d2c6..419b595a47 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -74,6 +74,7 @@ + @@ -90,6 +91,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs new file mode 100644 index 0000000000..fc0a65646d --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs @@ -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(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); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs index 478a7c0d22..44c72ea286 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs @@ -28,24 +28,6 @@ namespace PackageManagement.Tests.EnvDTE fakeFileService = project.FakeFileService; } - void ProjectItemCollectionAssertAreEqual(string[] expectedItems, List itemsList) - { - var actualItems = new List(); - itemsList.ForEach(r => actualItems.Add(r.Name)); - - CollectionAssert.AreEqual(expectedItems, actualItems); - } - - void ProjectItemCollectionAssertAreEqual(string[] expectedItems, IEnumerable itemsList) - { - var actualItems = new List(); - foreach (DTE.ProjectItem item in itemsList) { - actualItems.Add(item.Name); - } - - CollectionAssert.AreEqual(expectedItems, actualItems); - } - [Test] public void AddFromFileCopy_AddFileNameOutsideProjectFolder_FileIsIncludedInProjectInProjectFolder() { @@ -139,7 +121,7 @@ namespace PackageManagement.Tests.EnvDTE "Test.cs" }; - ProjectItemCollectionAssertAreEqual(expectedItems, itemsList); + ProjectItemCollectionAssert.AreEqual(expectedItems, itemsList); } [Test] @@ -154,7 +136,7 @@ namespace PackageManagement.Tests.EnvDTE "Program.cs" }; - ProjectItemCollectionAssertAreEqual(expectedFiles, enumerable); + ProjectItemCollectionAssert.AreEqual(expectedFiles, enumerable); } [Test] @@ -170,7 +152,7 @@ namespace PackageManagement.Tests.EnvDTE "Program.cs" }; - ProjectItemCollectionAssertAreEqual(expectedFiles, enumerable); + ProjectItemCollectionAssert.AreEqual(expectedFiles, enumerable); } [Test] @@ -185,7 +167,7 @@ namespace PackageManagement.Tests.EnvDTE "src" }; - ProjectItemCollectionAssertAreEqual(expectedItems, enumerable); + ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); } [Test] @@ -202,7 +184,7 @@ namespace PackageManagement.Tests.EnvDTE "ViewModels" }; - ProjectItemCollectionAssertAreEqual(expectedItems, enumerable); + ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); } [Test] @@ -218,7 +200,7 @@ namespace PackageManagement.Tests.EnvDTE "Controllers", }; - ProjectItemCollectionAssertAreEqual(expectedItems, enumerable); + ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); } [Test] @@ -234,7 +216,7 @@ namespace PackageManagement.Tests.EnvDTE "Controllers", }; - ProjectItemCollectionAssertAreEqual(expectedItems, enumerable); + ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); } [Test] @@ -250,7 +232,7 @@ namespace PackageManagement.Tests.EnvDTE "Controllers", }; - ProjectItemCollectionAssertAreEqual(expectedItems, enumerable); + ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); } [Test] @@ -266,7 +248,7 @@ namespace PackageManagement.Tests.EnvDTE "Program.cs" }; - ProjectItemCollectionAssertAreEqual(expectedFiles, enumerable); + ProjectItemCollectionAssert.AreEqual(expectedFiles, enumerable); } [Test] @@ -281,7 +263,7 @@ namespace PackageManagement.Tests.EnvDTE "Program.cs" }; - ProjectItemCollectionAssertAreEqual(expectedFiles, enumerable); + ProjectItemCollectionAssert.AreEqual(expectedFiles, enumerable); } [Test] @@ -298,7 +280,7 @@ namespace PackageManagement.Tests.EnvDTE "Configuration" }; - ProjectItemCollectionAssertAreEqual(expectedItems, enumerable); + ProjectItemCollectionAssert.AreEqual(expectedItems, enumerable); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectItemCollectionAssert.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectItemCollectionAssert.cs new file mode 100644 index 0000000000..e3913c7f03 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectItemCollectionAssert.cs @@ -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 itemsList) + { + var actualItems = new List(); + itemsList.ForEach(r => actualItems.Add(r.Name)); + + CollectionAssert.AreEqual(expectedItems, actualItems); + } + + public static void AreEqual(string[] expectedItems, IEnumerable itemsList) + { + var actualItems = new List(); + foreach (DTE.ProjectItem item in itemsList) { + actualItems.Add(item.Name); + } + + CollectionAssert.AreEqual(expectedItems, actualItems); + } + } +}