diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DTE.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DTE.cs index fa7dcbfe96..d9c165e856 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DTE.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DTE.cs @@ -13,6 +13,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE { IPackageManagementProjectService projectService; IPackageManagementFileService fileService; + Solution solution; public DTE() : this(new PackageManagementProjectService(), new PackageManagementFileService()) @@ -36,7 +37,8 @@ namespace ICSharpCode.PackageManagement.EnvDTE public Solution Solution { get { if (IsSolutionOpen) { - return new Solution(projectService); + CreateSolution(); + return solution; } return null; } @@ -46,6 +48,21 @@ namespace ICSharpCode.PackageManagement.EnvDTE get { return projectService.OpenSolution != null; } } + void CreateSolution() + { + if (!IsOpenSolutionAlreadyCreated()) { + solution = new Solution(projectService); + } + } + + bool IsOpenSolutionAlreadyCreated() + { + if (solution != null) { + return solution.IsOpen; + } + return false; + } + public ItemOperations ItemOperations { get; private set; } public Properties Properties(string category, string page) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs index e77606b3fc..4959e2f86d 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs @@ -43,5 +43,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE { projectService.Save(solution); } + + internal bool IsSameSolution(SD.Solution solution) + { + throw new NotImplementedException(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/DTETests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/DTETests.cs index bf21b84213..28ebcc8329 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/DTETests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/DTETests.cs @@ -20,16 +20,27 @@ namespace PackageManagement.Tests.EnvDTE void CreateDTE() { fakeProjectService = new FakePackageManagementProjectService(); - fakeProjectService.OpenSolution = new SD.Solution(new SD.MockProjectChangeWatcher()); + OpenSolution(@"d:\projects\MyProject\MyProject.sln"); fakeFileService = new FakeFileService(null); dte = new DTE(fakeProjectService, fakeFileService); } + void OpenSolution(string fileName) + { + fakeProjectService.OpenSolution = new SD.Solution(new SD.MockProjectChangeWatcher()); + SetOpenSolutionFileName(fileName); + } + void NoOpenSolution() { fakeProjectService.OpenSolution = null; } + void SetOpenSolutionFileName(string fileName) + { + fakeProjectService.OpenSolution.FileName = fileName; + } + TestableProject AddProjectToSolution(string projectName) { TestableProject project = ProjectHelper.CreateTestProject(projectName); @@ -42,7 +53,7 @@ namespace PackageManagement.Tests.EnvDTE { CreateDTE(); string fileName = @"d:\projects\myproject\myproject.sln"; - fakeProjectService.OpenSolution.FileName = fileName; + SetOpenSolutionFileName(fileName); string fullName = dte.Solution.FullName; @@ -54,7 +65,7 @@ namespace PackageManagement.Tests.EnvDTE { CreateDTE(); string expectedFileName = @"d:\projects\myproject\myproject.sln"; - fakeProjectService.OpenSolution.FileName = expectedFileName; + SetOpenSolutionFileName(expectedFileName); string fileName = dte.Solution.FileName; @@ -147,5 +158,29 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual("10.0", version); } + + [Test] + public void Solution_SetGlobalsVariableValueAndThenAccessSolutionPropertyAgainAndGetSolutionGlobalsVariable_GlobalsVariableValueReturned() + { + CreateDTE(); + + dte.Solution.Globals.set_VariableValue("test", "test-value"); + object variableValue = dte.Solution.Globals.get_VariableValue("test"); + + Assert.AreEqual("test-value", variableValue); + } + + [Test] + public void Solution_OpenSolutionChangesAfterSolutionPropertyAccessed_SolutionReturnedForCurrentOpenSolution() + { + CreateDTE(); + SetOpenSolutionFileName(@"d:\projects\first\first.sln"); + Solution firstSolution = dte.Solution; + + OpenSolution(@"d:\projects\second\second.sln"); + + string fileName = dte.Solution.FileName; + Assert.AreEqual(@"d:\projects\second\second.sln", fileName); + } } }