diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs index 396f3cd585..7d7060bc1d 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs @@ -57,7 +57,22 @@ namespace ICSharpCode.PackageManagement.EnvDTE } public global::EnvDTE.SolutionBuild SolutionBuild { - get { throw new NotImplementedException(); } + get { return new SolutionBuild(this); } + } + + public global::EnvDTE.Properties Properties { + get { + throw new NotImplementedException(); + } + } + + internal Project GetStartupProject() + { + MSBuildBasedProject project = solution.StartupProject as MSBuildBasedProject; + if (project != null) { + return new Project(project); + } + return null; } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs index 5d2530fbb2..1cb6f7c79b 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs @@ -7,10 +7,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE { public class SolutionBuild : MarshalByRefObject, global::EnvDTE.SolutionBuild { + Solution solution; + int lastBuildInfo; + public SolutionBuild() { } + public SolutionBuild(Solution solution) + { + this.solution = solution; + } + public global::EnvDTE.SolutionConfiguration ActiveConfiguration { get { throw new NotImplementedException(); } } @@ -19,12 +27,25 @@ namespace ICSharpCode.PackageManagement.EnvDTE /// Returns the number of projects that failed to build. /// public int LastBuildInfo { - get { throw new NotImplementedException(); } + get { return lastBuildInfo; } } public void BuildProject(string solutionConfiguration, string projectUniqueName, bool waitForBuildToFinish) { throw new NotImplementedException(); } + + public object StartupProjects { + get { return GetStartupProjects(); } + } + + object[] GetStartupProjects() + { + var project = solution.GetStartupProject(); + if (project != null) { + return new string[] { project.UniqueName }; + } + return new string[0]; + } } } diff --git a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/Solution.vb b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/Solution.vb index 67b80bb51f..b12e726241 100644 --- a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/Solution.vb +++ b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/Solution.vb @@ -9,6 +9,7 @@ Namespace EnvDTE ReadOnly Property Projects() As Projects ReadOnly Property Globals() As Globals ReadOnly Property SolutionBuild() As SolutionBuild + ReadOnly Property Properties As Properties Function FindProjectItem(fileName As String) As ProjectItem End Interface diff --git a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/SolutionBuild.vb b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/SolutionBuild.vb index 9b63d58942..e09cda1817 100644 --- a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/SolutionBuild.vb +++ b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/SolutionBuild.vb @@ -4,6 +4,7 @@ Namespace EnvDTE Public Interface SolutionBuild ReadOnly Property ActiveConfiguration() As SolutionConfiguration + ReadOnly Property StartupProjects As Object ''' ''' Returns the number of projects that failed to build. diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index bcf3d39332..0778419620 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -102,6 +102,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectsTests.cs index 9b0b74e9b3..db7894571c 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectsTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectsTests.cs @@ -24,8 +24,8 @@ namespace PackageManagement.Tests.EnvDTE void CreateSolutionWithTwoProjects(string projectName1, string projectName2) { solutionHelper = new SolutionHelper(); - solutionHelper.AddProjectToSolution(projectName1); - solutionHelper.AddProjectToSolution(projectName2); + TestableProject project = solutionHelper.AddProjectToSolutionWithFileName(projectName1, @"d:\projects\" + projectName1 + ".csproj"); + solutionHelper.AddProjectToSolutionWithFileName(projectName2, @"d:\projects\" + projectName2 + ".csproj"); projects = (Projects)solutionHelper.Solution.Projects; } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionBuildTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionBuildTests.cs new file mode 100644 index 0000000000..962deb1de1 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionBuildTests.cs @@ -0,0 +1,59 @@ +// 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; + +namespace PackageManagement.Tests.EnvDTE +{ + [TestFixture] + public class SolutionBuildTests + { + SolutionHelper solutionHelper; + Solution solution; + SolutionBuild solutionBuild; + + void CreateSolutionBuild() + { + solutionHelper = new SolutionHelper(); + solution = solutionHelper.Solution; + solutionBuild = (SolutionBuild)solution.SolutionBuild; + } + + void CreateSolutionBuild(string solutionFileName) + { + CreateSolutionBuild(); + solutionHelper.MSBuildSolution.FileName = solutionFileName; + } + + void AddStartupProject(string projectFileName) + { + solutionHelper.AddProjectToSolutionWithFileName("TestProject", projectFileName); + } + + [Test] + public void StartupProjects_SolutionHasNoProjects_ReturnsEmptyArray() + { + CreateSolutionBuild(); + + object startupProjects = solutionBuild.StartupProjects; + object[] array = startupProjects as object[]; + + Assert.AreEqual(0, array.Length); + } + + [Test] + public void StartupProjects_SolutionHasStartupProjectDefined_ReturnsArrayContainingStartupProjectFileName() + { + CreateSolutionBuild(@"d:\projects\MyProject\MySolution.sln"); + AddStartupProject(@"d:\projects\MyProject\MyProject.csproj"); + object[] expectedProjects = new string[] { "MyProject.csproj" }; + + object[] projects = solutionBuild.StartupProjects as object[]; + + CollectionAssert.AreEqual(expectedProjects, projects); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionTests.cs index 9a3d30ca3c..67783da205 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionTests.cs @@ -149,8 +149,8 @@ namespace PackageManagement.Tests.EnvDTE public void FindProjectItem_SolutionHasTwoProjectsWithOneItemMatchingFileNameInSecondProject_ReturnsProjectItem() { CreateSolution(); - AddProjectToSolutionWithFileName("MyProject1", @"c:\projects\MyProject1\MyProject.csproj"); - AddProjectToSolutionWithFileName("MyProject2", @"c:\projects\MyProject2\MyProject.csproj"); + AddProjectToSolutionWithFileName("MyProject1", @"c:\projects\MyProject1\MyProject1.csproj"); + AddProjectToSolutionWithFileName("MyProject2", @"c:\projects\MyProject2\MyProject2.csproj"); AddFileToSecondProjectInSolution(@"src\test.cs"); string fileName = @"c:\projects\MyProject2\src\test.cs"; @@ -158,5 +158,16 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual("test.cs", item.Name); } + + [Test] + public void SolutionBuild_SolutionNotBuilt_ReturnsSolutionBuildWithNoProjectsFailingToBuild() + { + CreateSolution(); + + global::EnvDTE.SolutionBuild solutionBuild = solution.SolutionBuild; + int lastBuildInfo = solutionBuild.LastBuildInfo; + + Assert.AreEqual(0, lastBuildInfo); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs index f3900e8c67..9385bfa864 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs @@ -19,16 +19,24 @@ namespace PackageManagement.Tests.Helpers Solution solution = new Solution(new MockProjectChangeWatcher()); solution.FileName = @"d:\projects\Test\TestSolution.sln"; + return CreateTestProject(solution, name); + } + + public static TestableProject CreateTestProject( + Solution parentSolution, + string name, + string fileName = @"d:\projects\Test\TestProject\TestProject.csproj") + { ProjectCreateInformation createInfo = new ProjectCreateInformation(); - createInfo.Solution = solution; + createInfo.Solution = parentSolution; createInfo.ProjectName = name; createInfo.SolutionPath = @"d:\projects\Test"; createInfo.ProjectBasePath = @"d:\projects\Test\TestProject"; - createInfo.OutputProjectFileName = @"d:\projects\Test\TestProject\TestProject.csproj"; + createInfo.OutputProjectFileName = fileName; var project = new TestableProject(createInfo); - project.Parent = solution; - solution.AddFolder(project); + project.Parent = parentSolution; + parentSolution.AddFolder(project); return project; } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/SolutionHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/SolutionHelper.cs index 4a0d5fb2f0..7de8f0b4dc 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/SolutionHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/SolutionHelper.cs @@ -48,16 +48,16 @@ namespace PackageManagement.Tests.Helpers FakeProjectService.OpenSolution = null; } - public void AddProjectToSolution(string projectName) + public TestableProject AddProjectToSolution(string projectName) { - AddProjectToSolutionWithFileName(projectName, @"c:\projects\MyProject\MyProject.csproj"); + return AddProjectToSolutionWithFileName(projectName, @"c:\projects\MyProject\MyProject.csproj"); } - public void AddProjectToSolutionWithFileName(string projectName, string fileName) + public TestableProject AddProjectToSolutionWithFileName(string projectName, string fileName) { - TestableProject project = ProjectHelper.CreateTestProject(projectName); - project.FileName = fileName; + TestableProject project = ProjectHelper.CreateTestProject(MSBuildSolution, projectName, fileName); FakeProjectService.AddFakeProject(project); + return project; } public void AddExtensibilityGlobalsSection() diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs index 5b53e4d7ce..a849551d07 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs @@ -13,6 +13,7 @@ namespace PackageManagement.Tests.Helpers public bool IsSaved; string assemblyName; string rootNamespace; + bool isStartable = true; public ItemType ItemTypeToReturnFromGetDefaultItemType { get { return TestableProjectBehaviour.ItemTypeToReturnFromGetDefaultItemType; } @@ -26,6 +27,10 @@ namespace PackageManagement.Tests.Helpers { } + public override bool IsStartable { + get { return isStartable; } + } + public override void Save(string fileName) { IsSaved = true;