diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
index 7d4e6d38a4..f095a34479 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
@@ -5,7 +5,7 @@
Debug
x86
Library
- PackageManagement.Cmdlets
+ ICSharpCode.PackageManagement.Cmdlets
PackageManagement.Cmdlets
v4.0
..\..\..\..\..\..\AddIns\Misc\PackageManagement\
@@ -43,7 +43,12 @@
Configuration\GlobalAssemblyInfo.cs
+
+
+
+
+
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/CmdletTerminatingError.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/CmdletTerminatingError.cs
new file mode 100644
index 0000000000..b23877063d
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/CmdletTerminatingError.cs
@@ -0,0 +1,33 @@
+// 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.Management.Automation;
+
+namespace ICSharpCode.PackageManagement.Cmdlets
+{
+ public class CmdletTerminatingError : ICmdletTerminatingError
+ {
+ ITerminatingCmdlet cmdlet;
+
+ public CmdletTerminatingError(ITerminatingCmdlet cmdlet)
+ {
+ this.cmdlet = cmdlet;
+ }
+
+ public void ThrowNoProjectOpenError()
+ {
+ ErrorRecord error = CreateInvalidOperationErrorRecord("NoProjectOpen");
+ cmdlet.ThrowTerminatingError(error);
+ }
+
+ ErrorRecord CreateInvalidOperationErrorRecord(string errorId)
+ {
+ return new ErrorRecord(
+ new InvalidOperationException(),
+ "NoProjectOpen",
+ ErrorCategory.InvalidOperation,
+ null);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs
index 5b97b1b513..31f4ea929b 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs
@@ -11,14 +11,11 @@ using ICSharpCode.PackageManagement.Scripting;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
-namespace PackageManagement.Cmdlets
+namespace ICSharpCode.PackageManagement.Cmdlets
{
- [Cmdlet(VerbsCommon.Get, "Package", DefaultParameterSetName=ParameterAttribute.AllParameterSets)]
- public class GetPackageCmdlet : PSCmdlet
+ [Cmdlet(VerbsCommon.Get, "Package", DefaultParameterSetName = ParameterAttribute.AllParameterSets)]
+ public class GetPackageCmdlet : PackageManagementCmdlet
{
- IPackageManagementService packageManagementService;
- IPackageManagementConsoleHost consoleHost;
- IErrorRecordFactory errorRecordFactory;
int? skip;
int? take;
@@ -26,18 +23,16 @@ namespace PackageManagement.Cmdlets
: this(
ServiceLocator.PackageManagementService,
ServiceLocator.PackageManagementConsoleHost,
- new ErrorRecordFactory())
+ null)
{
}
public GetPackageCmdlet(
IPackageManagementService packageManagementService,
IPackageManagementConsoleHost consoleHost,
- IErrorRecordFactory errorRecordFactory)
+ ICmdletTerminatingError terminatingError)
+ : base(packageManagementService, consoleHost, terminatingError)
{
- this.packageManagementService = packageManagementService;
- this.consoleHost = consoleHost;
- this.errorRecordFactory = errorRecordFactory;
}
[Alias("Online", "Remote")]
@@ -98,12 +93,6 @@ namespace PackageManagement.Cmdlets
return true;
}
- void ThrowProjectNotOpenTerminatorError()
- {
- var error = errorRecordFactory.CreateNoProjectOpenErrorRecord();
- CmdletThrowTerminatingError(error);
- }
-
protected virtual void CmdletThrowTerminatingError(ErrorRecord errorRecord)
{
ThrowTerminatingError(errorRecord);
@@ -120,7 +109,6 @@ namespace PackageManagement.Cmdlets
}
return GetInstalledPackages();
}
-
IQueryable OrderPackages(IQueryable packages)
{
@@ -148,15 +136,12 @@ namespace PackageManagement.Cmdlets
IPackageRepository CreatePackageRepositoryForActivePackageSource()
{
PackageSource source = GetActivePackageSource();
- return packageManagementService.CreatePackageRepository(source);
+ return PackageManagementService.CreatePackageRepository(source);
}
PackageSource GetActivePackageSource()
{
- if (Source != null) {
- return new PackageSource(Source);
- }
- return consoleHost.ActivePackageSource;
+ return GetActivePackageSource(Source);
}
IQueryable FilterPackages(IQueryable packages)
@@ -170,31 +155,32 @@ namespace PackageManagement.Cmdlets
IQueryable GetUpdatedPackages()
{
- var updatedPackages = new UpdatedPackages(packageManagementService, DefaultProject);
+ var updatedPackages = new UpdatedPackages(PackageManagementService, DefaultProject);
updatedPackages.SearchTerms = Filter;
return updatedPackages.GetUpdatedPackages().AsQueryable();
}
IQueryable GetInstalledPackages()
{
- IPackageRepository repository = CreatePackageRepositoryForActivePackageSource();
- ISharpDevelopProjectManager projectManager = CreateProjectManagerForActiveProject(repository);
+ ISharpDevelopProjectManager projectManager = CreateProjectManagerForActiveProject();
IQueryable packages = projectManager.LocalRepository.GetPackages();
return FilterPackages(packages);
}
- ISharpDevelopProjectManager CreateProjectManagerForActiveProject(IPackageRepository repository)
+ ISharpDevelopProjectManager CreateProjectManagerForActiveProject()
{
- return packageManagementService.CreateProjectManager(repository, DefaultProject);
+ IPackageRepository repository = CreatePackageRepositoryForActivePackageSource();
+ return CreateProjectManagerForActiveProject(repository);
}
- MSBuildBasedProject DefaultProject {
- get { return consoleHost.DefaultProject as MSBuildBasedProject; }
+ ISharpDevelopProjectManager CreateProjectManagerForActiveProject(IPackageRepository repository)
+ {
+ return PackageManagementService.CreateProjectManager(repository, DefaultProject);
}
IQueryable GetRecentPackages()
{
- IQueryable packages = packageManagementService.RecentPackageRepository.GetPackages();
+ IQueryable packages = PackageManagementService.RecentPackageRepository.GetPackages();
return FilterPackages(packages);
}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/ICmdletTerminatingError.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/ICmdletTerminatingError.cs
new file mode 100644
index 0000000000..db61432fca
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/ICmdletTerminatingError.cs
@@ -0,0 +1,12 @@
+// 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.Cmdlets
+{
+ public interface ICmdletTerminatingError
+ {
+ void ThrowNoProjectOpenError();
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IErrorRecordFactory.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/ITerminatingCmdlet.cs
similarity index 64%
rename from src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IErrorRecordFactory.cs
rename to src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/ITerminatingCmdlet.cs
index 684289c4ae..687dfa46fd 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IErrorRecordFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/ITerminatingCmdlet.cs
@@ -4,10 +4,10 @@
using System;
using System.Management.Automation;
-namespace ICSharpCode.PackageManagement.Scripting
+namespace ICSharpCode.PackageManagement.Cmdlets
{
- public interface IErrorRecordFactory
+ public interface ITerminatingCmdlet
{
- ErrorRecord CreateNoProjectOpenErrorRecord();
+ void ThrowTerminatingError(ErrorRecord errorRecord);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs
new file mode 100644
index 0000000000..9205582614
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs
@@ -0,0 +1,80 @@
+// 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.Management.Automation;
+using ICSharpCode.PackageManagement.Scripting;
+using ICSharpCode.SharpDevelop.Project;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement.Cmdlets
+{
+ [Cmdlet(VerbsLifecycle.Install, "Package", DefaultParameterSetName = ParameterAttribute.AllParameterSets)]
+ public class InstallPackageCmdlet : PackageManagementCmdlet
+ {
+ public InstallPackageCmdlet()
+ : this(
+ ServiceLocator.PackageManagementService,
+ ServiceLocator.PackageManagementConsoleHost,
+ null)
+ {
+ }
+
+ public InstallPackageCmdlet(
+ IPackageManagementService packageManagementService,
+ IPackageManagementConsoleHost consoleHost,
+ ICmdletTerminatingError terminatingError)
+ : base(packageManagementService, consoleHost, terminatingError)
+ {
+ }
+
+ [Parameter(Position = 0, Mandatory = true)]
+ public string Id { get; set; }
+
+ [Parameter(Position = 1)]
+ public string ProjectName { get; set; }
+
+ [Parameter(Position = 2)]
+ public Version Version { get; set; }
+
+ [Parameter(Position = 3)]
+ public string Source { get; set; }
+
+ [Parameter]
+ public SwitchParameter IgnoreDependencies { get; set; }
+
+ protected override void ProcessRecord()
+ {
+ ThrowErrorIfProjectNotOpen();
+
+ InstallPackage();
+ }
+
+ void ThrowErrorIfProjectNotOpen()
+ {
+ if (DefaultProject == null) {
+ ThrowProjectNotOpenTerminatorError();
+ }
+ }
+
+ void InstallPackage()
+ {
+ PackageSource packageSource = GetActivePackageSource();
+ MSBuildBasedProject project = GetActiveProject();
+ PackageManagementService.InstallPackage(Id, Version, project, packageSource, IgnoreDependencies.IsPresent);
+ }
+
+ PackageSource GetActivePackageSource()
+ {
+ return GetActivePackageSource(Source);
+ }
+
+ MSBuildBasedProject GetActiveProject()
+ {
+ if (ProjectName != null) {
+ return PackageManagementService.GetProject(ProjectName);
+ }
+ return ConsoleHost.DefaultProject as MSBuildBasedProject;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/PackageManagementCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/PackageManagementCmdlet.cs
new file mode 100644
index 0000000000..39bb73e719
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/PackageManagementCmdlet.cs
@@ -0,0 +1,62 @@
+// 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.Management.Automation;
+using ICSharpCode.PackageManagement.Scripting;
+using ICSharpCode.SharpDevelop.Project;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement.Cmdlets
+{
+ public abstract class PackageManagementCmdlet : PSCmdlet, ITerminatingCmdlet
+ {
+ IPackageManagementService packageManagementService;
+ IPackageManagementConsoleHost consoleHost;
+ ICmdletTerminatingError terminatingError;
+
+ public PackageManagementCmdlet(
+ IPackageManagementService packageManagementService,
+ IPackageManagementConsoleHost consoleHost,
+ ICmdletTerminatingError terminatingError)
+ {
+ this.packageManagementService = packageManagementService;
+ this.consoleHost = consoleHost;
+ this.terminatingError = terminatingError;
+ }
+
+ protected IPackageManagementService PackageManagementService {
+ get { return packageManagementService; }
+ }
+
+ protected IPackageManagementConsoleHost ConsoleHost {
+ get { return consoleHost; }
+ }
+
+ protected MSBuildBasedProject DefaultProject {
+ get { return consoleHost.DefaultProject as MSBuildBasedProject; }
+ }
+
+ protected ICmdletTerminatingError TerminatingError {
+ get {
+ if (terminatingError == null) {
+ terminatingError = new CmdletTerminatingError(this);
+ }
+ return terminatingError;
+ }
+ }
+
+ protected void ThrowProjectNotOpenTerminatorError()
+ {
+ terminatingError.ThrowNoProjectOpenError();
+ }
+
+ protected PackageSource GetActivePackageSource(string source)
+ {
+ if (source != null) {
+ return new PackageSource(source);
+ }
+ return ConsoleHost.ActivePackageSource;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeCmdletTerminatingError.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeCmdletTerminatingError.cs
new file mode 100644
index 0000000000..3c67f217a8
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeCmdletTerminatingError.cs
@@ -0,0 +1,18 @@
+// 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.Cmdlets;
+
+namespace PackageManagement.Cmdlets.Tests.Helpers
+{
+ public class FakeCmdletTerminatingError : ICmdletTerminatingError
+ {
+ public bool IsThrowNoProjectOpenErrorCalled;
+
+ public void ThrowNoProjectOpenError()
+ {
+ IsThrowNoProjectOpenErrorCalled = true;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeErrorRecordFactory.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeErrorRecordFactory.cs
deleted file mode 100644
index 2007084652..0000000000
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeErrorRecordFactory.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// 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.Management.Automation;
-using ICSharpCode.PackageManagement.Scripting;
-
-namespace PackageManagement.Cmdlets.Tests.Helpers
-{
- public class FakeErrorRecordFactory : IErrorRecordFactory
- {
- public ErrorRecord ErrorRecordToReturnFromCreateNoProjectOpenErrorRecord =
- new ErrorRecord(new InvalidOperationException(), "NoProjectOpen", ErrorCategory.InvalidOperation, null);
-
- public ErrorRecord CreateNoProjectOpenErrorRecord()
- {
- return ErrorRecordToReturnFromCreateNoProjectOpenErrorRecord;
- }
- }
-}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeTerminatingCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeTerminatingCmdlet.cs
new file mode 100644
index 0000000000..9ac200f513
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeTerminatingCmdlet.cs
@@ -0,0 +1,19 @@
+// 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.Management.Automation;
+using ICSharpCode.PackageManagement.Cmdlets;
+
+namespace PackageManagement.Cmdlets.Tests.Helpers
+{
+ public class FakeTerminatingCmdlet : ITerminatingCmdlet
+ {
+ public ErrorRecord ErrorRecordPassedToThrowTerminatingError;
+
+ public void ThrowTerminatingError(ErrorRecord errorRecord)
+ {
+ ErrorRecordPassedToThrowTerminatingError = errorRecord;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableGetPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableGetPackageCmdlet.cs
index 3dedc41077..73317dcf70 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableGetPackageCmdlet.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableGetPackageCmdlet.cs
@@ -3,9 +3,7 @@
using System;
using System.Collections.Generic;
-using System.Management.Automation;
-
-using ICSharpCode.PackageManagement;
+using ICSharpCode.PackageManagement.Cmdlets;
using ICSharpCode.PackageManagement.Design;
using NuGet;
using PackageManagement.Tests.Helpers;
@@ -18,14 +16,14 @@ namespace PackageManagement.Cmdlets.Tests.Helpers
public FakeCommandRuntime FakeCommandRuntime;
public List PackagesPassedToWriteObject = new List();
public FakePackageManagementConsoleHost FakePackageManagementConsoleHost;
- public FakeErrorRecordFactory FakeErrorRecordFactory;
+ public FakeCmdletTerminatingError FakeCmdletTerminatingError;
public TestableGetPackageCmdlet()
: this(
new FakePackageManagementService(),
new FakePackageManagementConsoleHost(),
new FakeCommandRuntime(),
- new FakeErrorRecordFactory())
+ new FakeCmdletTerminatingError())
{
}
@@ -33,28 +31,19 @@ namespace PackageManagement.Cmdlets.Tests.Helpers
FakePackageManagementService packageManagementService,
FakePackageManagementConsoleHost consoleHost,
FakeCommandRuntime commandRuntime,
- FakeErrorRecordFactory errorRecordFactory)
- : base(packageManagementService, consoleHost, errorRecordFactory)
+ FakeCmdletTerminatingError terminatingError)
+ : base(packageManagementService, consoleHost, terminatingError)
{
this.FakePackageManagementService = packageManagementService;
this.FakePackageManagementConsoleHost = consoleHost;
this.FakeCommandRuntime = commandRuntime;
this.CommandRuntime = commandRuntime;
- this.FakeErrorRecordFactory = errorRecordFactory;
+ this.FakeCmdletTerminatingError = terminatingError;
}
public void RunProcessRecord()
{
base.ProcessRecord();
}
-
- public bool IsThrowTerminatingErrorCalled { get; set; }
- public ErrorRecord ErrorRecordPassedToThrowTerminatingError;
-
- protected override void CmdletThrowTerminatingError(ErrorRecord errorRecord)
- {
- IsThrowTerminatingErrorCalled = true;
- ErrorRecordPassedToThrowTerminatingError = errorRecord;
- }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableInstallPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableInstallPackageCmdlet.cs
new file mode 100644
index 0000000000..c11fab3663
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableInstallPackageCmdlet.cs
@@ -0,0 +1,41 @@
+// 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.Cmdlets;
+using ICSharpCode.PackageManagement.Design;
+using PackageManagement.Tests.Helpers;
+
+namespace PackageManagement.Cmdlets.Tests.Helpers
+{
+ public class TestableInstallPackageCmdlet : InstallPackageCmdlet
+ {
+ public FakeCmdletTerminatingError FakeCmdletTerminatingError;
+ public FakePackageManagementConsoleHost FakePackageManagementConsoleHost;
+ public FakePackageManagementService FakePackageManagementService;
+
+ public TestableInstallPackageCmdlet()
+ : this(
+ new FakePackageManagementService(),
+ new FakePackageManagementConsoleHost(),
+ new FakeCmdletTerminatingError())
+ {
+ }
+
+ public TestableInstallPackageCmdlet(
+ FakePackageManagementService packageManagementService,
+ FakePackageManagementConsoleHost consoleHost,
+ FakeCmdletTerminatingError cmdletTerminatingError)
+ : base(packageManagementService, consoleHost, cmdletTerminatingError)
+ {
+ this.FakePackageManagementService = packageManagementService;
+ this.FakePackageManagementConsoleHost = consoleHost;
+ this.FakeCmdletTerminatingError = cmdletTerminatingError;
+ }
+
+ public void CallProcessRecord()
+ {
+ base.ProcessRecord();
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj
index dd31e0cbe6..3cb26b405e 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj
@@ -43,10 +43,15 @@
Configuration\GlobalAssemblyInfo.cs
+
-
+
+
+
+
+
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/CmdletTerminatorErrorTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/CmdletTerminatorErrorTests.cs
new file mode 100644
index 0000000000..0a50a74368
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/CmdletTerminatorErrorTests.cs
@@ -0,0 +1,63 @@
+// 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.Management.Automation;
+using ICSharpCode.PackageManagement.Cmdlets;
+using NUnit.Framework;
+using PackageManagement.Cmdlets.Tests.Helpers;
+
+namespace PackageManagement.Cmdlets.Tests
+{
+ [TestFixture]
+ public class CmdletTerminatingErrorTests
+ {
+ CmdletTerminatingError terminatingError;
+ FakeTerminatingCmdlet fakeCmdlet;
+
+ void CreateTerminatingError()
+ {
+ fakeCmdlet = new FakeTerminatingCmdlet();
+ terminatingError = new CmdletTerminatingError(fakeCmdlet);
+ }
+
+ [Test]
+ public void ThrowNoProjectOpenError_NoProjectError_SendsNoProjectErrorToCmdletThrowTerminatingError()
+ {
+ CreateTerminatingError();
+
+ terminatingError.ThrowNoProjectOpenError();
+
+ var actualErrorId = fakeCmdlet.ErrorRecordPassedToThrowTerminatingError.FullyQualifiedErrorId;
+ var expectedErrorId = "NoProjectOpen";
+
+ Assert.AreEqual(expectedErrorId, actualErrorId);
+ }
+
+ [Test]
+ public void ThrowNoProjectOpenError_NoProjectError_ErrorRecordExceptionIsInvalidOperationException()
+ {
+ CreateTerminatingError();
+
+ terminatingError.ThrowNoProjectOpenError();
+
+ var ex = fakeCmdlet.ErrorRecordPassedToThrowTerminatingError.Exception;
+ bool result = ex is InvalidOperationException;
+
+ Assert.IsTrue(result);
+ }
+
+ [Test]
+ public void ThrowNoProjectOpenError_NoProjectError_ErrorRecordCategoryIsInvalidOperation()
+ {
+ CreateTerminatingError();
+
+ terminatingError.ThrowNoProjectOpenError();
+
+ var actualCategory = fakeCmdlet.ErrorRecordPassedToThrowTerminatingError.CategoryInfo.Category;
+ var expectedCategory = ErrorCategory.InvalidOperation;
+
+ Assert.AreEqual(expectedCategory, actualCategory);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs
index c1a60c7415..93dc530a81 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs
@@ -12,21 +12,20 @@ using PackageManagement.Tests.Helpers;
namespace PackageManagement.Cmdlets.Tests
{
[TestFixture]
- public class GetPackageCmdletTests
+ public class GetPackageCmdletTests : PackageManagementCmdletTests
{
TestableGetPackageCmdlet cmdlet;
- FakePackageManagementService packageManagementService;
- FakePackageManagementConsoleHost consoleHost;
- FakeCommandRuntime commandRuntime;
- FakeErrorRecordFactory errorRecordFactory;
+ FakePackageManagementService fakePackageManagementService;
+ FakeCommandRuntime fakeCommandRuntime;
+ FakeCmdletTerminatingError fakeTerminatingError;
void CreateCmdlet()
{
cmdlet = new TestableGetPackageCmdlet();
- packageManagementService = cmdlet.FakePackageManagementService;
- consoleHost = cmdlet.FakePackageManagementConsoleHost;
- commandRuntime = cmdlet.FakeCommandRuntime;
- errorRecordFactory = cmdlet.FakeErrorRecordFactory;
+ fakePackageManagementService = cmdlet.FakePackageManagementService;
+ fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost;
+ fakeCommandRuntime = cmdlet.FakeCommandRuntime;
+ fakeTerminatingError = cmdlet.FakeCmdletTerminatingError;
}
void RunCmdlet()
@@ -44,28 +43,15 @@ namespace PackageManagement.Cmdlets.Tests
cmdlet.Updates = new SwitchParameter(true);
}
- TestableProject AddDefaultProjectToConsoleHost()
- {
- var project = ProjectHelper.CreateTestProject();
- consoleHost.DefaultProject = project;
- return project;
- }
-
- PackageSource AddPackageSourceToConsoleHost()
- {
- var source = new PackageSource("Test");
- consoleHost.ActivePackageSource = source;
- return source;
- }
-
FakePackage AddPackageToProjectManagerLocalRepository(string version)
{
return AddPackageToProjectManagerLocalRepository("Test", version);
}
+
FakePackage AddPackageToProjectManagerLocalRepository(string id, string version)
{
var package = FakePackage.CreatePackageWithVersion(id, version);
- packageManagementService
+ fakePackageManagementService
.FakeProjectManagerToReturnFromCreateProjectManager
.FakeLocalRepository
.FakePackages.Add(package);
@@ -79,7 +65,7 @@ namespace PackageManagement.Cmdlets.Tests
FakePackage AddPackageToAggregateRepository(string id, string version)
{
- return packageManagementService.AddFakePackageWithVersionToAggregrateRepository(id, version);
+ return fakePackageManagementService.AddFakePackageWithVersionToAggregrateRepository(id, version);
}
void SetFilterParameter(string filter)
@@ -111,13 +97,13 @@ namespace PackageManagement.Cmdlets.Tests
public void ProcessRecord_ListAvailablePackagesWhenDefaultPackageSourceHasOnePackage_OutputIsPackagesFromPackageSourceRepository()
{
CreateCmdlet();
- var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
+ var repository = fakePackageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
repository.AddOneFakePackage("Test");
EnableListAvailableParameter();
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = repository.FakePackages;
CollectionAssert.AreEqual(expectedPackages, actualPackages);
@@ -127,7 +113,7 @@ namespace PackageManagement.Cmdlets.Tests
public void ProcessRecord_ListAvailablePackagesWhenDefaultPackageSourceHasThreePackages_OutputIsPackagesFromPackageSourceRepository()
{
CreateCmdlet();
- var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
+ var repository = fakePackageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
repository.AddOneFakePackage("A");
repository.AddOneFakePackage("B");
repository.AddOneFakePackage("C");
@@ -135,7 +121,7 @@ namespace PackageManagement.Cmdlets.Tests
EnableListAvailableParameter();
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = repository.FakePackages;
CollectionAssert.AreEqual(expectedPackages, actualPackages);
@@ -145,14 +131,14 @@ namespace PackageManagement.Cmdlets.Tests
public void ProcessRecord_ListAvailablePackagesWhenDefaultPackageSourceHasTwoPackages_PackagesAreSortedById()
{
CreateCmdlet();
- var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
+ var repository = fakePackageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
var packageB = repository.AddOneFakePackage("B");
var packageA = repository.AddOneFakePackage("A");
EnableListAvailableParameter();
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
packageA,
packageB
@@ -170,7 +156,7 @@ namespace PackageManagement.Cmdlets.Tests
EnableListAvailableParameter();
RunCmdlet();
- var actualSource = packageManagementService.PackageSourcePassedToCreatePackageRepository;
+ var actualSource = fakePackageManagementService.PackageSourcePassedToCreatePackageRepository;
Assert.AreEqual(source, actualSource);
}
@@ -180,13 +166,13 @@ namespace PackageManagement.Cmdlets.Tests
{
CreateCmdlet();
AddDefaultProjectToConsoleHost();
- FakeProjectManager projectManager = packageManagementService.FakeProjectManagerToReturnFromCreateProjectManager;
+ FakeProjectManager projectManager = fakePackageManagementService.FakeProjectManagerToReturnFromCreateProjectManager;
projectManager.FakeLocalRepository.AddOneFakePackage("One");
projectManager.FakeLocalRepository.AddOneFakePackage("Two");
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = projectManager.FakeLocalRepository.FakePackages;
Assert.AreEqual(expectedPackages, actualPackages);
@@ -200,7 +186,7 @@ namespace PackageManagement.Cmdlets.Tests
RunCmdlet();
- var actualSource = packageManagementService.PackageSourcePassedToCreatePackageRepository;
+ var actualSource = fakePackageManagementService.PackageSourcePassedToCreatePackageRepository;
Assert.AreEqual(source, actualSource);
}
@@ -213,8 +199,8 @@ namespace PackageManagement.Cmdlets.Tests
RunCmdlet();
- var actualRepository = packageManagementService.PackageRepositoryPassedToCreateProjectManager;
- var expectedRepository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
+ var actualRepository = fakePackageManagementService.PackageRepositoryPassedToCreateProjectManager;
+ var expectedRepository = fakePackageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
Assert.AreEqual(expectedRepository, actualRepository);
}
@@ -228,7 +214,7 @@ namespace PackageManagement.Cmdlets.Tests
RunCmdlet();
- var actualProject = packageManagementService.ProjectPassedToCreateProjectManager;
+ var actualProject = fakePackageManagementService.ProjectPassedToCreateProjectManager;
Assert.AreEqual(project, actualProject);
}
@@ -244,7 +230,7 @@ namespace PackageManagement.Cmdlets.Tests
EnableUpdatesParameter();
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
updatedPackage
};
@@ -260,7 +246,7 @@ namespace PackageManagement.Cmdlets.Tests
EnableUpdatesParameter();
RunCmdlet();
- var actualProject = packageManagementService.ProjectPassedToCreateProjectManager;
+ var actualProject = fakePackageManagementService.ProjectPassedToCreateProjectManager;
Assert.AreEqual(project, actualProject);
}
@@ -273,8 +259,8 @@ namespace PackageManagement.Cmdlets.Tests
EnableUpdatesParameter();
RunCmdlet();
- var actualRepository = packageManagementService.PackageRepositoryPassedToCreateProjectManager;
- var expectedRepository = packageManagementService.FakeAggregateRepository;
+ var actualRepository = fakePackageManagementService.PackageRepositoryPassedToCreateProjectManager;
+ var expectedRepository = fakePackageManagementService.FakeAggregateRepository;
Assert.AreEqual(expectedRepository, actualRepository);
}
@@ -283,7 +269,7 @@ namespace PackageManagement.Cmdlets.Tests
public void ProcessRecord_ListAvailablePackagesAndFilterResults_PackagesReturnedMatchFilter()
{
CreateCmdlet();
- var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
+ var repository = fakePackageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
repository.AddOneFakePackage("A");
var package = repository.AddOneFakePackage("B");
repository.AddOneFakePackage("C");
@@ -292,7 +278,7 @@ namespace PackageManagement.Cmdlets.Tests
SetFilterParameter("B");
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
package
};
@@ -305,14 +291,14 @@ namespace PackageManagement.Cmdlets.Tests
{
CreateCmdlet();
AddPackageSourceToConsoleHost();
- FakeProjectManager projectManager = packageManagementService.FakeProjectManagerToReturnFromCreateProjectManager;
+ FakeProjectManager projectManager = fakePackageManagementService.FakeProjectManagerToReturnFromCreateProjectManager;
projectManager.FakeLocalRepository.AddOneFakePackage("A");
var package = projectManager.FakeLocalRepository.AddOneFakePackage("B");
SetFilterParameter("B");
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
package
};
@@ -334,7 +320,7 @@ namespace PackageManagement.Cmdlets.Tests
SetFilterParameter("B");
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
updatedPackage
};
@@ -346,14 +332,14 @@ namespace PackageManagement.Cmdlets.Tests
public void ProcessRecord_ListAvailablePackagesWhenPackageSourceParameterSpecified_PackageRepositoryCreatedForPackageSourceSpecifiedByParameter()
{
CreateCmdlet();
- var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
+ var repository = fakePackageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
SetSourceParameter("http://sharpdevelop.com/packages");
EnableListAvailableParameter();
RunCmdlet();
- var actualPackageSource = packageManagementService.PackageSourcePassedToCreatePackageRepository;
- var expectedPackageSource = new PackageSource("http://sharpdevelop.com/packages");
+ var actualPackageSource = fakePackageManagementService.PackageSourcePassedToCreatePackageRepository.Source;
+ var expectedPackageSource = "http://sharpdevelop.com/packages";
Assert.AreEqual(expectedPackageSource, actualPackageSource);
}
@@ -366,8 +352,8 @@ namespace PackageManagement.Cmdlets.Tests
RunCmdlet();
- var actualPackageSource = packageManagementService.PackageSourcePassedToCreatePackageRepository;
- var expectedPackageSource = new PackageSource("http://test");
+ var actualPackageSource = fakePackageManagementService.PackageSourcePassedToCreatePackageRepository.Source;
+ var expectedPackageSource = "http://test";
Assert.AreEqual(expectedPackageSource, actualPackageSource);
}
@@ -377,13 +363,13 @@ namespace PackageManagement.Cmdlets.Tests
{
CreateCmdlet();
- var recentPackageRepository = packageManagementService.FakeRecentPackageRepository;
+ var recentPackageRepository = fakePackageManagementService.FakeRecentPackageRepository;
recentPackageRepository.AddOneFakePackage("A");
EnableRecentParameter();
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = recentPackageRepository.FakePackages;
Assert.AreEqual(expectedPackages, actualPackages);
@@ -394,7 +380,7 @@ namespace PackageManagement.Cmdlets.Tests
{
CreateCmdlet();
- var recentPackageRepository = packageManagementService.FakeRecentPackageRepository;
+ var recentPackageRepository = fakePackageManagementService.FakeRecentPackageRepository;
recentPackageRepository.AddOneFakePackage("A");
var packageB = recentPackageRepository.AddOneFakePackage("B");
@@ -402,7 +388,7 @@ namespace PackageManagement.Cmdlets.Tests
SetFilterParameter("B");
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
packageB
};
@@ -415,7 +401,7 @@ namespace PackageManagement.Cmdlets.Tests
{
CreateCmdlet();
AddPackageSourceToConsoleHost();
- FakeProjectManager projectManager = packageManagementService.FakeProjectManagerToReturnFromCreateProjectManager;
+ FakeProjectManager projectManager = fakePackageManagementService.FakeProjectManagerToReturnFromCreateProjectManager;
var packageA = projectManager.FakeLocalRepository.AddOneFakePackage("A");
var packageB = projectManager.FakeLocalRepository.AddOneFakePackage("B");
var packageC = projectManager.FakeLocalRepository.AddOneFakePackage("C");
@@ -423,7 +409,7 @@ namespace PackageManagement.Cmdlets.Tests
SetFilterParameter("B C");
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
packageB,
packageC
@@ -440,7 +426,7 @@ namespace PackageManagement.Cmdlets.Tests
RunCmdlet();
- Assert.IsTrue(cmdlet.IsThrowTerminatingErrorCalled);
+ Assert.IsTrue(fakeTerminatingError.IsThrowNoProjectOpenErrorCalled);
}
[Test]
@@ -452,21 +438,7 @@ namespace PackageManagement.Cmdlets.Tests
RunCmdlet();
- Assert.IsFalse(cmdlet.IsThrowTerminatingErrorCalled);
- }
-
- [Test]
- public void ProcessRecord_RetrieveUpdatesWhenNoProjectIsOpen_ThrowsNoProjectOpenTerminatingError()
- {
- CreateCmdlet();
- EnableUpdatesParameter();
-
- RunCmdlet();
-
- var actual = cmdlet.ErrorRecordPassedToThrowTerminatingError;
- var expected = errorRecordFactory.ErrorRecordToReturnFromCreateNoProjectOpenErrorRecord;
-
- Assert.AreEqual(expected, actual);
+ Assert.IsFalse(fakeTerminatingError.IsThrowNoProjectOpenErrorCalled);
}
[Test]
@@ -475,10 +447,7 @@ namespace PackageManagement.Cmdlets.Tests
CreateCmdlet();
RunCmdlet();
- var actual = cmdlet.ErrorRecordPassedToThrowTerminatingError;
- var expected = errorRecordFactory.ErrorRecordToReturnFromCreateNoProjectOpenErrorRecord;
-
- Assert.AreEqual(expected, actual);
+ Assert.IsTrue(fakeTerminatingError.IsThrowNoProjectOpenErrorCalled);
}
[Test]
@@ -488,9 +457,7 @@ namespace PackageManagement.Cmdlets.Tests
EnableListAvailableParameter();
RunCmdlet();
- bool result = cmdlet.IsThrowTerminatingErrorCalled;
-
- Assert.IsFalse(result);
+ Assert.IsFalse(fakeTerminatingError.IsThrowNoProjectOpenErrorCalled);
}
[Test]
@@ -500,16 +467,14 @@ namespace PackageManagement.Cmdlets.Tests
EnableRecentParameter();
RunCmdlet();
- bool result = cmdlet.IsThrowTerminatingErrorCalled;
-
- Assert.IsFalse(result);
+ Assert.IsFalse(fakeTerminatingError.IsThrowNoProjectOpenErrorCalled);
}
[Test]
public void ProcessRecord_ListAvailableAndSkipFirstTwoPackages_ReturnsAllPackagesExceptionFirstTwo()
{
CreateCmdlet();
- var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
+ var repository = fakePackageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
repository.AddOneFakePackage("A");
repository.AddOneFakePackage("B");
var packageC = repository.AddOneFakePackage("C");
@@ -518,7 +483,7 @@ namespace PackageManagement.Cmdlets.Tests
SetSkipParameter(2);
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
packageC
};
@@ -539,7 +504,7 @@ namespace PackageManagement.Cmdlets.Tests
public void ProcessRecord_ListAvailableAndTakeTwo_ReturnsFirstTwoPackages()
{
CreateCmdlet();
- var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
+ var repository = fakePackageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
var packageA = repository.AddOneFakePackage("A");
var packageB = repository.AddOneFakePackage("B");
repository.AddOneFakePackage("C");
@@ -548,7 +513,7 @@ namespace PackageManagement.Cmdlets.Tests
SetTakeParameter(2);
RunCmdlet();
- var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
+ var actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
packageA,
packageB
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs
new file mode 100644
index 0000000000..7897102f27
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs
@@ -0,0 +1,231 @@
+// 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.Management.Automation;
+using ICSharpCode.PackageManagement.Design;
+using ICSharpCode.PackageManagement.Scripting;
+using NuGet;
+using NUnit.Framework;
+using PackageManagement.Cmdlets.Tests.Helpers;
+using PackageManagement.Tests.Helpers;
+
+namespace PackageManagement.Cmdlets.Tests
+{
+ [TestFixture]
+ public class InstallPackageCmdletTests : PackageManagementCmdletTests
+ {
+ TestableInstallPackageCmdlet cmdlet;
+ FakeCmdletTerminatingError fakeTerminatingError;
+ FakePackageManagementService fakePackageManagementService;
+
+ void CreateCmdletWithoutActiveProject()
+ {
+ cmdlet = new TestableInstallPackageCmdlet();
+ fakeTerminatingError = cmdlet.FakeCmdletTerminatingError;
+ fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost;
+ fakePackageManagementService = cmdlet.FakePackageManagementService;
+ }
+
+ void CreateCmdletWithActivePackageSourceAndProject()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddPackageSourceToConsoleHost();
+ AddDefaultProjectToConsoleHost();
+ }
+
+ void RunCmdlet()
+ {
+ cmdlet.CallProcessRecord();
+ }
+
+ void SetIdParameter(string id)
+ {
+ cmdlet.Id = id;
+ }
+
+ void EnableIgnoreDependenciesParameter()
+ {
+ cmdlet.IgnoreDependencies = new SwitchParameter(true);
+ }
+
+ void SetSourceParameter(string source)
+ {
+ cmdlet.Source = source;
+ }
+
+ void SetVersionParameter(Version version)
+ {
+ cmdlet.Version = version;
+ }
+
+ void SetProjectNameParameter(string name)
+ {
+ cmdlet.ProjectName = name;
+ }
+
+ [Test]
+ public void ProcessRecord_NoActiveProject_ThrowsNoProjectOpenTerminatingError()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddPackageSourceToConsoleHost();
+ SetIdParameter("Test");
+ RunCmdlet();
+
+ Assert.IsTrue(fakeTerminatingError.IsThrowNoProjectOpenErrorCalled);
+ }
+
+ [Test]
+ public void ProcessRecord_ProjectIsActiveInConsoleHost_NoTerminatingErrorThrown()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+
+ SetIdParameter("Test");
+ RunCmdlet();
+
+ Assert.IsFalse(fakeTerminatingError.IsThrowNoProjectOpenErrorCalled);
+ }
+
+ [Test]
+ public void ProcessRecord_PackageIdSpecified_PackageIdUsedToInstallPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+
+ SetIdParameter("Test");
+ RunCmdlet();
+
+ var actualPackageId = fakePackageManagementService.PackageIdPassedToInstallPackage;
+
+ Assert.AreEqual("Test", actualPackageId);
+ }
+
+ [Test]
+ public void ProcessRecord_PackageIdSpecified_ActivePackageSourceUsedToInstallPackage()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddDefaultProjectToConsoleHost();
+ var packageSource = AddPackageSourceToConsoleHost();
+ SetIdParameter("Test");
+ RunCmdlet();
+
+ var actualPackageSource = fakePackageManagementService.PackageSourcePassedToInstallPackage;
+
+ Assert.AreEqual(packageSource, actualPackageSource);
+ }
+
+ [Test]
+ public void ProcessRecord_PackageIdSpecified_ActiveProjectUsedToInstallPackage()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddPackageSourceToConsoleHost();
+ var project = AddDefaultProjectToConsoleHost();
+ SetIdParameter("Test");
+ RunCmdlet();
+
+ var actualProject = fakePackageManagementService.ProjectPassedToInstallPackage;
+
+ Assert.AreEqual(project, actualProject);
+ }
+
+ [Test]
+ public void ProcessRecord_IgnoreDependenciesParameterSet_IgnoreDependenciesIsTrueWhenInstallingPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+
+ SetIdParameter("Test");
+ EnableIgnoreDependenciesParameter();
+ RunCmdlet();
+
+ bool result = fakePackageManagementService.IgnoreDependenciesPassedToInstallPackage;
+
+ Assert.IsTrue(result);
+ }
+
+ [Test]
+ public void ProcessRecord_IgnoreDependenciesParameterNotSet_IgnoreDependenciesIsFalseWhenInstallingPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+
+ SetIdParameter("Test");
+ RunCmdlet();
+
+ bool result = fakePackageManagementService.IgnoreDependenciesPassedToInstallPackage;
+
+ Assert.IsFalse(result);
+ }
+
+ [Test]
+ public void ProcessRecord_SourceParameterSet_CustomSourceUsedWhenInstallingPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+
+ SetIdParameter("Test");
+ SetSourceParameter("http://sharpdevelop.net/packages");
+ RunCmdlet();
+
+ var expected = "http://sharpdevelop.net/packages";
+ var actual = fakePackageManagementService.PackageSourcePassedToInstallPackage.Source;
+
+ Assert.AreEqual(expected, actual);
+ }
+
+ [Test]
+ public void ProcessRecord_PackageVersionParameterSet_VersionUsedWhenInstallingPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+
+ SetIdParameter("Test");
+ var version = new Version("1.0.1");
+ SetVersionParameter(version);
+ RunCmdlet();
+
+ var actualVersion = fakePackageManagementService.VersionPassedToInstallPackage;
+
+ Assert.AreEqual(version, actualVersion);
+ }
+
+ [Test]
+ public void ProcessRecord_PackageVersionParameterNotSet_VersionUsedWhenInstallingPackageIsNull()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+
+ SetIdParameter("Test");
+ RunCmdlet();
+
+ var actualVersion = fakePackageManagementService.VersionPassedToInstallPackage;
+
+ Assert.IsNull(actualVersion);
+ }
+
+ [Test]
+ public void ProcessRecord_ProjectNameSpecified_ProjectMatchingProjectNameUsedWhenInstallingPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ fakePackageManagementService.FakeProjectToReturnFromGetProject = ProjectHelper.CreateTestProject();
+
+ SetIdParameter("Test");
+ SetProjectNameParameter("MyProject");
+ RunCmdlet();
+
+ var actualProject = fakePackageManagementService.ProjectPassedToInstallPackage;
+ var expectedProject = fakePackageManagementService.FakeProjectToReturnFromGetProject;
+
+ Assert.AreEqual(expectedProject, actualProject);
+ }
+
+ [Test]
+ public void ProcessRecord_ProjectNameSpecified_ProjectNameUsedToFindProject()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+
+ SetIdParameter("Test");
+ SetProjectNameParameter("MyProject");
+ RunCmdlet();
+
+ var actual = fakePackageManagementService.NamePassedToGetProject;
+ var expected = "MyProject";
+
+ Assert.AreEqual(expected, actual);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/PackageManagementCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/PackageManagementCmdletTests.cs
new file mode 100644
index 0000000000..ca279ee62d
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/PackageManagementCmdletTests.cs
@@ -0,0 +1,24 @@
+// 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 NuGet;
+using PackageManagement.Tests.Helpers;
+
+namespace PackageManagement.Cmdlets.Tests
+{
+ public abstract class PackageManagementCmdletTests
+ {
+ protected FakePackageManagementConsoleHost fakeConsoleHost;
+
+ protected TestableProject AddDefaultProjectToConsoleHost()
+ {
+ return fakeConsoleHost.AddFakeDefaultProject();
+ }
+
+ protected PackageSource AddPackageSourceToConsoleHost()
+ {
+ return fakeConsoleHost.AddTestPackageSource();
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
index a1546fed49..71c1f27a92 100644
--- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
+++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
@@ -85,6 +85,7 @@
+
@@ -94,9 +95,11 @@
+
+
@@ -140,8 +143,6 @@
Code
-
-
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProjectService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProjectService.cs
index 3f286b0941..25c0d0d0d0 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProjectService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProjectService.cs
@@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.PackageManagement;
@@ -51,5 +52,27 @@ namespace ICSharpCode.PackageManagement.Design
SolutionFolderRemoved(this, new SolutionFolderEventArgs(solutionFolder));
}
}
+
+ public List OpenProjects = new List();
+
+ public void AddFakeProject(IProject project)
+ {
+ OpenProjects.Add(project);
+ }
+
+ public IEnumerable GetOpenProjects()
+ {
+ return OpenProjects;
+ }
+
+ public void AddProjectItem(IProject project, ProjectItem item)
+ {
+ ProjectService.AddProjectItem(project, item);
+ }
+
+ public void Save(IProject project)
+ {
+ project.Save();
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs
index d6da63c0e9..7c4c84f454 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs
@@ -166,6 +166,14 @@ namespace ICSharpCode.PackageManagement.Design
return FakeProjectManagerToReturnFromCreateProjectManager;
}
+ public FakePackageManager FakePackageManagerToReturnFromCreatePackageManagerForActiveProject =
+ new FakePackageManager();
+
+ public virtual ISharpDevelopPackageManager CreatePackageManagerForActiveProject()
+ {
+ return FakePackageManagerToReturnFromCreatePackageManagerForActiveProject;
+ }
+
public FakePackage AddFakePackageWithVersionToAggregrateRepository(string version)
{
return AddFakePackageWithVersionToAggregrateRepository("Test", version);
@@ -177,5 +185,34 @@ namespace ICSharpCode.PackageManagement.Design
FakeAggregateRepository.FakePackages.Add(package);
return package;
}
+
+ public string PackageIdPassedToInstallPackage;
+ public PackageSource PackageSourcePassedToInstallPackage;
+ public MSBuildBasedProject ProjectPassedToInstallPackage;
+ public bool IgnoreDependenciesPassedToInstallPackage;
+ public Version VersionPassedToInstallPackage;
+
+ public void InstallPackage(
+ string packageId,
+ Version version,
+ MSBuildBasedProject project,
+ PackageSource packageSource,
+ bool ignoreDependencies)
+ {
+ PackageIdPassedToInstallPackage = packageId;
+ VersionPassedToInstallPackage = version;
+ ProjectPassedToInstallPackage = project;
+ PackageSourcePassedToInstallPackage = packageSource;
+ IgnoreDependenciesPassedToInstallPackage = ignoreDependencies;
+ }
+
+ public MSBuildBasedProject FakeProjectToReturnFromGetProject;
+ public string NamePassedToGetProject;
+
+ public MSBuildBasedProject GetProject(string name)
+ {
+ NamePassedToGetProject = name;
+ return FakeProjectToReturnFromGetProject;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs
similarity index 85%
rename from src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManager.cs
rename to src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs
index d4945284a8..a701aa76b0 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManager.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs
@@ -4,10 +4,9 @@
using System;
using System.Collections.Generic;
using ICSharpCode.PackageManagement;
-using ICSharpCode.PackageManagement.Design;
using NuGet;
-namespace PackageManagement.Tests.Helpers
+namespace ICSharpCode.PackageManagement.Design
{
public class FakePackageManager : ISharpDevelopPackageManager
{
@@ -35,7 +34,6 @@ namespace PackageManagement.Tests.Helpers
PackagePassedToInstallPackage,
IgnoreDependenciesPassedToInstallPackage);
}
-
}
#pragma warning disable 67
@@ -63,13 +61,6 @@ namespace PackageManagement.Tests.Helpers
ProjectManager = FakeProjectManager;
}
- public void InstallPackage(IPackage package)
- {
- LoggerSetBeforeInstallPackageCalled = Logger;
-
- InstallPackage(package, false);
- }
-
public void InstallPackage(IPackage package, bool ignoreDependencies)
{
LoggerSetBeforeInstallPackageCalled = Logger;
@@ -115,7 +106,7 @@ namespace PackageManagement.Tests.Helpers
throw new NotImplementedException();
}
- public void InstallPackage(IPackage package, IEnumerable operations)
+ public void InstallPackage(IPackage package, IEnumerable operations, bool ignoreDependencies)
{
LoggerSetBeforeInstallPackageCalled = Logger;
@@ -125,7 +116,20 @@ namespace PackageManagement.Tests.Helpers
ParametersPassedToInstallPackage.PackagePassedToInstallPackage = package;
ParametersPassedToInstallPackage.PackageOperationsPassedToInstallPackage = operations;
+ IgnoreDependenciesPassedToInstallPackage = ignoreDependencies;
+
IsRefreshProjectBrowserCalledWhenInstallPackageCalled = FakeProjectService.IsRefreshProjectBrowserCalled;
}
+
+ public List PackageOperationsToReturnFromGetInstallPackageOperations = new List();
+ public IPackage PackagePassedToGetInstallPackageOperations;
+ public bool IgnoreDependenciesPassedToGetInstallPackageOperations;
+
+ public IEnumerable GetInstallPackageOperations(IPackage package, bool ignoreDependencies)
+ {
+ PackagePassedToGetInstallPackageOperations = package;
+ IgnoreDependenciesPassedToGetInstallPackageOperations = ignoreDependencies;
+ return PackageOperationsToReturnFromGetInstallPackageOperations;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProjectService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProjectService.cs
index cc6e83cadd..e14206984f 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProjectService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProjectService.cs
@@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement
@@ -17,5 +18,9 @@ namespace ICSharpCode.PackageManagement
event EventHandler SolutionLoaded;
void RefreshProjectBrowser();
+ void AddProjectItem(IProject project, ProjectItem item);
+ void Save(IProject project);
+
+ IEnumerable GetOpenProjects();
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs
index d1b5993e21..e3100429bb 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs
@@ -16,13 +16,23 @@ namespace ICSharpCode.PackageManagement
IPackageRepository CreateAggregatePackageRepository();
IPackageRepository CreatePackageRepository(PackageSource source);
ISharpDevelopProjectManager CreateProjectManager(IPackageRepository repository, MSBuildBasedProject project);
+ ISharpDevelopPackageManager CreatePackageManagerForActiveProject();
IPackageRepository ActivePackageRepository { get; }
IProjectManager ActiveProjectManager { get; }
IPackageRepository RecentPackageRepository { get; }
void InstallPackage(IPackageRepository repository, IPackage package, IEnumerable operations);
+ void InstallPackage(
+ string packageId,
+ Version version,
+ MSBuildBasedProject project,
+ PackageSource packageSource,
+ bool ignoreDependencies);
+
void UninstallPackage(IPackageRepository repository, IPackage package);
+
+ MSBuildBasedProject GetProject(string name);
PackageManagementOptions Options { get; }
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageOperationResolverFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageOperationResolverFactory.cs
new file mode 100644
index 0000000000..be8d6d7e8b
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageOperationResolverFactory.cs
@@ -0,0 +1,17 @@
+// 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 NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public interface IPackageOperationResolverFactory
+ {
+ IPackageOperationResolver CreateInstallPackageOperationResolver(
+ IPackageRepository localRepository,
+ IPackageRepository sourceRepository,
+ ILogger logger,
+ bool ignoreDependencies);
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs
index 1e676c48f0..27b63b66ac 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs
@@ -10,8 +10,9 @@ namespace ICSharpCode.PackageManagement
public interface ISharpDevelopPackageManager : IPackageManager
{
ISharpDevelopProjectManager ProjectManager { get; }
- void InstallPackage(IPackage package);
- void InstallPackage(IPackage package, IEnumerable operations);
+
+ void InstallPackage(IPackage package, IEnumerable operations, bool ignoreDependencies);
void UninstallPackage(IPackage package);
+ IEnumerable GetInstallPackageOperations(IPackage package, bool ignoreDependencies);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProjectService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProjectService.cs
index 5c031d7758..a848f1dbb9 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProjectService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProjectService.cs
@@ -2,6 +2,8 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using System.Collections.Generic;
+using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Project.Commands;
@@ -19,8 +21,41 @@ namespace ICSharpCode.PackageManagement
public void RefreshProjectBrowser()
{
- var refreshCommand = new RefreshProjectBrowser();
- refreshCommand.Run();
+ if (WorkbenchSingleton.InvokeRequired) {
+ WorkbenchSingleton.SafeThreadAsyncCall(RefreshProjectBrowser);
+ } else {
+ var refreshCommand = new RefreshProjectBrowser();
+ refreshCommand.Run();
+ }
+ }
+
+ public IEnumerable GetOpenProjects()
+ {
+ Solution solution = OpenSolution;
+ if (solution != null) {
+ return solution.Projects;
+ }
+ return new IProject[0];
+ }
+
+ public void AddProjectItem(IProject project, ProjectItem item)
+ {
+ if (WorkbenchSingleton.InvokeRequired) {
+ Action action = AddProjectItem;
+ WorkbenchSingleton.SafeThreadCall(action, project, item);
+ } else {
+ ProjectService.AddProjectItem(project, item);
+ }
+ }
+
+ public void Save(IProject project)
+ {
+ if (WorkbenchSingleton.InvokeRequired) {
+ Action action = Save;
+ WorkbenchSingleton.SafeThreadCall(action, project);
+ } else {
+ project.Save();
+ }
}
public event ProjectEventHandler ProjectAdded {
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
index d71f9ac518..dd7746a95a 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
@@ -84,7 +84,7 @@ namespace ICSharpCode.PackageManagement
}
}
- public IPackageRepository CreateRecentPackageRepository()
+ IPackageRepository CreateRecentPackageRepository()
{
recentPackageRepository = new RecentPackageRepository(this);
return recentPackageRepository;
@@ -115,9 +115,19 @@ namespace ICSharpCode.PackageManagement
return packageManager.ProjectManager;
}
+ public ISharpDevelopPackageManager CreatePackageManagerForActiveProject()
+ {
+ return CreatePackageManager(ActivePackageRepository);
+ }
+
ISharpDevelopPackageManager CreatePackageManager(IPackageRepository packageRepository)
{
MSBuildBasedProject project = projectService.CurrentProject as MSBuildBasedProject;
+ return CreatePackageManager(packageRepository, project);
+ }
+
+ ISharpDevelopPackageManager CreatePackageManager(IPackageRepository packageRepository, MSBuildBasedProject project)
+ {
ISharpDevelopPackageManager packageManager = packageManagerFactory.CreatePackageManager(packageRepository, project);
ConfigureLogger(packageManager);
return packageManager;
@@ -125,7 +135,7 @@ namespace ICSharpCode.PackageManagement
public ISharpDevelopProjectManager CreateProjectManager(IPackageRepository repository, MSBuildBasedProject project)
{
- ISharpDevelopPackageManager packageManager = packageManagerFactory.CreatePackageManager(repository, project);
+ ISharpDevelopPackageManager packageManager = CreatePackageManager(repository, project);
return packageManager.ProjectManager;
}
@@ -145,12 +155,56 @@ namespace ICSharpCode.PackageManagement
IEnumerable operations)
{
ISharpDevelopPackageManager packageManager = CreatePackageManager(packageRepository);
- packageManager.InstallPackage(package, operations);
+ bool ignoreDependencies = false;
+ InstallPackage(packageManager, package, operations, ignoreDependencies);
+ }
+
+ void InstallPackage(
+ IPackageRepository packageRepository,
+ IPackage package,
+ IEnumerable operations,
+ bool ignoreDependencies)
+ {
+ ISharpDevelopPackageManager packageManager = CreatePackageManager(packageRepository);
+ InstallPackage(packageManager, package, operations, ignoreDependencies);
+ }
+
+ void InstallPackage(
+ ISharpDevelopPackageManager packageManager,
+ IPackage package,
+ IEnumerable operations,
+ bool ignoreDependencies)
+ {
+ packageManager.InstallPackage(package, operations, ignoreDependencies);
projectService.RefreshProjectBrowser();
RecentPackageRepository.AddPackage(package);
OnPackageInstalled();
}
+ public void InstallPackage(
+ string packageId,
+ Version version,
+ MSBuildBasedProject project,
+ PackageSource packageSource,
+ bool ignoreDependencies)
+ {
+ ISharpDevelopPackageManager packageManager = CreatePackageManager(packageSource, project);
+ IPackage package = packageManager.SourceRepository.FindPackage(packageId, version);
+ InstallPackage(packageManager, package, ignoreDependencies);
+ }
+
+ void InstallPackage(ISharpDevelopPackageManager packageManager, IPackage package, bool ignoreDependencies)
+ {
+ IEnumerable operations = packageManager.GetInstallPackageOperations(package, ignoreDependencies);
+ InstallPackage(packageManager, package, operations, ignoreDependencies);
+ }
+
+ ISharpDevelopPackageManager CreatePackageManager(PackageSource packageSource, MSBuildBasedProject project)
+ {
+ IPackageRepository packageRepository = CreatePackageRepository(packageSource);
+ return CreatePackageManager(packageRepository, project);
+ }
+
public void UninstallPackage(IPackageRepository repository, IPackage package)
{
ISharpDevelopPackageManager packageManager = CreatePackageManager(repository);
@@ -197,5 +251,20 @@ namespace ICSharpCode.PackageManagement
{
return packageRepositoryCache.CreateRepository(source);
}
+
+ public MSBuildBasedProject GetProject(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/PackageOperationsResolverFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs
new file mode 100644
index 0000000000..dcf29cf845
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs
@@ -0,0 +1,20 @@
+// 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 NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class PackageOperationsResolverFactory : IPackageOperationResolverFactory
+ {
+ public IPackageOperationResolver CreateInstallPackageOperationResolver(
+ IPackageRepository localRepository,
+ IPackageRepository sourceRepository,
+ ILogger logger,
+ bool ignoreDependencies)
+ {
+ return new InstallWalker(localRepository, sourceRepository, logger, ignoreDependencies);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
index 5eb78c2d28..de3561709b 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
@@ -20,7 +20,6 @@ namespace ICSharpCode.PackageManagement
IPackage package;
IEnumerable packageOperations = new PackageOperation[0];
IPackageRepository sourcePackageRepository;
- IPackageRepository localPackageRepository;
bool? hasDependencies;
public PackageViewModel(
@@ -43,25 +42,7 @@ namespace ICSharpCode.PackageManagement
addPackageCommand = new DelegateCommand(param => AddPackage());
removePackageCommand = new DelegateCommand(param => RemovePackage());
}
-
- public IPackageRepository SourcePackageRepository {
- get { return sourcePackageRepository; }
- }
-
- public IPackageRepository LocalPackageRepository {
- get {
- if (localPackageRepository == null) {
- GetLocalPackageRepository();
- }
- return localPackageRepository;
- }
- }
-
- void GetLocalPackageRepository()
- {
- localPackageRepository = packageManagementService.ActiveProjectManager.LocalRepository;
- }
-
+
public ICommand AddPackageCommand {
get { return addPackageCommand; }
}
@@ -229,21 +210,15 @@ namespace ICSharpCode.PackageManagement
void GetPackageOperations()
{
- IPackageOperationResolver resolver = CreatePackageOperationResolver();
- packageOperations = resolver.ResolveOperations(package);
- }
-
- IPackageOperationResolver CreatePackageOperationResolver()
- {
- return CreatePackageOperationResolver(Logger);
+ ISharpDevelopPackageManager packageManager = CreatePackageManagerForActiveProject();
+ packageOperations = packageManager.GetInstallPackageOperations(package, false);
}
- protected virtual IPackageOperationResolver CreatePackageOperationResolver(ILogger logger)
+ ISharpDevelopPackageManager CreatePackageManagerForActiveProject()
{
- return new InstallWalker(LocalPackageRepository,
- sourcePackageRepository,
- logger,
- ignoreDependencies: false);
+ ISharpDevelopPackageManager packageManager = packageManagementService.CreatePackageManagerForActiveProject();
+ packageManager.Logger = Logger;
+ return packageManager;
}
bool CanInstallPackage()
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ErrorRecordFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ErrorRecordFactory.cs
deleted file mode 100644
index 9e59194fa1..0000000000
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ErrorRecordFactory.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// 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.Management.Automation;
-
-namespace ICSharpCode.PackageManagement.Scripting
-{
- public class ErrorRecordFactory : IErrorRecordFactory
- {
- public ErrorRecord CreateNoProjectOpenErrorRecord()
- {
- return new ErrorRecord(
- new InvalidOperationException("No project is currently open."),
- "NoProjectOpen",
- ErrorCategory.InvalidOperation,
- null);
- }
- }
-}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
index 01aeefb7ce..927c47fc0f 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
@@ -118,6 +118,6 @@ namespace ICSharpCode.PackageManagement.Scripting
void ProcessLine(string line)
{
powerShellHost.ExecuteCommand(line);
- }
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs
index e09cedbc50..c9c3923ac6 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs
@@ -11,13 +11,15 @@ namespace ICSharpCode.PackageManagement
public class SharpDevelopPackageManager : PackageManager, ISharpDevelopPackageManager
{
IProjectSystem projectSystem;
+ IPackageOperationResolverFactory packageOperationResolverFactory;
public SharpDevelopPackageManager(
IPackageRepository sourceRepository,
IProjectSystem projectSystem,
IFileSystem fileSystem,
ISharedPackageRepository localRepository,
- IPackagePathResolver pathResolver)
+ IPackagePathResolver pathResolver,
+ IPackageOperationResolverFactory packageOperationResolverFactory)
: base(
sourceRepository,
pathResolver,
@@ -25,6 +27,7 @@ namespace ICSharpCode.PackageManagement
localRepository)
{
this.projectSystem = projectSystem;
+ this.packageOperationResolverFactory = packageOperationResolverFactory;
CreateProjectManager();
}
@@ -61,17 +64,11 @@ namespace ICSharpCode.PackageManagement
InstallPackage(package, ignoreDependencies);
}
- public void InstallPackage(IPackage package, IEnumerable operations)
+ public void InstallPackage(IPackage package, IEnumerable operations, bool ignoreDependencies)
{
foreach (PackageOperation operation in operations) {
Execute(operation);
}
- AddPackageReference(package);
- }
-
- void AddPackageReference(IPackage package)
- {
- bool ignoreDependencies = false;
AddPackageReference(package, ignoreDependencies);
}
@@ -91,5 +88,20 @@ namespace ICSharpCode.PackageManagement
ProjectManager.RemovePackageReference(package.Id, forceRemove, removeDependencies);
base.UninstallPackage(package, forceRemove, removeDependencies);
}
+
+ public IEnumerable GetInstallPackageOperations(IPackage package, bool ignoreDependencies)
+ {
+ IPackageOperationResolver resolver = CreateInstallPackageOperationResolver(ignoreDependencies);
+ return resolver.ResolveOperations(package);
+ }
+
+ IPackageOperationResolver CreateInstallPackageOperationResolver(bool ignoreDependencies)
+ {
+ return packageOperationResolverFactory.CreateInstallPackageOperationResolver(
+ LocalRepository,
+ SourceRepository,
+ Logger,
+ ignoreDependencies);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManagerFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManagerFactory.cs
index 48f6a32413..dc2bccf043 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManagerFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManagerFactory.cs
@@ -14,15 +14,17 @@ namespace ICSharpCode.PackageManagement
ISharpDevelopProjectSystemFactory projectSystemFactory;
public SharpDevelopPackageManagerFactory()
- : this(new SharpDevelopPackageRepositoryFactory(),
- new SharpDevelopProjectSystemFactory(),
- new PackageManagementOptions())
+ : this(
+ new SharpDevelopPackageRepositoryFactory(),
+ new SharpDevelopProjectSystemFactory(),
+ new PackageManagementOptions())
{
}
- public SharpDevelopPackageManagerFactory(ISharpDevelopPackageRepositoryFactory packageRepositoryFactory,
- ISharpDevelopProjectSystemFactory projectSystemFactory,
- PackageManagementOptions options)
+ public SharpDevelopPackageManagerFactory(
+ ISharpDevelopPackageRepositoryFactory packageRepositoryFactory,
+ ISharpDevelopProjectSystemFactory projectSystemFactory,
+ PackageManagementOptions options)
{
this.packageRepositoryFactory = packageRepositoryFactory;
this.projectSystemFactory = projectSystemFactory;
@@ -49,7 +51,15 @@ namespace ICSharpCode.PackageManagement
DefaultPackagePathResolver pathResolver = new DefaultPackagePathResolver(fileSystem);
ISharedPackageRepository sharedRepository = CreateSharedRepository(pathResolver, fileSystem);
IProjectSystem projectSystem = CreateProjectSystem(project);
- return new SharpDevelopPackageManager(packageRepository, projectSystem, fileSystem, sharedRepository, pathResolver);
+ PackageOperationsResolverFactory packageOperationResolverFactory = new PackageOperationsResolverFactory();
+
+ return new SharpDevelopPackageManager(
+ packageRepository,
+ projectSystem,
+ fileSystem,
+ sharedRepository,
+ pathResolver,
+ packageOperationResolverFactory);
}
IProjectSystem CreateProjectSystem(MSBuildBasedProject project)
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs
index e9d828679c..97571b2418 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs
@@ -17,17 +17,22 @@ namespace ICSharpCode.PackageManagement
MSBuildBasedProject project;
ProjectTargetFramework targetFramework;
IPackageManagementFileService fileService;
+ IPackageManagementProjectService projectService;
public SharpDevelopProjectSystem(MSBuildBasedProject project)
- : this(project, new PackageManagementFileService())
+ : this(project, new PackageManagementFileService(), new PackageManagementProjectService())
{
}
- public SharpDevelopProjectSystem(MSBuildBasedProject project, IPackageManagementFileService fileService)
+ public SharpDevelopProjectSystem(
+ MSBuildBasedProject project,
+ IPackageManagementFileService fileService,
+ IPackageManagementProjectService projectService)
: base(AppendTrailingSlashToDirectory(project.Directory))
{
this.project = project;
this.fileService = fileService;
+ this.projectService = projectService;
}
static string AppendTrailingSlashToDirectory(string directory)
@@ -59,8 +64,8 @@ namespace ICSharpCode.PackageManagement
public void AddReference(string referencePath, Stream stream)
{
ReferenceProjectItem assemblyReference = CreateReference(referencePath);
- ProjectService.AddProjectItem(project, assemblyReference);
- project.Save();
+ projectService.AddProjectItem(project, assemblyReference);
+ projectService.Save(project);
LogAddedReferenceToProject(assemblyReference);
}
@@ -177,8 +182,8 @@ namespace ICSharpCode.PackageManagement
void AddFileToProject(string path)
{
FileProjectItem fileItem = CreateFileProjectItem(path);
- ProjectService.AddProjectItem(project, fileItem);
- project.Save();
+ projectService.AddProjectItem(project, fileItem);
+ projectService.Save(project);
}
FileProjectItem CreateFileProjectItem(string path)
diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
index 4712d399a1..7249e9b8d4 100644
--- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
@@ -78,9 +78,9 @@
-
+
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageManagementService.cs
index 1492e4638e..a2a69ba4b0 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageManagementService.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageManagementService.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NuGet;
@@ -14,6 +15,7 @@ namespace PackageManagement.Tests.Helpers
public Exception ExeptionToThrowWhenInstallPackageCalled { get; set; }
public Exception ExeptionToThrowWhenUninstallPackageCalled { get; set; }
public Exception ExeptionToThrowWhenActiveRepositoryAccessed { get; set; }
+ public Exception ExceptionToThrowWhenCreatePackageManagerForActiveProjectCalled { get; set; }
public override IProjectManager ActiveProjectManager {
get {
@@ -43,5 +45,13 @@ namespace PackageManagement.Tests.Helpers
{
throw ExeptionToThrowWhenUninstallPackageCalled;
}
+
+ public override ISharpDevelopPackageManager CreatePackageManagerForActiveProject()
+ {
+ if (ExceptionToThrowWhenCreatePackageManagerForActiveProjectCalled != null) {
+ throw ExceptionToThrowWhenCreatePackageManagerForActiveProjectCalled;
+ }
+ return base.CreatePackageManagerForActiveProject();
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs
index 5db8e2d0ea..604164b63e 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs
@@ -34,5 +34,19 @@ namespace PackageManagement.Tests.Helpers
{
IsRunCalled = true;
}
+
+ public TestableProject AddFakeDefaultProject()
+ {
+ var project = ProjectHelper.CreateTestProject();
+ DefaultProject = project;
+ return project;
+ }
+
+ public PackageSource AddTestPackageSource()
+ {
+ var source = new PackageSource("Test");
+ ActivePackageSource = source;
+ return source;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagerFactory.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagerFactory.cs
index 5c7bc24580..3daf21bac7 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagerFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagerFactory.cs
@@ -2,7 +2,9 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using System.Collections.Generic;
using ICSharpCode.PackageManagement;
+using ICSharpCode.PackageManagement.Design;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageOperationResolver.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageOperationResolver.cs
index 114b68df21..52e18be51a 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageOperationResolver.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageOperationResolver.cs
@@ -10,9 +10,11 @@ namespace PackageManagement.Tests.Helpers
public class FakePackageOperationResolver : IPackageOperationResolver
{
public List PackageOperations = new List();
+ public IPackage PackagePassedToResolveOperations;
public virtual IEnumerable ResolveOperations(IPackage package)
{
+ PackagePassedToResolveOperations = package;
return PackageOperations;
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageOperationResolverFactory.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageOperationResolverFactory.cs
new file mode 100644
index 0000000000..8745f75027
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageOperationResolverFactory.cs
@@ -0,0 +1,32 @@
+// 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;
+using NuGet;
+
+namespace PackageManagement.Tests.Helpers
+{
+ public class FakePackageOperationResolverFactory : IPackageOperationResolverFactory
+ {
+ public FakePackageOperationResolver FakeInstallPackageOperationResolver = new FakePackageOperationResolver();
+ public IPackageRepository LocalRepositoryPassedToCreateInstallPackageOperationsResolver;
+ public IPackageRepository SourceRepositoryPassedToCreateInstallPackageOperationsResolver;
+ public ILogger LoggerPassedToCreateInstallPackageOperationResolver;
+ public bool IgnoreDependenciesPassedToCreateInstallPackageOperationResolver;
+
+ public IPackageOperationResolver CreateInstallPackageOperationResolver(
+ IPackageRepository localRepository,
+ IPackageRepository sourceRepository,
+ ILogger logger,
+ bool ignoreDependencies)
+ {
+ LocalRepositoryPassedToCreateInstallPackageOperationsResolver = localRepository;
+ SourceRepositoryPassedToCreateInstallPackageOperationsResolver = sourceRepository;
+ LoggerPassedToCreateInstallPackageOperationResolver = logger;
+ IgnoreDependenciesPassedToCreateInstallPackageOperationResolver = ignoreDependencies;
+
+ return FakeInstallPackageOperationResolver;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/InstallPackageHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/InstallPackageHelper.cs
index 4a475471f8..1b8a4d1106 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/InstallPackageHelper.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/InstallPackageHelper.cs
@@ -37,5 +37,20 @@ namespace PackageManagement.Tests.Helpers
PackageOperations.Add(operation);
return package;
}
+
+ public PackageSource PackageSource = new PackageSource("http://sharpdevelop/packages");
+ public TestableProject TestableProject = ProjectHelper.CreateTestProject();
+ public bool IgnoreDependencies;
+ public Version Version;
+
+ public void InstallPackageById(string packageId)
+ {
+ packageManagementService.InstallPackage(
+ packageId,
+ Version,
+ TestableProject,
+ PackageSource,
+ IgnoreDependencies);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs
index 705e7f52b4..8b3320aed4 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs
@@ -10,13 +10,18 @@ namespace PackageManagement.Tests.Helpers
public static class ProjectHelper
{
public static TestableProject CreateTestProject()
+ {
+ return CreateTestProject("TestProject");
+ }
+
+ public static TestableProject CreateTestProject(string name)
{
Solution solution = new Solution();
solution.FileName = @"d:\projects\Test\TestSolution.sln";
ProjectCreateInformation createInfo = new ProjectCreateInformation();
createInfo.Solution = solution;
- createInfo.ProjectName = "TestProject";
+ createInfo.ProjectName = name;
createInfo.SolutionPath = @"d:\projects\Test";
createInfo.ProjectBasePath = @"d:\projects\Test\TestProject";
createInfo.OutputProjectFileName = @"d:\projects\Test\TestProject\TestProject.csproj";
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs
index 372725ebdf..bf726d197c 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs
@@ -10,13 +10,11 @@ namespace PackageManagement.Tests.Helpers
{
public class TestablePackageViewModel : PackageViewModel
{
- public FakePackageOperationResolver FakePackageOperationResolver;
public FakePackageRepository FakeSourcePackageRepository;
public FakePackageManagementService FakePackageManagementService;
public FakeLicenseAcceptanceService FakeLicenseAcceptanceService;
public FakeMessageReporter FakeMessageReporter;
public FakePackage FakePackage;
- public ILogger LoggerUsedWhenCreatingPackageResolver;
public string PackageViewModelAddingPackageMessageFormat = String.Empty;
public string PackageViewModelRemovingPackageMessageFormat = String.Empty;
@@ -47,15 +45,6 @@ namespace PackageManagement.Tests.Helpers
this.FakeSourcePackageRepository = FakePackageManagementService.FakeActivePackageRepository;
}
- protected override IPackageOperationResolver CreatePackageOperationResolver(ILogger logger)
- {
- LoggerUsedWhenCreatingPackageResolver = logger;
- if (FakePackageOperationResolver != null) {
- return FakePackageOperationResolver;
- }
- return base.CreatePackageOperationResolver(logger);
- }
-
protected override string AddingPackageMessageFormat {
get { return PackageViewModelAddingPackageMessageFormat; }
}
@@ -63,5 +52,30 @@ namespace PackageManagement.Tests.Helpers
protected override string RemovingPackageMessageFormat {
get { return PackageViewModelRemovingPackageMessageFormat; }
}
+
+ public PackageOperation AddOneFakeInstallPackageOperationForViewModelPackage()
+ {
+ var operation = new PackageOperation(FakePackage, PackageAction.Install);
+
+ FakePackageManagementService
+ .FakePackageManagerToReturnFromCreatePackageManagerForActiveProject
+ .PackageOperationsToReturnFromGetInstallPackageOperations
+ .Add(operation);
+
+ return operation;
+ }
+
+ public PackageOperation AddOneFakeUninstallPackageOperation()
+ {
+ var package = new FakePackage("PackageToUninstall");
+ var operation = new PackageOperation(package, PackageAction.Uninstall);
+
+ FakePackageManagementService
+ .FakePackageManagerToReturnFromCreatePackageManagerForActiveProject
+ .PackageOperationsToReturnFromGetInstallPackageOperations
+ .Add(operation);
+
+ return operation;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableSharpDevelopProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableSharpDevelopProjectSystem.cs
index 3eb65414bb..bc3b494fff 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableSharpDevelopProjectSystem.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableSharpDevelopProjectSystem.cs
@@ -14,6 +14,7 @@ namespace PackageManagement.Tests.Helpers
public string PathPassedToPhysicalFileSystemAddFile;
public Stream StreamPassedToPhysicalFileSystemAddFile;
public FakeFileService FakeFileService;
+ public FakePackageManagementProjectService FakeProjectService;
public FakePackageManagementOutputMessagesView FakeOutputMessagesView;
public string FileNamePassedToLogDeletedFile;
public FileNameAndDirectory FileNameAndDirectoryPassedToLogDeletedFileFromDirectory;
@@ -23,14 +24,18 @@ namespace PackageManagement.Tests.Helpers
public FileNameAndProjectName FileNameAndProjectNamePassedToLogAddedFileToProject;
public TestableSharpDevelopProjectSystem(MSBuildBasedProject project)
- : this(project, new FakeFileService(project))
+ : this(project, new FakeFileService(project), new FakePackageManagementProjectService())
{
}
- TestableSharpDevelopProjectSystem(MSBuildBasedProject project, IPackageManagementFileService fileService)
- : base(project, fileService)
+ TestableSharpDevelopProjectSystem(
+ MSBuildBasedProject project,
+ IPackageManagementFileService fileService,
+ IPackageManagementProjectService projectService)
+ : base(project, fileService, projectService)
{
FakeFileService = (FakeFileService)fileService;
+ FakeProjectService = (FakePackageManagementProjectService)projectService;
Logger = FakeOutputMessagesView;
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs
index 73e9309e02..683c241a5d 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs
@@ -55,6 +55,36 @@ namespace PackageManagement.Tests
installPackageHelper = new InstallPackageHelper(packageManagementService);
}
+ FakePackage AddOneFakePackageToPackageRepositoryFactoryRepository(string id)
+ {
+ return fakePackageRepositoryFactory.FakePackageRepository.AddOneFakePackage(id);
+ }
+
+ void MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame()
+ {
+ fakePackageManagerFactory.FakePackageManager.SourceRepository =
+ fakePackageRepositoryFactory.FakePackageRepository;
+ }
+
+ IEnumerable AddOnePackageOperationToPackageManager()
+ {
+ var operations = fakePackageManagerFactory
+ .FakePackageManager
+ .PackageOperationsToReturnFromGetInstallPackageOperations;
+
+ var operation = new PackageOperation(new FakePackage("A"), PackageAction.Install);
+ operations.Add(operation);
+
+ return operations;
+ }
+
+ TestableProject AddProject(string name)
+ {
+ var project = ProjectHelper.CreateTestProject(name);
+ fakeProjectService.AddFakeProject(project);
+ return project;
+ }
+
[Test]
public void InstallPackage_PackageObjectPassed_CallsPackageManagerInstallPackage()
{
@@ -544,5 +574,247 @@ namespace PackageManagement.Tests
Assert.AreEqual(expectedProject, project);
}
+
+ [Test]
+ public void InstallPackage_PackageIdAndSourceAndProjectPassed_RepositoryCreatedForPackageSource()
+ {
+ CreatePackageManagementService();
+ AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
+
+ installPackageHelper.InstallPackageById("PackageId");
+
+ var expectedPackageSource = installPackageHelper.PackageSource;
+ var actualPackageSource = fakePackageRepositoryFactory.FirstPackageSourcePassedToCreateRepository;
+
+ Assert.AreEqual(expectedPackageSource, actualPackageSource);
+ }
+
+ [Test]
+ public void InstallPackage_PackageIdAndSourceAndProjectPassed_InstallsPackageFromPackageSource()
+ {
+ CreatePackageManagementService();
+ var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
+
+ installPackageHelper.InstallPackageById("PackageId");
+
+ var actualPackage = fakePackageManagerFactory.FakePackageManager.PackagePassedToInstallPackage;
+
+ Assert.AreEqual(package, actualPackage);
+ }
+
+ [Test]
+ public void InstallPackage_PackageIdAndSourceAndProjectPassed_RepositoryCreatedFromPackageSourceIsUsedToCreatePackageManager()
+ {
+ CreatePackageManagementService();
+ var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
+ var repository = fakePackageRepositoryFactory.FakePackageRepository;
+
+ installPackageHelper.InstallPackageById("PackageId");
+
+ var actualRepository = fakePackageManagerFactory.PackageRepositoryPassedToCreatePackageManager;
+
+ Assert.AreEqual(repository, actualRepository);
+ }
+
+ [Test]
+ public void InstallPackage_PackageIdAndSourceAndProjectPassed_ProjectIsUsedToCreatePackageManager()
+ {
+ CreatePackageManagementService();
+ fakeProjectService.CurrentProject = null;
+ AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
+
+ installPackageHelper.InstallPackageById("PackageId");
+
+ var actualProject = fakePackageManagerFactory.ProjectPassedToCreateRepository;
+ var expectedProject = installPackageHelper.TestableProject;
+
+ Assert.AreEqual(expectedProject, actualProject);
+ }
+
+ [Test]
+ public void InstallPackage_PackageIdAndSourceAndProjectPassed_PackageOperationsToInstallPackage()
+ {
+ CreatePackageManagementService();
+ AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
+ var packageOperations = AddOnePackageOperationToPackageManager();
+
+ installPackageHelper.InstallPackageById("PackageId");
+
+ var packageManager = fakePackageManagerFactory.FakePackageManager;
+ var actualPackageOperations = packageManager.ParametersPassedToInstallPackage.PackageOperationsPassedToInstallPackage;
+
+ Assert.AreEqual(packageOperations, actualPackageOperations);
+ }
+
+ [Test]
+ public void InstallPackage_PackageIdAndSourceAndProjectPassed_PackageOperationsCreatedForInstallPackage()
+ {
+ CreatePackageManagementService();
+ var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
+ var packageOperations = AddOnePackageOperationToPackageManager();
+
+ installPackageHelper.InstallPackageById("PackageId");
+
+ var actualPackage = fakePackageManagerFactory.FakePackageManager.PackagePassedToGetInstallPackageOperations;
+
+ Assert.AreEqual(package, actualPackage);
+ }
+
+ [Test]
+ public void InstallPackage_PackageIdAndSourceAndProjectPassedAndIgnoreDependenciesIsTrue_DependenciesIgnoredWhenInstallingPackage()
+ {
+ CreatePackageManagementService();
+ var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
+
+ installPackageHelper.IgnoreDependencies = true;
+ installPackageHelper.InstallPackageById("PackageId");
+
+ bool result = fakePackageManagerFactory.FakePackageManager.IgnoreDependenciesPassedToInstallPackage;
+
+ Assert.IsTrue(result);
+ }
+
+ [Test]
+ public void InstallPackage_PackageIdAndSourceAndProjectPassedAndIgnoreDependenciesIsTrue_DependenciesIgnoredWhenGettingPackageOperations()
+ {
+ CreatePackageManagementService();
+ var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
+
+ installPackageHelper.IgnoreDependencies = true;
+ installPackageHelper.InstallPackageById("PackageId");
+
+ bool result = fakePackageManagerFactory.FakePackageManager.IgnoreDependenciesPassedToGetInstallPackageOperations;
+
+ Assert.IsTrue(result);
+ }
+
+ [Test]
+ public void InstallPackage_PackageIdAndSourceAndProjectPassedAndIgnoreDependenciesIsFalse_DependenciesNotIgnoredWhenGettingPackageOperations()
+ {
+ CreatePackageManagementService();
+ var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
+
+ installPackageHelper.IgnoreDependencies = false;
+ installPackageHelper.InstallPackageById("PackageId");
+
+ bool result = fakePackageManagerFactory.FakePackageManager.IgnoreDependenciesPassedToGetInstallPackageOperations;
+
+ Assert.IsFalse(result);
+ }
+
+ [Test]
+ public void InstallPackage_PackageIdAndSourceAndProjectPassedAndIgnoreDependenciesIsFalse_DependenciesNotIgnoredWhenInstallingPackage()
+ {
+ CreatePackageManagementService();
+ var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
+
+ installPackageHelper.IgnoreDependencies = false;
+ installPackageHelper.InstallPackageById("PackageId");
+
+ bool result = fakePackageManagerFactory.FakePackageManager.IgnoreDependenciesPassedToInstallPackage;
+
+ Assert.IsFalse(result);
+ }
+
+ [Test]
+ public void CreatePackageManagerForActiveProject_ProjectIsSelected_ReferencesSelectedProject()
+ {
+ CreatePackageManagementService();
+
+ packageManagementService.CreatePackageManagerForActiveProject();
+
+ IProject expectedProject = fakeProjectService.CurrentProject;
+ IProject actualProject = fakePackageManagerFactory.ProjectPassedToCreateRepository;
+
+ Assert.AreEqual(expectedProject, actualProject);
+ }
+
+ [Test]
+ public void CreatePackageManagerForActiveProject_ProjectIsSelected_UsesActiveRepository()
+ {
+ CreatePackageManagementService();
+
+ packageManagementService.CreatePackageManagerForActiveProject();
+
+ var expectedRepository = packageManagementService.ActivePackageRepository;
+ var actualRepository = fakePackageManagerFactory.PackageRepositoryPassedToCreatePackageManager;
+
+ Assert.AreEqual(expectedRepository, actualRepository);
+ }
+
+ [Test]
+ public void CreatePackageManagerForActiveProject_ReturnsPackageManager()
+ {
+ CreatePackageManagementService();
+
+ ISharpDevelopPackageManager packageManager =
+ packageManagementService.CreatePackageManagerForActiveProject();
+
+ var expectedPackageManager = fakePackageManagerFactory.FakePackageManager;
+
+ Assert.AreEqual(expectedPackageManager, packageManager);
+ }
+
+ [Test]
+ public void InstallPackage_VersionSpecified_VersionUsedWhenSearchingForPackage()
+ {
+ CreatePackageManagementService();
+ MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
+
+ var recentPackage = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ recentPackage.Version = new Version("1.2.0");
+
+ var oldPackage = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ oldPackage.Version = new Version("1.0.0");
+
+ var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
+ var version = new Version("1.1.0");
+ package.Version = version;
+
+ installPackageHelper.Version = version;
+ installPackageHelper.InstallPackageById("PackageId");
+
+ var actualPackage = fakePackageManagerFactory.FakePackageManager.PackagePassedToInstallPackage;
+
+ Assert.AreEqual(package, actualPackage);
+ }
+
+ [Test]
+ public void GetProject_ThreeProjectsOpenAndProjectWithNameExists_ReturnsMatchingProject()
+ {
+ CreatePackageManagementService();
+
+ AddProject("One");
+ var expectedProject = AddProject("Two");
+ AddProject("Three");
+
+ var actualProject = packageManagementService.GetProject("Two");
+
+ Assert.AreEqual(expectedProject, actualProject);
+ }
+
+ [Test]
+ public void GetProject_ProjectNameHasDifferentCase_ReturnsMatchingProjectIgnoringCase()
+ {
+ CreatePackageManagementService();
+
+ AddProject("One");
+ var expectedProject = AddProject("TWO");
+ AddProject("Three");
+
+ var actualProject = packageManagementService.GetProject("two");
+
+ Assert.AreEqual(expectedProject, actualProject);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs
index af8a0ee596..5f96806600 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs
@@ -42,51 +42,13 @@ namespace PackageManagement.Tests
licenseAcceptanceService = viewModel.FakeLicenseAcceptanceService;
messageReporter = viewModel.FakeMessageReporter;
}
-
- FakePackage AddPackageDependencyThatDoesNotRequireLicenseAcceptance(string packageId)
- {
- return AddPackageDependency(package, packageId, false);
- }
-
- FakePackage AddPackageDependencyThatRequiresLicenseAcceptance(string packageId)
- {
- return AddPackageDependencyThatRequiresLicenseAcceptance(package, packageId);
- }
-
- FakePackage AddPackageDependencyThatRequiresLicenseAcceptance(FakePackage fakePackage, string packageId)
- {
- return AddPackageDependency(fakePackage, packageId, true);
- }
-
- FakePackage AddPackageDependency(FakePackage fakePackage, string packageId, bool requiresLicenseAcceptance)
- {
- fakePackage.AddDependency(packageId);
-
- var packageDependedUpon = new FakePackage(packageId);
- packageDependedUpon.RequireLicenseAcceptance = requiresLicenseAcceptance;
-
- sourcePackageRepository.FakePackages.Add(packageDependedUpon);
-
- return packageDependedUpon;
- }
-
- FakePackage AddPackageUninstallOperation()
- {
- var package = new FakePackage();
- package.Id = "PackageToUninstall";
-
- var operation = new PackageOperation(package, PackageAction.Uninstall);
- var resolver = new FakePackageOperationResolver();
- resolver.PackageOperations.Add(operation);
- viewModel.FakePackageOperationResolver = resolver;
-
- return package;
- }
[Test]
public void AddPackageCommand_CommandExecuted_InstallsPackage()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
+
viewModel.AddPackageCommand.Execute(null);
Assert.AreEqual(package, packageManagementService.PackagePassedToInstallPackage);
@@ -96,6 +58,8 @@ namespace PackageManagement.Tests
public void AddPackage_PackageAddedSuccessfully_PackageAddedFromSourcePackageRepository()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
+
viewModel.AddPackage();
Assert.AreEqual(sourcePackageRepository, packageManagementService.RepositoryPassedToInstallPackage);
@@ -105,6 +69,7 @@ namespace PackageManagement.Tests
public void AddPackage_PackageAddedSuccessfully_PackageOperationsUsedWhenInstallingPackage()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
viewModel.AddPackage();
PackageOperation[] expectedOperations = new PackageOperation[] {
@@ -118,6 +83,8 @@ namespace PackageManagement.Tests
public void AddPackage_PackageAddedSuccessfully_PropertyNotifyChangedFiredForIsAddedProperty()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
+
string propertyChangedName = null;
viewModel.PropertyChanged += (sender, e) => propertyChangedName = e.PropertyName;
viewModel.AddPackage();
@@ -302,8 +269,10 @@ namespace PackageManagement.Tests
public void AddPackage_PackageRequiresLicenseAgreementAcceptance_UserAskedToAcceptLicenseAgreementForPackageBeforeInstalling()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
package.RequireLicenseAcceptance = true;
licenseAcceptanceService.AcceptLicensesReturnValue = true;
+
viewModel.AddPackage();
var expectedPackages = new FakePackage[] {
@@ -329,8 +298,10 @@ namespace PackageManagement.Tests
public void AddPackage_PackageRequiresLicenseAgreementAcceptanceAndUserDeclinesAgreement_PackageIsNotInstalled()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
package.RequireLicenseAcceptance = true;
licenseAcceptanceService.AcceptLicensesReturnValue = false;
+
viewModel.AddPackage();
Assert.IsFalse(packageManagementService.IsInstallPackageCalled);
@@ -340,107 +311,15 @@ namespace PackageManagement.Tests
public void AddPackage_PackageRequiresLicenseAgreementAcceptanceAndUserDeclinesAgreement_PropertyChangedEventNotFired()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
package.RequireLicenseAcceptance = true;
licenseAcceptanceService.AcceptLicensesReturnValue = false;
bool propertyChangedEventFired = false;
viewModel.PropertyChanged += (sender, e) => propertyChangedEventFired = true;
- viewModel.AddPackage();
-
- Assert.IsFalse(propertyChangedEventFired);
- }
-
- [Test]
- public void AddPackage_PackageHasOneDependencyThatRequiresLicenseAgreementAcceptance_UserAskedToAcceptLicenseForPackageDependency()
- {
- CreateViewModel();
- package.RequireLicenseAcceptance = false;
- licenseAcceptanceService.AcceptLicensesReturnValue = false;
- FakePackage packageDependedUpon =
- AddPackageDependencyThatRequiresLicenseAcceptance("PackageDependencyId");
-
- viewModel.AddPackage();
-
- var expectedPackages = new FakePackage[] {
- packageDependedUpon
- };
-
- var actualPackages = licenseAcceptanceService.PackagesPassedToAcceptLicenses;
-
- CollectionAssert.AreEqual(expectedPackages, actualPackages);
- }
-
- [Test]
- public void AddPackage_PackageAndPackageDependencyRequiresLicenseAgreementAcceptance_UserAskedToAcceptLicenseForPackageAndPackageDependency()
- {
- CreateViewModel();
- package.RequireLicenseAcceptance = true;
- licenseAcceptanceService.AcceptLicensesReturnValue = false;
- FakePackage packageDependedUpon =
- AddPackageDependencyThatRequiresLicenseAcceptance("PackageDependencyId");
-
- viewModel.AddPackage();
-
- var expectedPackages = new FakePackage[] {
- packageDependedUpon,
- package
- };
-
- var actualPackages = licenseAcceptanceService.PackagesPassedToAcceptLicenses;
-
- PackageCollectionAssert.AreEqual(expectedPackages, actualPackages);
- }
-
- [Test]
- public void AddPackage_PackageHasOneDependencyThatDoesNotRequireLicenseAgreementAcceptance_UserNotAskedToAcceptLicenseForPackageDependency()
- {
- CreateViewModel();
- package.RequireLicenseAcceptance = false;
- licenseAcceptanceService.AcceptLicensesReturnValue = false;
- AddPackageDependencyThatDoesNotRequireLicenseAcceptance("PackageDependencyId");
viewModel.AddPackage();
- Assert.IsFalse(licenseAcceptanceService.IsAcceptLicensesCalled);
- }
-
- [Test]
- public void AddPackage_PackageDependencyHasDependencyThatRequiresLicenseAcceptance_UserAskedToAcceptLicenseForPackageDependencyChildPackage()
- {
- CreateViewModel();
- package.RequireLicenseAcceptance = false;
- licenseAcceptanceService.AcceptLicensesReturnValue = false;
- FakePackage packageDependedUpon =
- AddPackageDependencyThatDoesNotRequireLicenseAcceptance("ParentPackageIdForDependency");
-
- FakePackage childPackageDependedUpon =
- AddPackageDependencyThatRequiresLicenseAcceptance(
- packageDependedUpon,
- "ChildPackageIdForDependency");
-
- viewModel.AddPackage();
-
- var expectedPackages = new FakePackage[] {
- childPackageDependedUpon
- };
-
- var actualPackages = licenseAcceptanceService.PackagesPassedToAcceptLicenses;
-
- CollectionAssert.AreEqual(expectedPackages, actualPackages);
- }
-
- [Test]
- public void AddPackage_PackageHasOneDependencyThatRequiresLicenseAgreementAcceptanceButIsAlreadyInstalledLocally_UserIsNotAskedToAcceptLicenseForPackageDependency()
- {
- CreateViewModel();
- package.RequireLicenseAcceptance = false;
- licenseAcceptanceService.AcceptLicensesReturnValue = false;
- var packageDependedUpon = AddPackageDependencyThatRequiresLicenseAcceptance("PackageDependencyId");
- packageManagementService.AddPackageToProjectLocalRepository(packageDependedUpon);
- packageManagementService.FakeActiveProjectManager.IsInstalledReturnValue = true;
-
- viewModel.AddPackage();
-
- Assert.IsFalse(licenseAcceptanceService.IsAcceptLicensesCalled);
+ Assert.IsFalse(propertyChangedEventFired);
}
[Test]
@@ -448,7 +327,8 @@ namespace PackageManagement.Tests
{
CreateViewModel();
package.RequireLicenseAcceptance = false;
- FakePackage packageToUninstall = AddPackageUninstallOperation();
+ var operation = viewModel.AddOneFakeUninstallPackageOperation();
+ FakePackage packageToUninstall = operation.Package as FakePackage;
packageToUninstall.RequireLicenseAcceptance = true;
viewModel.AddPackage();
@@ -459,16 +339,21 @@ namespace PackageManagement.Tests
public void AddPackage_CheckLoggerUsed_OutputMessagesLoggerUsedWhenResolvingPackageOperations()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
viewModel.AddPackage();
ILogger expectedLogger = packageManagementService.FakeOutputMessagesView;
- Assert.AreEqual(expectedLogger, viewModel.LoggerUsedWhenCreatingPackageResolver);
+ ILogger actualLogger = packageManagementService
+ .FakePackageManagerToReturnFromCreatePackageManagerForActiveProject
+ .Logger;
+ Assert.AreEqual(expectedLogger, actualLogger);
}
[Test]
public void AddPackage_PackageAddedSuccessfully_InstallingPackageMessageIsFirstMessageLogged()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
package.Id = "Test.Package";
package.Version = new Version(1, 2, 0, 55);
viewModel.PackageViewModelAddingPackageMessageFormat = "Updating...{0}";
@@ -484,6 +369,7 @@ namespace PackageManagement.Tests
public void AddPackage_PackageAddedSuccessfully_NextToLastMessageLoggedMarksEndOfInstallation()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
viewModel.AddPackage();
string expectedMessage = "==============================";
@@ -496,6 +382,7 @@ namespace PackageManagement.Tests
public void AddPackage_PackageAddedSuccessfully_LastMessageLoggedIsEmptyLine()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
viewModel.AddPackage();
string expectedMessage = String.Empty;
@@ -508,6 +395,7 @@ namespace PackageManagement.Tests
public void RemovePackage_PackageRemovedSuccessfully_UninstallingPackageMessageIsFirstMessageLogged()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
package.Id = "Test.Package";
package.Version = new Version(1, 2, 0, 55);
viewModel.PackageViewModelRemovingPackageMessageFormat = "Removing...{0}";
@@ -523,6 +411,7 @@ namespace PackageManagement.Tests
public void RemovePackage_PackageRemovedSuccessfully_NextToLastMessageLoggedMarksEndOfInstallation()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
viewModel.RemovePackage();
string expectedMessage = "==============================";
@@ -547,6 +436,7 @@ namespace PackageManagement.Tests
public void AddPackage_ExceptionWhenInstallingPackage_ExceptionErrorMessageReported()
{
CreateViewModelWithExceptionThrowingPackageManagementService();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
Exception ex = new Exception("Test");
exceptionThrowingPackageManagementService.ExeptionToThrowWhenInstallPackageCalled = ex;
viewModel.AddPackage();
@@ -558,6 +448,7 @@ namespace PackageManagement.Tests
public void AddPackage_PackageAddedSuccessfully_MessagesReportedPreviouslyAreCleared()
{
CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
viewModel.AddPackage();
Assert.IsTrue(messageReporter.IsClearMessageCalled);
@@ -567,6 +458,7 @@ namespace PackageManagement.Tests
public void AddPackage_ExceptionWhenInstallingPackage_ExceptionLogged()
{
CreateViewModelWithExceptionThrowingPackageManagementService();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
Exception ex = new Exception("Exception error message");
exceptionThrowingPackageManagementService.ExeptionToThrowWhenInstallPackageCalled = ex;
viewModel.AddPackage();
@@ -614,13 +506,43 @@ namespace PackageManagement.Tests
[Test]
public void AddPackage_ExceptionThrownWhenResolvingPackageOperations_ExceptionReported()
{
- CreateViewModel();
- var resolver = new ExceptionThrowingPackageOperationResolver();
- viewModel.FakePackageOperationResolver = resolver;
- resolver.ResolveOperationsExceptionToThrow = new Exception("Test");
+ CreateViewModelWithExceptionThrowingPackageManagementService();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
+
+ exceptionThrowingPackageManagementService.ExceptionToThrowWhenCreatePackageManagerForActiveProjectCalled =
+ new Exception("Test");
viewModel.AddPackage();
Assert.AreEqual("Test", messageReporter.MessagePassedToShowErrorMessage);
}
+
+ [Test]
+ public void AddPackage_PackagesInstalledSuccessfully_ViewModelPackageUsedWhenResolvingPackageOperations()
+ {
+ CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
+ viewModel.AddPackage();
+
+ var expectedPackage = package;
+ var actualPackage = packageManagementService
+ .FakePackageManagerToReturnFromCreatePackageManagerForActiveProject
+ .PackagePassedToGetInstallPackageOperations;
+
+ Assert.AreEqual(expectedPackage, actualPackage);
+ }
+
+ [Test]
+ public void AddPackage_PackagesInstalledSuccessfully_PackageDependenciesNotIgnoredWhenCheckingForPackageOperations()
+ {
+ CreateViewModel();
+ viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
+ viewModel.AddPackage();
+
+ bool result = packageManagementService
+ .FakePackageManagerToReturnFromCreatePackageManagerForActiveProject
+ .IgnoreDependenciesPassedToGetInstallPackageOperations;
+
+ Assert.IsFalse(result);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs
index 05a2128f42..2ca3a3d463 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs
@@ -25,6 +25,7 @@ namespace PackageManagement.Tests
PackageReferenceRepositoryHelper packageRefRepositoryHelper;
TestableProjectManager testableProjectManager;
FakeFileSystem fakeFileSystem;
+ FakePackageOperationResolverFactory fakePackageOperationResolverFactory;
void CreatePackageManager(IProject project, PackageReferenceRepositoryHelper packageRefRepositoryHelper)
{
@@ -39,11 +40,14 @@ namespace PackageManagement.Tests
fakeFeedSourceRepository = new FakePackageRepository();
fakeSolutionSharedRepository = packageRefRepositoryHelper.FakeSharedSourceRepository;
+ fakePackageOperationResolverFactory = new FakePackageOperationResolverFactory();
+
packageManager = new SharpDevelopPackageManager(fakeFeedSourceRepository,
packageRefRepositoryHelper.FakeProjectSystem,
fakeFileSystem,
fakeSolutionSharedRepository,
- pathResolver);
+ pathResolver,
+ fakePackageOperationResolverFactory);
}
void CreatePackageManager()
@@ -85,10 +89,20 @@ namespace PackageManagement.Tests
}
FakePackage InstallPackageWithNoPackageOperations()
+ {
+ return InstallPackageWithNoPackageOperations(ignoreDependencies: false);
+ }
+
+ FakePackage InstallPackageWithNoPackageOperationsAndIgnoreDependencies()
+ {
+ return InstallPackageWithNoPackageOperations(ignoreDependencies: true);
+ }
+
+ FakePackage InstallPackageWithNoPackageOperations(bool ignoreDependencies)
{
FakePackage package = CreateFakePackage();
var operations = new List();
- packageManager.InstallPackage(package, operations);
+ packageManager.InstallPackage(package, operations, ignoreDependencies);
return package;
}
@@ -98,7 +112,7 @@ namespace PackageManagement.Tests
operation
};
FakePackage package = CreateFakePackage();
- packageManager.InstallPackage(package, operations);
+ packageManager.InstallPackage(package, operations, false);
return package;
}
@@ -157,6 +171,16 @@ namespace PackageManagement.Tests
return new PackageOperation(package, PackageAction.Install);
}
+ IEnumerable GetInstallPackageOperations(FakePackage package)
+ {
+ return packageManager.GetInstallPackageOperations(package, false);
+ }
+
+ IEnumerable GetInstallPackageOperationsAndIgnoreDependencies(FakePackage package)
+ {
+ return packageManager.GetInstallPackageOperations(package, true);
+ }
+
[Test]
public void ProjectManager_InstanceCreated_SourceRepositoryIsSharedRepositoryPassedToPackageManager()
{
@@ -235,6 +259,16 @@ namespace PackageManagement.Tests
Assert.IsFalse(testableProjectManager.IgnoreDependenciesPassedToAddPackageReference);
}
+ [Test]
+ public void InstallPackage_PackageInstanceAndPackageOperationsPassedAndIgnoreDependenciesIsTrue_IgnoreDependenciesWhenAddingReferenceToProject()
+ {
+ CreatePackageManager();
+ CreateTestableProjectManager();
+ InstallPackageWithNoPackageOperationsAndIgnoreDependencies();
+
+ Assert.IsTrue(testableProjectManager.IgnoreDependenciesPassedToAddPackageReference);
+ }
+
[Test]
public void InstallPackage_PackageInstanceAndOneInstallPackageOperationPassed_PackageDefinedInOperationIsInstalledInLocalRepository()
{
@@ -358,5 +392,94 @@ namespace PackageManagement.Tests
Assert.AreEqual("Test", packageRemovedFromProject.Id);
}
+
+ [Test]
+ public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_PackageOperationsReturnedFromPackageOperationsResolverCreated()
+ {
+ CreatePackageManager();
+ var package = new FakePackage();
+ var operations = GetInstallPackageOperations(package);
+
+ var expectedOperations = fakePackageOperationResolverFactory.FakeInstallPackageOperationResolver.PackageOperations;
+
+ Assert.AreEqual(expectedOperations, operations);
+ }
+
+ [Test]
+ public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_PackageManagerUsesLocalRepositoryWhenGettingPackageOperations()
+ {
+ CreatePackageManager();
+ var package = new FakePackage();
+ GetInstallPackageOperations(package);
+
+ var expectedRepository = packageManager.LocalRepository;
+ var actualRepository = fakePackageOperationResolverFactory.LocalRepositoryPassedToCreateInstallPackageOperationsResolver;
+
+ Assert.AreEqual(expectedRepository, actualRepository);
+ }
+
+ [Test]
+ public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_PackageManagerUsesSourceRepositoryWhenGettingPackageOperations()
+ {
+ CreatePackageManager();
+ var package = new FakePackage();
+ GetInstallPackageOperations(package);
+
+ var expectedRepository = packageManager.SourceRepository;
+ var actualRepository = fakePackageOperationResolverFactory.SourceRepositoryPassedToCreateInstallPackageOperationsResolver;
+
+ Assert.AreEqual(expectedRepository, actualRepository);
+ }
+
+ [Test]
+ public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_DependenciesNotIgnored()
+ {
+ CreatePackageManager();
+ var package = new FakePackage();
+ GetInstallPackageOperations(package);
+
+ var result = fakePackageOperationResolverFactory.IgnoreDependenciesPassedToCreateInstallPackageOperationResolver;
+
+ Assert.IsFalse(result);
+ }
+
+ [Test]
+ public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_PackageManagerUsesLoggerWhenGettingPackageOperations()
+ {
+ CreatePackageManager();
+ var package = new FakePackage();
+ GetInstallPackageOperations(package);
+
+ var expectedLogger = packageManager.Logger;
+ var actualLogger = fakePackageOperationResolverFactory.LoggerPassedToCreateInstallPackageOperationResolver;
+
+ Assert.AreEqual(expectedLogger, actualLogger);
+ }
+
+ [Test]
+ public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_PackageUsedWhenGettingPackageOperations()
+ {
+ CreatePackageManager();
+ var package = new FakePackage();
+ GetInstallPackageOperations(package);
+
+ var actualPackage = fakePackageOperationResolverFactory
+ .FakeInstallPackageOperationResolver
+ .PackagePassedToResolveOperations;
+
+ Assert.AreEqual(package, actualPackage);
+ }
+
+ [Test]
+ public void GetInstallPackageOperations_IgnoreDependenciesIsTrue_PackageOperationResolverIgnoresDependencies()
+ {
+ CreatePackageManager();
+ var package = new FakePackage();
+ GetInstallPackageOperationsAndIgnoreDependencies(package);
+
+ bool result = fakePackageOperationResolverFactory.IgnoreDependenciesPassedToCreateInstallPackageOperationResolver;
+
+ Assert.IsTrue(result);
+ }
}
}