Browse Source

Implement EnvDTE.Solution.Properties.

pull/28/head
Matt Ward 13 years ago
parent
commit
e428c65ef7
  1. 2
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 23
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs
  3. 3
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs
  4. 37
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionProperty.cs
  5. 37
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionPropertyFactory.cs
  6. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  7. 3
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionBuildTests.cs
  8. 83
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionPropertyTests.cs
  9. 5
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/SolutionHelper.cs

2
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -140,6 +140,8 @@ @@ -140,6 +140,8 @@
<Compile Include="Src\EnvDTE\SolutionExtensibilityGlobals.cs" />
<Compile Include="Src\EnvDTE\SolutionExtensibilityGlobalsPersistence.cs" />
<Compile Include="Src\EnvDTE\SolutionGlobals.cs" />
<Compile Include="Src\EnvDTE\SolutionProperty.cs" />
<Compile Include="Src\EnvDTE\SolutionPropertyFactory.cs" />
<Compile Include="Src\EnvDTE\SourceControl.cs" />
<Compile Include="Src\EnvDTE\TextDocument.cs" />
<Compile Include="Src\EnvDTE\TextPoint.cs" />

23
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs

@ -19,6 +19,13 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -19,6 +19,13 @@ namespace ICSharpCode.PackageManagement.EnvDTE
this.solution = projectService.OpenSolution;
this.Projects = new Projects(projectService);
this.Globals = new SolutionGlobals(this);
CreateProperties();
}
void CreateProperties()
{
var propertyFactory = new SolutionPropertyFactory(this);
Properties = new Properties(propertyFactory);
}
public string FullName {
@ -60,19 +67,23 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -60,19 +67,23 @@ namespace ICSharpCode.PackageManagement.EnvDTE
get { return new SolutionBuild(this); }
}
public global::EnvDTE.Properties Properties {
get {
throw new NotImplementedException();
}
}
public global::EnvDTE.Properties Properties { get; private set; }
internal Project GetStartupProject()
{
MSBuildBasedProject project = solution.StartupProject as MSBuildBasedProject;
MSBuildBasedProject project = solution.Preferences.StartupProject as MSBuildBasedProject;
if (project != null) {
return new Project(project);
}
return null;
}
internal IEnumerable<string> GetAllPropertyNames()
{
return new string[] {
"Path",
"StartupProject"
};
}
}
}

3
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs

@ -8,7 +8,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -8,7 +8,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public class SolutionBuild : MarshalByRefObject, global::EnvDTE.SolutionBuild
{
Solution solution;
int lastBuildInfo;
public SolutionBuild()
{
@ -27,7 +26,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -27,7 +26,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
/// Returns the number of projects that failed to build.
/// </summary>
public int LastBuildInfo {
get { return lastBuildInfo; }
get { return 0; }
}
public void BuildProject(string solutionConfiguration, string projectUniqueName, bool waitForBuildToFinish)

37
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionProperty.cs

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
// 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;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class SolutionProperty : Property
{
Solution solution;
public SolutionProperty(Solution solution, string name)
: base(name)
{
this.solution = solution;
}
protected override object GetValue()
{
if (Name == "StartupProject") {
return GetStartupProjectName();
} else if (Name == "Path") {
return solution.FileName;
}
return String.Empty;
}
string GetStartupProjectName()
{
Project project = solution.GetStartupProject();
if (project != null) {
return solution.GetStartupProject().Name;
}
return String.Empty;
}
}
}

37
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionPropertyFactory.cs

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
// 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;
using System.Linq;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class SolutionPropertyFactory : IPropertyFactory
{
Solution solution;
public SolutionPropertyFactory(Solution solution)
{
this.solution = solution;
}
public Property CreateProperty(string name)
{
return new SolutionProperty(solution, name);
}
public IEnumerator<Property> GetEnumerator()
{
List<Property> properties = GetProperties().ToList();
return properties.GetEnumerator();
}
IEnumerable<Property> GetProperties()
{
foreach (string propertyName in solution.GetAllPropertyNames()) {
yield return CreateProperty(propertyName);
}
}
}
}

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

