Browse Source

Support enumerating project item properties in PowerShell scripts.

pull/15/head
Matt Ward 15 years ago
parent
commit
9065cebc57
  1. 2
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IPropertyFactory.cs
  2. 2
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs
  3. 6
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemPropertyFactory.cs
  4. 6
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectPropertyFactory.cs
  5. 14
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Properties.cs
  6. 36
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemPropertyTests.cs

2
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IPropertyFactory.cs

@ -2,11 +2,13 @@ @@ -2,11 +2,13 @@
// 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 interface IPropertyFactory
{
Property CreateProperty(string name);
IEnumerator<Property> GetEnumerator();
}
}

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

@ -12,7 +12,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -12,7 +12,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public class ProjectItem
{
SD.FileProjectItem projectItem;
const string CopyToOutputDirectoryPropertyName = "CopyToOutputDirectory";
public const string CopyToOutputDirectoryPropertyName = "CopyToOutputDirectory";
public ProjectItem(Project project, SD.FileProjectItem projectItem)
{

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

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// 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
{
@ -18,5 +19,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -18,5 +19,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
return new ProjectItemProperty(projectItem, name);
}
public IEnumerator<Property> GetEnumerator()
{
yield return new ProjectItemProperty(projectItem, ProjectItem.CopyToOutputDirectoryPropertyName);
}
}
}

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

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// 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
{
@ -18,5 +19,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -18,5 +19,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
return new ProjectProperty(project, name);
}
public IEnumerator<Property> GetEnumerator()
{
throw new NotImplementedException();
}
}
}

14
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Properties.cs

@ -2,11 +2,13 @@ @@ -2,11 +2,13 @@
// 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.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class Properties
public class Properties : IEnumerable<Property>
{
IPropertyFactory propertyFactory;
@ -19,5 +21,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -19,5 +21,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
return propertyFactory.CreateProperty(propertyName);
}
public IEnumerator<Property> GetEnumerator()
{
return propertyFactory.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}

36
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemPropertyTests.cs

@ -2,6 +2,9 @@ @@ -2,6 +2,9 @@
// 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.EnvDTE;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
@ -27,6 +30,17 @@ namespace PackageManagement.Tests.EnvDTE @@ -27,6 +30,17 @@ namespace PackageManagement.Tests.EnvDTE
properties = projectItem.Properties;
}
void AssertContainsProperty(string propertyName, IEnumerable items)
{
var itemsList = new List<Property>();
foreach (Property property in items) {
itemsList.Add(property);
}
var matchedProperty = itemsList.Find(p => p.Name == propertyName);
Assert.AreEqual(propertyName, matchedProperty.Name);
}
[Test]
public void Value_GetCopyToOutputDirectoryPropertyValue_ReturnsCopyToOutputDirectoryValueFromMSBuildProject()
{
@ -76,5 +90,27 @@ namespace PackageManagement.Tests.EnvDTE @@ -76,5 +90,27 @@ namespace PackageManagement.Tests.EnvDTE
Assert.IsTrue(saved);
}
[Test]
public void GetEnumerator_FindCopyToOutputDirectoryPropertyInAllProperties_ReturnsPropertyWithCopyToOutputDirectoryName()
{
CreateProjectItemProperties();
var projectItemProperties = new List<Property>(properties);
var property = projectItemProperties.Find(p => p.Name == "CopyToOutputDirectory");
Assert.AreEqual("CopyToOutputDirectory", property.Name);
}
[Test]
public void GetEnumerator_FindCopyToOutputDirectoryPropertyFromUntypedEnumerator_ReturnsPropertyWithCopyToOutputDirectoryName()
{
CreateProjectItemProperties();
var projectItemProperties = properties as IEnumerable;
AssertContainsProperty("CopyToOutputDirectory", projectItemProperties);
}
}
}

Loading…
Cancel
Save