From ab1229eadca436273e90948cd5262f7a28b20f2d Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 23 Apr 2011 18:13:47 +0100 Subject: [PATCH] Return PackageManagementProjects from console host. --- .../Cmdlets/Project/Src/GetPackageCmdlet.cs | 4 +- .../Project/Src/InstallPackageCmdlet.cs | 9 +-- .../Project/Src/PackageManagementCmdlet.cs | 16 ----- .../Project/Src/UninstallPackageCmdlet.cs | 14 +--- .../Project/Src/UpdatePackageCmdlet.cs | 9 +-- .../Cmdlets/Test/Src/GetPackageCmdletTests.cs | 23 ++++++- .../Test/Src/InstallPackageCmdletTests.cs | 44 ++---------- .../Test/Src/UninstallPackageCmdletTests.cs | 40 ++--------- .../Test/Src/UpdatePackageCmdletTests.cs | 34 +++------- .../Design/FakePackageManagementSolution.cs | 10 +++ .../Project/Src/IPackageManagementSolution.cs | 1 + .../Project/Src/PackageManagementServices.cs | 3 +- .../Project/Src/PackageManagementSolution.cs | 21 ++++++ .../IPackageManagementConsoleHost.cs | 3 +- .../Scripting/PackageManagementConsoleHost.cs | 31 ++++++--- .../FakePackageManagementConsoleHost.cs | 27 +++++--- .../TestablePackageManagementConsoleHost.cs | 6 +- .../Src/PackageManagementSolutionTests.cs | 63 ++++++++++++++++- .../PackageManagementConsoleHostTests.cs | 68 +++++++++++++++---- 19 files changed, 249 insertions(+), 177 deletions(-) diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs index d1b3c61b4c..132240b56e 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs @@ -138,8 +138,8 @@ namespace ICSharpCode.PackageManagement.Cmdlets IPackageRepository CreatePackageRepositoryForActivePackageSource() { - PackageSource source = GetActivePackageSource(Source); - return registeredPackageRepositories.CreateRepository(source); + PackageSource packageSource = ConsoleHost.GetActivePackageSource(Source); + return registeredPackageRepositories.CreateRepository(packageSource); } IQueryable FilterPackages(IQueryable packages) diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs index 1cf0374b51..c4197be1ed 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs @@ -51,16 +51,13 @@ namespace ICSharpCode.PackageManagement.Cmdlets void InstallPackage() { - PackageSource packageSource = GetActivePackageSource(Source); - MSBuildBasedProject project = GetActiveProject(ProjectName); - - InstallPackageAction action = CreateInstallPackageTask(packageSource, project); + InstallPackageAction action = CreateInstallPackageTask(); action.Execute(); } - InstallPackageAction CreateInstallPackageTask(PackageSource packageSource, MSBuildBasedProject msbuildProject) + InstallPackageAction CreateInstallPackageTask() { - IPackageManagementProject project = Solution.CreateProject(packageSource, msbuildProject); + IPackageManagementProject project = ConsoleHost.GetProject(Source, ProjectName); InstallPackageAction action = project.CreateInstallPackageAction(); action.PackageId = Id; action.PackageVersion = Version; diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/PackageManagementCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/PackageManagementCmdlet.cs index e413f078c7..cddfa409ea 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/PackageManagementCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/PackageManagementCmdlet.cs @@ -57,21 +57,5 @@ namespace ICSharpCode.PackageManagement.Cmdlets { TerminatingError.ThrowNoProjectOpenError(); } - - protected PackageSource GetActivePackageSource(string source) - { - if (source != null) { - return new PackageSource(source); - } - return ConsoleHost.ActivePackageSource; - } - - protected MSBuildBasedProject GetActiveProject(string projectName) - { - if (projectName != null) { - return ConsoleHost.GetProject(projectName); - } - return ConsoleHost.DefaultProject as MSBuildBasedProject; - } } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UninstallPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UninstallPackageCmdlet.cs index 878a458f32..2fe70b029f 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UninstallPackageCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UninstallPackageCmdlet.cs @@ -51,21 +51,13 @@ namespace ICSharpCode.PackageManagement.Cmdlets void UninstallPackage() { - MSBuildBasedProject project = GetActiveProject(ProjectName); - PackageSource packageSource = GetActivePackageSource(); - - UninstallPackageAction action = CreateUninstallPackageAction(packageSource, project); + UninstallPackageAction action = CreateUninstallPackageAction(); action.Execute(); } - PackageSource GetActivePackageSource() - { - return GetActivePackageSource(null); - } - - UninstallPackageAction CreateUninstallPackageAction(PackageSource packageSource, MSBuildBasedProject msbuildProject) + UninstallPackageAction CreateUninstallPackageAction() { - IPackageManagementProject project = Solution.CreateProject(packageSource, msbuildProject); + IPackageManagementProject project = ConsoleHost.GetProject(null, ProjectName); UninstallPackageAction action = project.CreateUninstallPackageAction(); action.PackageId = Id; action.PackageVersion = Version; diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs index 28e31f74a8..61beb94e00 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs @@ -51,16 +51,13 @@ namespace ICSharpCode.PackageManagement.Cmdlets void UpdatePackage() { - PackageSource packageSource = GetActivePackageSource(Source); - MSBuildBasedProject project = GetActiveProject(ProjectName); - - UpdatePackageAction action = CreateUpdatePackageAction(packageSource, project); + UpdatePackageAction action = CreateUpdatePackageAction(); action.Execute(); } - UpdatePackageAction CreateUpdatePackageAction(PackageSource packageSource, MSBuildBasedProject msbuildProject) + UpdatePackageAction CreateUpdatePackageAction() { - IPackageManagementProject project = Solution.CreateProject(packageSource, msbuildProject); + IPackageManagementProject project = ConsoleHost.GetProject(Source, ProjectName); UpdatePackageAction action = project.CreateUpdatePackageAction(); action.PackageId = Id; action.PackageVersion = Version; diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs index 57ff013e9e..d885bce7f4 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs @@ -151,6 +151,7 @@ namespace PackageManagement.Cmdlets.Tests { CreateCmdlet(); var source = AddPackageSourceToConsoleHost(); + fakeConsoleHost.PackageSourceToReturnFromGetActivePackageSource = source; EnableListAvailableParameter(); RunCmdlet(); @@ -181,6 +182,7 @@ namespace PackageManagement.Cmdlets.Tests { CreateCmdlet(); var source = AddPackageSourceToConsoleHost(); + fakeConsoleHost.PackageSourceToReturnFromGetActivePackageSource = source; RunCmdlet(); @@ -330,14 +332,15 @@ namespace PackageManagement.Cmdlets.Tests public void ProcessRecord_ListAvailablePackagesWhenPackageSourceParameterSpecified_PackageRepositoryCreatedForPackageSourceSpecifiedByParameter() { CreateCmdlet(); + var expectedPackageSource = new PackageSource("http://sharpdevelop.com/packages"); + fakeConsoleHost.PackageSourceToReturnFromGetActivePackageSource = expectedPackageSource; var repository = fakeRegisteredPackageRepositories.FakePackageRepository; SetSourceParameter("http://sharpdevelop.com/packages"); EnableListAvailableParameter(); RunCmdlet(); - var actualPackageSource = fakeRegisteredPackageRepositories.PackageSourcePassedToCreateRepository.Source; - var expectedPackageSource = "http://sharpdevelop.com/packages"; + var actualPackageSource = fakeRegisteredPackageRepositories.PackageSourcePassedToCreateRepository; Assert.AreEqual(expectedPackageSource, actualPackageSource); } @@ -350,12 +353,26 @@ namespace PackageManagement.Cmdlets.Tests RunCmdlet(); - var actualPackageSource = fakeRegisteredPackageRepositories.PackageSourcePassedToCreateRepository.Source; + var actualPackageSource = fakeConsoleHost.PackageSourcePassedToGetActivePackageSource; var expectedPackageSource = "http://test"; Assert.AreEqual(expectedPackageSource, actualPackageSource); } + [Test] + public void ProcessRecord_JustSourceParameterPassed_PackageRepositoryCreatedForPackageSource() + { + CreateCmdlet(); + SetSourceParameter("http://test"); + + RunCmdlet(); + + var actualPackageSource = fakeRegisteredPackageRepositories.PackageSourcePassedToCreateRepository; + var expectedPackageSource = fakeConsoleHost.PackageSourceToReturnFromGetActivePackageSource; + + Assert.AreEqual(expectedPackageSource, actualPackageSource); + } + [Test] public void ProcessRecord_RecentPackagesRequested_RecentPackagesReturned() { diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs index 773005075d..46675f7fb9 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs @@ -18,7 +18,6 @@ namespace PackageManagement.Cmdlets.Tests { TestableInstallPackageCmdlet cmdlet; FakeCmdletTerminatingError fakeTerminatingError; - FakePackageManagementSolution fakeSolution; FakePackageManagementProject fakeProject; FakeInstallPackageAction fakeInstallPackageTask; @@ -27,8 +26,7 @@ namespace PackageManagement.Cmdlets.Tests cmdlet = new TestableInstallPackageCmdlet(); fakeTerminatingError = cmdlet.FakeCmdletTerminatingError; fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost; - fakeSolution = cmdlet.FakeSolution; - fakeProject = fakeSolution.FakeProject; + fakeProject = fakeConsoleHost.FakeProject; fakeInstallPackageTask = fakeProject.FakeInstallPackageAction; } @@ -104,34 +102,6 @@ namespace PackageManagement.Cmdlets.Tests Assert.AreEqual("Test", actualPackageId); } - [Test] - public void ProcessRecord_PackageIdSpecified_ActivePackageSourceUsedToInstallPackage() - { - CreateCmdletWithoutActiveProject(); - AddDefaultProjectToConsoleHost(); - var packageSource = AddPackageSourceToConsoleHost(); - SetIdParameter("Test"); - RunCmdlet(); - - var actualPackageSource = fakeSolution.PackageSourcePassedToCreateProject; - - Assert.AreEqual(packageSource, actualPackageSource); - } - - [Test] - public void ProcessRecord_PackageIdSpecified_ActiveProjectUsedToCreateProject() - { - CreateCmdletWithoutActiveProject(); - AddPackageSourceToConsoleHost(); - var project = AddDefaultProjectToConsoleHost(); - SetIdParameter("Test"); - RunCmdlet(); - - var actualProject = fakeSolution.ProjectPassedToCreateProject; - - Assert.AreEqual(project, actualProject); - } - [Test] public void ProcessRecord_IgnoreDependenciesParameterSet_IgnoreDependenciesIsTrueWhenInstallingPackage() { @@ -160,7 +130,7 @@ namespace PackageManagement.Cmdlets.Tests } [Test] - public void ProcessRecord_SourceParameterSet_CustomSourceUsedWhenCreatingProject() + public void ProcessRecord_SourceParameterSet_CustomSourceUsedWhenRetrievingProject() { CreateCmdletWithActivePackageSourceAndProject(); @@ -169,7 +139,7 @@ namespace PackageManagement.Cmdlets.Tests RunCmdlet(); var expected = "http://sharpdevelop.net/packages"; - var actual = fakeSolution.PackageSourcePassedToCreateProject.Source; + var actual = fakeConsoleHost.PackageSourcePassedToGetProject; Assert.AreEqual(expected, actual); } @@ -206,16 +176,14 @@ namespace PackageManagement.Cmdlets.Tests public void ProcessRecord_ProjectNameSpecified_ProjectMatchingProjectNameUsedWhenInstallingPackage() { CreateCmdletWithActivePackageSourceAndProject(); - fakeConsoleHost.FakeProjectToReturnFromGetProject = ProjectHelper.CreateTestProject(); SetIdParameter("Test"); SetProjectNameParameter("MyProject"); RunCmdlet(); - var actualProject = fakeSolution.ProjectPassedToCreateProject; - var expectedProject = fakeConsoleHost.FakeProjectToReturnFromGetProject; + var actualProjectName = fakeConsoleHost.ProjectNamePassedToGetProject; - Assert.AreEqual(expectedProject, actualProject); + Assert.AreEqual("MyProject", actualProjectName); } [Test] @@ -227,7 +195,7 @@ namespace PackageManagement.Cmdlets.Tests SetProjectNameParameter("MyProject"); RunCmdlet(); - var actual = fakeConsoleHost.NamePassedToGetProject; + var actual = fakeConsoleHost.ProjectNamePassedToGetProject; var expected = "MyProject"; Assert.AreEqual(expected, actual); diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UninstallPackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UninstallPackageCmdletTests.cs index ce582dc945..7f7922c627 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UninstallPackageCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UninstallPackageCmdletTests.cs @@ -15,7 +15,6 @@ namespace PackageManagement.Cmdlets.Tests { TestableUninstallPackageCmdlet cmdlet; FakeCmdletTerminatingError fakeTerminatingError; - FakePackageManagementSolution fakeSolution; FakePackageManagementProject fakeProject; FakeUninstallPackageAction uninstallPackageAction; @@ -24,8 +23,7 @@ namespace PackageManagement.Cmdlets.Tests cmdlet = new TestableUninstallPackageCmdlet(); fakeTerminatingError = cmdlet.FakeCmdletTerminatingError; fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost; - fakeSolution = cmdlet.FakeSolution; - fakeProject = fakeSolution.FakeProject; + fakeProject = fakeConsoleHost.FakeProject; uninstallPackageAction = fakeProject.FakeUninstallPackageAction; } @@ -101,20 +99,6 @@ namespace PackageManagement.Cmdlets.Tests Assert.AreEqual("Test", actualPackageId); } - [Test] - public void ProcessRecord_PackageIdSpecified_ActiveProjectUsedToCreateProject() - { - CreateCmdletWithoutActiveProject(); - AddPackageSourceToConsoleHost(); - var project = AddDefaultProjectToConsoleHost(); - SetIdParameter("Test"); - RunCmdlet(); - - var actualProject = fakeSolution.ProjectPassedToCreateProject; - - Assert.AreEqual(project, actualProject); - } - [Test] public void ProcessRecord_ForceParameterSet_PackageForcefullyUninstalled() { @@ -201,16 +185,14 @@ namespace PackageManagement.Cmdlets.Tests public void ProcessRecord_ProjectNameSpecified_ProjectMatchingProjectNameUsedWhenUninstallingPackage() { CreateCmdletWithActivePackageSourceAndProject(); - fakeConsoleHost.FakeProjectToReturnFromGetProject = ProjectHelper.CreateTestProject(); SetIdParameter("Test"); SetProjectNameParameter("MyProject"); RunCmdlet(); - var actualProject = fakeSolution.ProjectPassedToCreateProject; - var expectedProject = fakeConsoleHost.FakeProjectToReturnFromGetProject; + var actualProjectName = fakeConsoleHost.ProjectNamePassedToGetProject; - Assert.AreEqual(expectedProject, actualProject); + Assert.AreEqual("MyProject", actualProjectName); } [Test] @@ -222,26 +204,12 @@ namespace PackageManagement.Cmdlets.Tests SetProjectNameParameter("MyProject"); RunCmdlet(); - var actual = fakeConsoleHost.NamePassedToGetProject; + var actual = fakeConsoleHost.ProjectNamePassedToGetProject; var expected = "MyProject"; Assert.AreEqual(expected, actual); } - [Test] - public void ProcessRecord_PackageIdSpecified_ActivePackageSourceUsedToCreateProject() - { - CreateCmdletWithoutActiveProject(); - AddDefaultProjectToConsoleHost(); - var packageSource = AddPackageSourceToConsoleHost(); - SetIdParameter("Test"); - RunCmdlet(); - - var actualPackageSource = fakeSolution.PackageSourcePassedToCreateProject; - - Assert.AreEqual(packageSource, actualPackageSource); - } - [Test] public void ProcessRecord_PackageIdSpecified_PackageIsUninstalled() { diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs index ccd0cd4308..8e40dc336d 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs @@ -15,7 +15,6 @@ namespace PackageManagement.Cmdlets.Tests { TestableUpdatePackageCmdlet cmdlet; FakeCmdletTerminatingError fakeTerminatingError; - FakePackageManagementSolution fakeSolution; FakePackageManagementProject fakeProject; FakeUpdatePackageAction fakeUpdatePackageAction; @@ -24,8 +23,7 @@ namespace PackageManagement.Cmdlets.Tests cmdlet = new TestableUpdatePackageCmdlet(); fakeTerminatingError = cmdlet.FakeCmdletTerminatingError; fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost; - fakeSolution = cmdlet.FakeSolution; - fakeProject = fakeSolution.FakeProject; + fakeProject = fakeConsoleHost.FakeProject; fakeUpdatePackageAction = fakeProject.FakeUpdatePackageAction; } @@ -102,7 +100,7 @@ namespace PackageManagement.Cmdlets.Tests } [Test] - public void ProcessRecord_PackageIdSpecified_ActivePackageSourceUsedToCreateProject() + public void ProcessRecord_PackageIdSpecified_NullPackageSourceUsedToCreateProject() { CreateCmdletWithoutActiveProject(); AddDefaultProjectToConsoleHost(); @@ -110,23 +108,9 @@ namespace PackageManagement.Cmdlets.Tests SetIdParameter("Test"); RunCmdlet(); - var actualPackageSource = fakeSolution.PackageSourcePassedToCreateProject; + var actualPackageSource = fakeConsoleHost.PackageSourcePassedToGetProject; - Assert.AreEqual(packageSource, actualPackageSource); - } - - [Test] - public void ProcessRecord_PackageIdSpecified_ActiveProjectUsedToCreateProject() - { - CreateCmdletWithoutActiveProject(); - AddPackageSourceToConsoleHost(); - var project = AddDefaultProjectToConsoleHost(); - SetIdParameter("Test"); - RunCmdlet(); - - var actualProject = fakeSolution.ProjectPassedToCreateProject; - - Assert.AreEqual(project, actualProject); + Assert.IsNull(actualPackageSource); } [Test] @@ -166,7 +150,7 @@ namespace PackageManagement.Cmdlets.Tests RunCmdlet(); var expected = "http://sharpdevelop.net/packages"; - var actual = fakeSolution.PackageSourcePassedToCreateProject.Source; + var actual = fakeConsoleHost.PackageSourcePassedToGetProject; Assert.AreEqual(expected, actual); } @@ -203,16 +187,14 @@ namespace PackageManagement.Cmdlets.Tests public void ProcessRecord_ProjectNameSpecified_ProjectMatchingProjectNameUsedWhenUpdatingPackage() { CreateCmdletWithActivePackageSourceAndProject(); - fakeConsoleHost.FakeProjectToReturnFromGetProject = ProjectHelper.CreateTestProject(); SetIdParameter("Test"); SetProjectNameParameter("MyProject"); RunCmdlet(); - var actualProject = fakeSolution.ProjectPassedToCreateProject; - var expectedProject = fakeConsoleHost.FakeProjectToReturnFromGetProject; + var actualProjectName = fakeConsoleHost.ProjectNamePassedToGetProject; - Assert.AreEqual(expectedProject, actualProject); + Assert.AreEqual("MyProject", actualProjectName); } [Test] @@ -224,7 +206,7 @@ namespace PackageManagement.Cmdlets.Tests SetProjectNameParameter("MyProject"); RunCmdlet(); - var actual = fakeConsoleHost.NamePassedToGetProject; + var actual = fakeConsoleHost.ProjectNamePassedToGetProject; var expected = "MyProject"; Assert.AreEqual(expected, actual); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs index 9a0d1f7b5b..68cd0ed541 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs @@ -58,5 +58,15 @@ namespace ICSharpCode.PackageManagement.Design ProjectPassedToCreateProject = project; return FakeProject; } + + public PackageSource PackageSourcePassedToGetProject; + public string ProjectNamePassedToGetProject; + + public IPackageManagementProject GetProject(PackageSource source, string projectName) + { + PackageSourcePassedToGetProject = source; + ProjectNamePassedToGetProject = projectName; + return FakeProject; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs index bec69973a2..44fcf33d02 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs @@ -14,5 +14,6 @@ namespace ICSharpCode.PackageManagement IPackageManagementProject CreateProject(PackageSource source, MSBuildBasedProject project); IPackageManagementProject CreateProject(IPackageRepository sourceRepository, MSBuildBasedProject project); IPackageManagementProject GetActiveProject(IPackageRepository sourceRepository); + IPackageManagementProject GetProject(PackageSource source, string projectName); } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs index b5542cc53d..a0e716a2fc 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs @@ -10,7 +10,7 @@ namespace ICSharpCode.PackageManagement { static readonly PackageManagementOptions options; static readonly PackageManagementSolution solution; - static readonly PackageManagementConsoleHost consoleHost = new PackageManagementConsoleHost(); + static readonly PackageManagementConsoleHost consoleHost; static readonly RegisteredPackageRepositories registeredPackageRepositories; static readonly PackageManagementEvents packageManagementEvents = new PackageManagementEvents(); static readonly PackageManagementProjectService projectService = new PackageManagementProjectService(); @@ -23,6 +23,7 @@ namespace ICSharpCode.PackageManagement registeredPackageRepositories = new RegisteredPackageRepositories(options); outputMessagesView = new PackageManagementOutputMessagesView(packageManagementEvents); solution = new PackageManagementSolution(registeredPackageRepositories, packageManagementEvents); + consoleHost = new PackageManagementConsoleHost(solution); projectBrowserRefresher = new ProjectBrowserRefresher(projectService, packageManagementEvents); } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs index d926e307ba..e39cc0fdd2 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs @@ -75,5 +75,26 @@ namespace ICSharpCode.PackageManagement { return registeredPackageRepositories.CreateRepository(source); } + + public IPackageManagementProject GetProject(PackageSource source, string projectName) + { + MSBuildBasedProject msbuildProject = GetMSBuildProject(projectName); + return CreateProject(source, msbuildProject); + } + + MSBuildBasedProject GetMSBuildProject(string name) + { + foreach (IProject project in projectService.GetOpenProjects()) { + if (IsProjectNameMatch(project.Name, name)) { + return project as MSBuildBasedProject; + } + } + return null; + } + + bool IsProjectNameMatch(string a, string b) + { + return String.Equals(a, b, StringComparison.InvariantCultureIgnoreCase); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs index dd5b37d37b..99d012ecb4 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs @@ -19,6 +19,7 @@ namespace ICSharpCode.PackageManagement.Scripting void Clear(); void Run(); - MSBuildBasedProject GetProject(string name); + IPackageManagementProject GetProject(string packageSource, string projectName); + PackageSource GetActivePackageSource(string source); } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs index 7fc00d972b..309ea5eed8 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs @@ -16,6 +16,7 @@ namespace ICSharpCode.PackageManagement.Scripting public class PackageManagementConsoleHost : IPackageManagementConsoleHost { IThread thread; + IPackageManagementSolution solution; IPowerShellHostFactory powerShellHostFactory; IPackageManagementProjectService projectService; IPowerShellHost powerShellHost; @@ -25,17 +26,20 @@ namespace ICSharpCode.PackageManagement.Scripting Version nuGetVersion; public PackageManagementConsoleHost( + IPackageManagementSolution solution, IPowerShellHostFactory powerShellHostFactory, IPackageManagementProjectService projectService, IPackageManagementAddInPath addinPath) { + this.solution = solution; this.powerShellHostFactory = powerShellHostFactory; this.projectService = projectService; this.addinPath = addinPath; } - public PackageManagementConsoleHost() + public PackageManagementConsoleHost(IPackageManagementSolution solution) : this( + solution, new PowerShellHostFactory(), new PackageManagementProjectService(), new PackageManagementAddInPath()) @@ -176,19 +180,28 @@ namespace ICSharpCode.PackageManagement.Scripting powerShellHost.ExecuteCommand(line); } - public MSBuildBasedProject GetProject(string name) + public IPackageManagementProject GetProject(string packageSource, string projectName) { - foreach (IProject project in projectService.GetOpenProjects()) { - if (IsProjectNameMatch(project.Name, name)) { - return project as MSBuildBasedProject; - } + PackageSource source = GetActivePackageSource(packageSource); + projectName = GetActiveProjectName(projectName); + + return solution.GetProject(source, projectName); + } + + public PackageSource GetActivePackageSource(string source) + { + if (source != null) { + return new PackageSource(source); } - return null; + return ActivePackageSource; } - bool IsProjectNameMatch(string a, string b) + string GetActiveProjectName(string projectName) { - return String.Equals(a, b, StringComparison.InvariantCultureIgnoreCase); + if (projectName != null) { + return projectName; + } + return DefaultProject.Name; } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs index 2120a32f13..9298861b7b 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs @@ -51,19 +51,30 @@ namespace PackageManagement.Tests.Helpers return source; } - public MSBuildBasedProject FakeProjectToReturnFromGetProject; - public string NamePassedToGetProject; + public FakePackageManagementProjectService FakeProjectService = new FakePackageManagementProjectService(); + + public IPackageManagementProjectService ProjectService { + get { return FakeProjectService; } + } - public MSBuildBasedProject GetProject(string name) + public string PackageSourcePassedToGetProject; + public string ProjectNamePassedToGetProject; + public FakePackageManagementProject FakeProject = new FakePackageManagementProject(); + + public IPackageManagementProject GetProject(string packageSource, string projectName) { - NamePassedToGetProject = name; - return FakeProjectToReturnFromGetProject; + PackageSourcePassedToGetProject = packageSource; + ProjectNamePassedToGetProject = projectName; + return FakeProject; } - public FakePackageManagementProjectService FakeProjectService = new FakePackageManagementProjectService(); + public string PackageSourcePassedToGetActivePackageSource; + public PackageSource PackageSourceToReturnFromGetActivePackageSource = new PackageSource("http://sharpdevelop.com"); - public IPackageManagementProjectService ProjectService { - get { return FakeProjectService; } + public PackageSource GetActivePackageSource(string source) + { + PackageSourcePassedToGetActivePackageSource = source; + return PackageSourceToReturnFromGetActivePackageSource; } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageManagementConsoleHost.cs index 7d3571f706..6d0bc668e5 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageManagementConsoleHost.cs @@ -17,9 +17,11 @@ namespace PackageManagement.Tests.Helpers public FakePowerShellHostFactory FakePowerShellHostFactory; public FakePackageManagementAddInPath FakePackageManagementAddInPath; public FakePackageManagementProjectService FakeProjectService; + public FakePackageManagementSolution FakeSolution; public TestablePackageManagementConsoleHost() : this( + new FakePackageManagementSolution(), new FakeScriptingConsoleWithLinesToRead(), new FakePowerShellHostFactory(), new FakePackageManagementProjectService(), @@ -28,12 +30,14 @@ namespace PackageManagement.Tests.Helpers } public TestablePackageManagementConsoleHost( + FakePackageManagementSolution solution, FakeScriptingConsoleWithLinesToRead scriptingConsole, FakePowerShellHostFactory powerShellHostFactory, FakePackageManagementProjectService projectService, FakePackageManagementAddInPath addinPath) - : base(powerShellHostFactory, projectService, addinPath) + : base(solution, powerShellHostFactory, projectService, addinPath) { + this.FakeSolution = solution; this.FakeScriptingConsole = scriptingConsole; this.ScriptingConsole = scriptingConsole; this.FakePowerShellHostFactory = powerShellHostFactory; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs index 13849091b2..9e7bf50b7e 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs @@ -44,7 +44,7 @@ namespace PackageManagement.Tests var packageManagementEvents = new FakePackageManagementEvents(); fakeProjectService.CurrentProject = testProject; - solution = + solution = new PackageManagementSolution( fakeRegisteredPackageRepositories, packageManagementEvents, @@ -52,6 +52,13 @@ namespace PackageManagement.Tests fakeProjectFactory); } + TestableProject AddProjectToOpenProjects(string projectName) + { + var project = ProjectHelper.CreateTestProject(projectName); + fakeProjectService.OpenProjects.Add(project); + return project; + } + [Test] public void GetActiveProject_ProjectIsSelected_CreatesProjectUsingCurrentProjectSelectedInSharpDevelop() { @@ -220,5 +227,59 @@ namespace PackageManagement.Tests Assert.AreEqual(expectedProject, project); } + + [Test] + public void GetProject_PackagesSourceAndProjectNamePassed_CreatesProjectUsingFoundProjectMatchingName() + { + CreateSolution(); + var expectedProject = AddProjectToOpenProjects("Test"); + var source = new PackageSource("http://sharpdevelop.net"); + + solution.GetProject(source, "Test"); + + var project = fakeProjectFactory.ProjectPassedToCreateProject; + + Assert.AreEqual(expectedProject, project); + } + + [Test] + public void GetProject_PackagesSourceAndProjectNameWithDifferentCasePassed_CreatesProjectUsingFoundProjectMatchingName() + { + CreateSolution(); + var expectedProject = AddProjectToOpenProjects("Test"); + var source = new PackageSource("http://sharpdevelop.net"); + + solution.GetProject(source, "TEST"); + + var project = fakeProjectFactory.ProjectPassedToCreateProject; + + Assert.AreEqual(expectedProject, project); + } + + [Test] + public void GetProject_PackagesSourceAndProjectPassed_ReturnsProjectFromProjectFactory() + { + CreateSolution(); + AddProjectToOpenProjects("Test"); + var source = new PackageSource("http://sharpdevelop.net"); + var project = solution.GetProject(source, "Test"); + + var expectedProject = fakeProjectFactory.FakeProject; + + Assert.AreEqual(expectedProject, project); + } + + [Test] + public void GetProject_PackagesSourceAndProjectPassed_PackageSourceUsedToCreateRepository() + { + CreateSolution(); + AddProjectToOpenProjects("Test"); + var expectedSource = new PackageSource("http://sharpdevelop.net"); + var project = solution.GetProject(expectedSource, "Test"); + + var actualSource = fakeRegisteredPackageRepositories.PackageSourcePassedToCreateRepository; + + Assert.AreEqual(expectedSource, actualSource); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs index 8569aae3ea..50d959b602 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs @@ -6,6 +6,7 @@ using ICSharpCode.PackageManagement.Design; using ICSharpCode.PackageManagement.Scripting; using ICSharpCode.Scripting; using ICSharpCode.Scripting.Tests.Utils; +using NuGet; using NUnit.Framework; using PackageManagement.Tests.Helpers; @@ -17,11 +18,13 @@ namespace PackageManagement.Tests.Scripting TestablePackageManagementConsoleHost host; FakeScriptingConsoleWithLinesToRead scriptingConsole; FakePowerShellHost powerShellHost; + FakePackageManagementSolution fakeSolution; FakePackageManagementProjectService fakeProjectService; void CreateHost() { host = new TestablePackageManagementConsoleHost(); + fakeSolution = host.FakeSolution; scriptingConsole = host.FakeScriptingConsole; powerShellHost = host.FakePowerShellHostFactory.FakePowerShellHost; fakeProjectService = host.FakeProjectService; @@ -252,31 +255,72 @@ namespace PackageManagement.Tests.Scripting } [Test] - public void GetProject_ThreeProjectsOpenAndProjectWithNameExists_ReturnsMatchingProject() + public void GetProject_ProjectNameAndPackageSourcePassed_ProjectNameUsedToGetProject() { CreateHost(); + string source = "http://sharpdevelop.net"; + string expectedProjectName = "Test"; - AddProject("One"); - var expectedProject = AddProject("Two"); - AddProject("Three"); + host.GetProject(source, expectedProjectName); - var actualProject = host.GetProject("Two"); + var actualProjectName = fakeSolution.ProjectNamePassedToGetProject; - Assert.AreEqual(expectedProject, actualProject); + Assert.AreEqual(expectedProjectName, actualProjectName); } [Test] - public void GetProject_ProjectNameHasDifferentCase_ReturnsMatchingProjectIgnoringCase() + public void GetProject_ProjectNameAndPackageSourcePassed_PackageSourceUsedToGetProject() { CreateHost(); + string expectedSource = "http://sharpdevelop.net"; - AddProject("One"); - var expectedProject = AddProject("TWO"); - AddProject("Three"); + host.GetProject(expectedSource, "Test"); - var actualProject = host.GetProject("two"); + var actualSource = fakeSolution.PackageSourcePassedToGetProject.Source; - Assert.AreEqual(expectedProject, actualProject); + Assert.AreEqual(expectedSource, actualSource); + } + + [Test] + public void GetProject_ProjectNameAndPackageSourcePassed_ReturnsProject() + { + CreateHost(); + string source = "http://sharpdevelop.net"; + + var project = host.GetProject(source, "Test"); + + var expectedProject = fakeSolution.FakeProject; + + Assert.AreEqual(expectedProject, project); + } + + [Test] + public void GetProject_NullPackageSourcePassed_UsesDefaultSourceToCreateProject() + { + CreateHost(); + var expectedSource = new PackageSource("http://sharpdevelop.net"); + host.ActivePackageSource = expectedSource; + + host.GetProject(null, "Test"); + + var actualSource = fakeSolution.PackageSourcePassedToGetProject; + + Assert.AreEqual(expectedSource, actualSource); + } + + [Test] + public void GetProject_NullProjectPassed_UsesDefaultProjectToCreateProject() + { + CreateHost(); + var source = "http://sharpdevelop.net"; + var project = ProjectHelper.CreateTestProject("Test"); + host.DefaultProject = project; + + host.GetProject(source, null); + + var projectName = fakeSolution.ProjectNamePassedToGetProject; + + Assert.AreEqual("Test", projectName); } } }