@ -104,6 +104,7 @@ @@ -104,6 +104,7 @@
<Compile Include="Src\EnvDTE\ProjectsTests.cs" />
<Compile Include="Src\EnvDTE\SolutionBuildTests.cs" />
<Compile Include="Src\EnvDTE\SolutionGlobalsTests.cs" />
<Compile Include="Src\EnvDTE\SolutionPropertyTests.cs" />
<Compile Include="Src\EnvDTE\SolutionTests.cs" />
<Compile Include="Src\Helpers\AttributeHelper.cs" />
<Compile Include="Src\Helpers\ClassHelper.cs" />

3
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionBuildTests.cs

@ -30,7 +30,8 @@ namespace PackageManagement.Tests.EnvDTE @@ -30,7 +30,8 @@ namespace PackageManagement.Tests.EnvDTE
void AddStartupProject(string projectFileName)
{
solutionHelper.AddProjectToSolutionWithFileName("TestProject", projectFileName);
TestableProject project = solutionHelper.AddProjectToSolutionWithFileName("TestProject", projectFileName);
solutionHelper.SetStartupProject(project);
}
[Test]

83
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionPropertyTests.cs

@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
// 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 ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
using SD = ICSharpCode.SharpDevelop.Project;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class SolutionPropertyTests
{
Properties properties;
Solution solution;
SD.Solution msbuildSolution;
SolutionHelper solutionHelper;
void CreateProperties()
{
solutionHelper = new SolutionHelper();
solution = solutionHelper.Solution;
msbuildSolution = solutionHelper.MSBuildSolution;
properties = (Properties)solution.Properties;
}
void AddStartupProject(string name, string fileName)
{
TestableProject project = solutionHelper.AddProjectToSolutionWithFileName(name, fileName);
solutionHelper.SetStartupProject(project);
}
[Test]
public void Value_GetPathProperty_ReturnsSolutionFileName()
{
CreateProperties();
msbuildSolution.FileName = @"d:\projects\MyProject\MySolution.sln";
global::EnvDTE.Property property = properties.Item("Path");
object path = property.Value;
Assert.AreEqual(@"d:\projects\MyProject\MySolution.sln", path);
}
[Test]
public void GetEnumerator_GetPathProperty_ReturnsSolutionFileName()
{
CreateProperties();
msbuildSolution.FileName = @"d:\projects\MyProject\MySolution.sln";
global::EnvDTE.Property property = PropertiesHelper.FindProperty(properties, "Path");
object path = property.Value;
Assert.AreEqual(@"d:\projects\MyProject\MySolution.sln", path);
}
[Test]
public void GetEnumerator_GetStartupProjectPropertyWhenSolutionHasOneStartableProject_ReturnsStartupProjectName()
{
CreateProperties();
msbuildSolution.FileName = @"d:\projects\MyProject\MySolution.sln";
AddStartupProject("MyProject", @"d:\projects\MyProject\MyProject.csproj");
global::EnvDTE.Property property = PropertiesHelper.FindProperty(properties, "StartupProject");
object projectName = property.Value;
Assert.AreEqual("MyProject", projectName);
}
[Test]
public void GetEnumerator_GetStartupProjectPropertyWhenSolutionHasNoProjects_ReturnsPropertyWithEmptyStringAsValue()
{
CreateProperties();
msbuildSolution.FileName = @"d:\projects\MyProject\MySolution.sln";
global::EnvDTE.Property property = PropertiesHelper.FindProperty(properties, "StartupProject");
object projectName = property.Value;
Assert.AreEqual(String.Empty, projectName);
}
}
}

5
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/SolutionHelper.cs

@ -110,5 +110,10 @@ namespace PackageManagement.Tests.Helpers @@ -110,5 +110,10 @@ namespace PackageManagement.Tests.Helpers
.First();
return project.AddFile(include);
}
public void SetStartupProject(SD.IProject project)
{
MSBuildSolution.Preferences.StartupProject = project;
}
}
}

Loading…
Cancel
Save