14 changed files with 686 additions and 17 deletions
@ -0,0 +1,59 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Management.Automation; |
||||||
|
using ICSharpCode.PackageManagement.Scripting; |
||||||
|
using ICSharpCode.SharpDevelop.Project; |
||||||
|
using NuGet; |
||||||
|
|
||||||
|
namespace ICSharpCode.PackageManagement.Cmdlets |
||||||
|
{ |
||||||
|
[Cmdlet(VerbsData.Update, "Package")] |
||||||
|
public class UpdatePackageCmdlet : PackageManagementCmdlet |
||||||
|
{ |
||||||
|
public UpdatePackageCmdlet() |
||||||
|
: this( |
||||||
|
ServiceLocator.PackageManagementService, |
||||||
|
ServiceLocator.PackageManagementConsoleHost, |
||||||
|
null) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public UpdatePackageCmdlet( |
||||||
|
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(); |
||||||
|
UpdatePackage(); |
||||||
|
} |
||||||
|
|
||||||
|
void UpdatePackage() |
||||||
|
{ |
||||||
|
PackageSource packageSource = GetActivePackageSource(Source); |
||||||
|
MSBuildBasedProject project = GetActiveProject(ProjectName); |
||||||
|
PackageManagementService.UpdatePackage(Id, Version, project, packageSource, !IgnoreDependencies.IsPresent); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -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 TestableUpdatePackageCmdlet : UpdatePackageCmdlet |
||||||
|
{ |
||||||
|
public FakeCmdletTerminatingError FakeCmdletTerminatingError; |
||||||
|
public FakePackageManagementConsoleHost FakePackageManagementConsoleHost; |
||||||
|
public FakePackageManagementService FakePackageManagementService; |
||||||
|
|
||||||
|
public TestableUpdatePackageCmdlet() |
||||||
|
: this( |
||||||
|
new FakePackageManagementService(), |
||||||
|
new FakePackageManagementConsoleHost(), |
||||||
|
new FakeCmdletTerminatingError()) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public TestableUpdatePackageCmdlet( |
||||||
|
FakePackageManagementService packageManagementService, |
||||||
|
FakePackageManagementConsoleHost consoleHost, |
||||||
|
FakeCmdletTerminatingError cmdletTerminatingError) |
||||||
|
: base(packageManagementService, consoleHost, cmdletTerminatingError) |
||||||
|
{ |
||||||
|
this.FakePackageManagementService = packageManagementService; |
||||||
|
this.FakePackageManagementConsoleHost = consoleHost; |
||||||
|
this.FakeCmdletTerminatingError = cmdletTerminatingError; |
||||||
|
} |
||||||
|
|
||||||
|
public void CallProcessRecord() |
||||||
|
{ |
||||||
|
base.ProcessRecord(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,229 @@ |
|||||||
|
// 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 NUnit.Framework; |
||||||
|
using PackageManagement.Cmdlets.Tests.Helpers; |
||||||
|
using PackageManagement.Tests.Helpers; |
||||||
|
|
||||||
|
namespace PackageManagement.Cmdlets.Tests |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class UpdatePackageCmdletTests : CmdletTestsBase |
||||||
|
{ |
||||||
|
TestableUpdatePackageCmdlet cmdlet; |
||||||
|
FakeCmdletTerminatingError fakeTerminatingError; |
||||||
|
FakePackageManagementService fakePackageManagementService; |
||||||
|
|
||||||
|
void CreateCmdletWithoutActiveProject() |
||||||
|
{ |
||||||
|
cmdlet = new TestableUpdatePackageCmdlet(); |
||||||
|
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_PackageIdUsedToUpdatePackage() |
||||||
|
{ |
||||||
|
CreateCmdletWithActivePackageSourceAndProject(); |
||||||
|
|
||||||
|
SetIdParameter("Test"); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var actualPackageId = fakePackageManagementService.PackageIdPassedToUpdatePackage; |
||||||
|
|
||||||
|
Assert.AreEqual("Test", actualPackageId); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_PackageIdSpecified_ActivePackageSourceUsedToUpdatePackage() |
||||||
|
{ |
||||||
|
CreateCmdletWithoutActiveProject(); |
||||||
|
AddDefaultProjectToConsoleHost(); |
||||||
|
var packageSource = AddPackageSourceToConsoleHost(); |
||||||
|
SetIdParameter("Test"); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var actualPackageSource = fakePackageManagementService.PackageSourcePassedToUpdatePackage; |
||||||
|
|
||||||
|
Assert.AreEqual(packageSource, actualPackageSource); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_PackageIdSpecified_ActiveProjectUsedToUpdatePackage() |
||||||
|
{ |
||||||
|
CreateCmdletWithoutActiveProject(); |
||||||
|
AddPackageSourceToConsoleHost(); |
||||||
|
var project = AddDefaultProjectToConsoleHost(); |
||||||
|
SetIdParameter("Test"); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var actualProject = fakePackageManagementService.ProjectPassedToUpdatePackage; |
||||||
|
|
||||||
|
Assert.AreEqual(project, actualProject); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_IgnoreDependenciesParameterSet_UpdateDependenciesIsFalseWhenUpdatingPackage() |
||||||
|
{ |
||||||
|
CreateCmdletWithActivePackageSourceAndProject(); |
||||||
|
|
||||||
|
SetIdParameter("Test"); |
||||||
|
EnableIgnoreDependenciesParameter(); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
bool result = fakePackageManagementService.UpdateDependenciesPassedToUpdatePackage; |
||||||
|
|
||||||
|
Assert.IsFalse(result); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_IgnoreDependenciesParameterNotSet_UpdateDependenciesIsTrueWhenUpdatingPackage() |
||||||
|
{ |
||||||
|
CreateCmdletWithActivePackageSourceAndProject(); |
||||||
|
|
||||||
|
SetIdParameter("Test"); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
bool result = fakePackageManagementService.UpdateDependenciesPassedToUpdatePackage; |
||||||
|
|
||||||
|
Assert.IsTrue(result); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_SourceParameterSet_CustomSourceUsedWhenUpdatingPackage() |
||||||
|
{ |
||||||
|
CreateCmdletWithActivePackageSourceAndProject(); |
||||||
|
|
||||||
|
SetIdParameter("Test"); |
||||||
|
SetSourceParameter("http://sharpdevelop.net/packages"); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var expected = "http://sharpdevelop.net/packages"; |
||||||
|
var actual = fakePackageManagementService.PackageSourcePassedToUpdatePackage.Source; |
||||||
|
|
||||||
|
Assert.AreEqual(expected, actual); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_PackageVersionParameterSet_VersionUsedWhenUpdatingPackage() |
||||||
|
{ |
||||||
|
CreateCmdletWithActivePackageSourceAndProject(); |
||||||
|
|
||||||
|
SetIdParameter("Test"); |
||||||
|
var version = new Version("1.0.1"); |
||||||
|
SetVersionParameter(version); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var actualVersion = fakePackageManagementService.VersionPassedToUpdatePackage; |
||||||
|
|
||||||
|
Assert.AreEqual(version, actualVersion); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_PackageVersionParameterNotSet_VersionUsedWhenUpdatingPackageIsNull() |
||||||
|
{ |
||||||
|
CreateCmdletWithActivePackageSourceAndProject(); |
||||||
|
|
||||||
|
SetIdParameter("Test"); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var actualVersion = fakePackageManagementService.VersionPassedToUpdatePackage; |
||||||
|
|
||||||
|
Assert.IsNull(actualVersion); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_ProjectNameSpecified_ProjectMatchingProjectNameUsedWhenUpdatingPackage() |
||||||
|
{ |
||||||
|
CreateCmdletWithActivePackageSourceAndProject(); |
||||||
|
fakePackageManagementService.FakeProjectToReturnFromGetProject = ProjectHelper.CreateTestProject(); |
||||||
|
|
||||||
|
SetIdParameter("Test"); |
||||||
|
SetProjectNameParameter("MyProject"); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var actualProject = fakePackageManagementService.ProjectPassedToUpdatePackage; |
||||||
|
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); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue