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 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections.Generic;
namespace ICSharpCode.PackageManagement.EnvDTE namespace ICSharpCode.PackageManagement.EnvDTE
{ {
public interface IPropertyFactory public interface IPropertyFactory
{ {
Property CreateProperty(string name); 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
public class ProjectItem public class ProjectItem
{ {
SD.FileProjectItem projectItem; SD.FileProjectItem projectItem;
const string CopyToOutputDirectoryPropertyName = "CopyToOutputDirectory"; public const string CopyToOutputDirectoryPropertyName = "CopyToOutputDirectory";
public ProjectItem(Project project, SD.FileProjectItem projectItem) public ProjectItem(Project project, SD.FileProjectItem projectItem)
{ {

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

@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections.Generic;
namespace ICSharpCode.PackageManagement.EnvDTE namespace ICSharpCode.PackageManagement.EnvDTE
{ {
@ -18,5 +19,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
return new ProjectItemProperty(projectItem, name); 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 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections.Generic;
namespace ICSharpCode.PackageManagement.EnvDTE namespace ICSharpCode.PackageManagement.EnvDTE
{ {
@ -18,5 +19,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
return new ProjectProperty(project, name); 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 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE namespace ICSharpCode.PackageManagement.EnvDTE
{ {
public class Properties public class Properties : IEnumerable<Property>
{ {
IPropertyFactory propertyFactory; IPropertyFactory propertyFactory;
@ -19,5 +21,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
return propertyFactory.CreateProperty(propertyName); 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 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.PackageManagement.EnvDTE; using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework; using NUnit.Framework;
using PackageManagement.Tests.Helpers; using PackageManagement.Tests.Helpers;
@ -27,6 +30,17 @@ namespace PackageManagement.Tests.EnvDTE
properties = projectItem.Properties; 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] [Test]
public void Value_GetCopyToOutputDirectoryPropertyValue_ReturnsCopyToOutputDirectoryValueFromMSBuildProject() public void Value_GetCopyToOutputDirectoryPropertyValue_ReturnsCopyToOutputDirectoryValueFromMSBuildProject()
{ {
@ -76,5 +90,27 @@ namespace PackageManagement.Tests.EnvDTE
Assert.IsTrue(saved); 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