26 changed files with 1456 additions and 85 deletions
@ -0,0 +1,156 @@
@@ -0,0 +1,156 @@
|
||||
// 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.Collections.Generic; |
||||
using System.Linq; |
||||
|
||||
using NuGet; |
||||
|
||||
namespace ICSharpCode.PackageManagement.Scripting |
||||
{ |
||||
public class RunAllProjectPackageScriptsAction : IDisposable |
||||
{ |
||||
IPackageScriptRunner scriptRunner; |
||||
List<IPackageManagementProject> projects; |
||||
IPackageScriptFactory scriptFactory; |
||||
|
||||
List<EventHandler<PackageOperationEventArgs>> packageInstalledHandlers = |
||||
new List<EventHandler<PackageOperationEventArgs>>(); |
||||
|
||||
List<EventHandler<PackageOperationEventArgs>> packageReferenceAddedHandlers = |
||||
new List<EventHandler<PackageOperationEventArgs>>(); |
||||
|
||||
List<EventHandler<PackageOperationEventArgs>> packageReferenceRemovedHandlers = |
||||
new List<EventHandler<PackageOperationEventArgs>>(); |
||||
|
||||
public RunAllProjectPackageScriptsAction( |
||||
IPackageScriptRunner scriptRunner, |
||||
IEnumerable<IPackageManagementProject> projects) |
||||
: this(scriptRunner, projects, new PackageScriptFactory()) |
||||
{ |
||||
} |
||||
|
||||
public RunAllProjectPackageScriptsAction( |
||||
IPackageScriptRunner scriptRunner, |
||||
IEnumerable<IPackageManagementProject> projects, |
||||
IPackageScriptFactory scriptFactory) |
||||
{ |
||||
this.scriptRunner = scriptRunner; |
||||
this.projects = projects.ToList(); |
||||
this.scriptFactory = scriptFactory; |
||||
|
||||
RegisterEvents(); |
||||
} |
||||
|
||||
public void Dispose() |
||||
{ |
||||
IsDisposed = true; |
||||
UnregisterEvents(); |
||||
} |
||||
|
||||
public bool IsDisposed { get; private set; } |
||||
|
||||
void RegisterEvents() |
||||
{ |
||||
foreach (IPackageManagementProject project in projects) { |
||||
RegisterPackageInstalledEvent(project); |
||||
RegisterPackageReferenceAddedEvent(project); |
||||
RegisterPackageReferenceRemovedEvent(project); |
||||
} |
||||
} |
||||
|
||||
void RegisterPackageInstalledEvent(IPackageManagementProject project) |
||||
{ |
||||
EventHandler<PackageOperationEventArgs> installHandler = |
||||
(_, e) => PackageInstalled(project, e); |
||||
packageInstalledHandlers.Add(installHandler); |
||||
project.PackageInstalled += installHandler; |
||||
} |
||||
|
||||
void RegisterPackageReferenceAddedEvent(IPackageManagementProject project) |
||||
{ |
||||
EventHandler<PackageOperationEventArgs> referenceAddedHandler = |
||||
(_, e) => PackageReferenceAdded(project, e); |
||||
packageReferenceAddedHandlers.Add(referenceAddedHandler); |
||||
project.PackageReferenceAdded += referenceAddedHandler; |
||||
} |
||||
|
||||
void RegisterPackageReferenceRemovedEvent(IPackageManagementProject project) |
||||
{ |
||||
EventHandler<PackageOperationEventArgs> referenceRemovedHandler = |
||||
(_, e) => PackageReferenceRemoved(project, e); |
||||
packageReferenceRemovedHandlers.Add(referenceRemovedHandler); |
||||
project.PackageReferenceRemoved += referenceRemovedHandler; |
||||
} |
||||
|
||||
void UnregisterEvents() |
||||
{ |
||||
foreach (IPackageManagementProject project in projects) { |
||||
UnregisterPackageInstalledEvent(project); |
||||
UnregisterPackageReferenceAddedEvent(project); |
||||
UnregisterPackageReferenceRemovedEvent(project); |
||||
} |
||||
} |
||||
|
||||
void UnregisterPackageInstalledEvent(IPackageManagementProject project) |
||||
{ |
||||
EventHandler<PackageOperationEventArgs> handler = packageInstalledHandlers.First(); |
||||
packageInstalledHandlers.Remove(handler); |
||||
project.PackageInstalled -= handler; |
||||
} |
||||
|
||||
void UnregisterPackageReferenceAddedEvent(IPackageManagementProject project) |
||||
{ |
||||
EventHandler<PackageOperationEventArgs> handler = packageReferenceAddedHandlers.First(); |
||||
packageReferenceAddedHandlers.Remove(handler); |
||||
project.PackageReferenceAdded -= handler; |
||||
} |
||||
|
||||
void UnregisterPackageReferenceRemovedEvent(IPackageManagementProject project) |
||||
{ |
||||
EventHandler<PackageOperationEventArgs> handler = packageReferenceRemovedHandlers.First(); |
||||
packageReferenceRemovedHandlers.Remove(handler); |
||||
project.PackageReferenceRemoved -= handler; |
||||
} |
||||
|
||||
void PackageInstalled(IPackageManagementProject project, PackageOperationEventArgs e) |
||||
{ |
||||
RunInitScript(project, e); |
||||
} |
||||
|
||||
void PackageReferenceAdded(IPackageManagementProject project, PackageOperationEventArgs e) |
||||
{ |
||||
RunInstallScript(project, e); |
||||
} |
||||
|
||||
void PackageReferenceRemoved(IPackageManagementProject project, PackageOperationEventArgs e) |
||||
{ |
||||
RunUninstallScript(project, e); |
||||
} |
||||
|
||||
void RunInitScript(IPackageManagementProject project, PackageOperationEventArgs e) |
||||
{ |
||||
IPackageScript script = scriptFactory.CreatePackageInitializeScript(e.Package, e.InstallPath); |
||||
RunScript(project, script); |
||||
} |
||||
|
||||
void RunScript(IPackageManagementProject project, IPackageScript script) |
||||
{ |
||||
script.Project = project; |
||||
scriptRunner.Run(script); |
||||
} |
||||
|
||||
void RunInstallScript(IPackageManagementProject project, PackageOperationEventArgs e) |
||||
{ |
||||
IPackageScript script = scriptFactory.CreatePackageInstallScript(e.Package, e.InstallPath); |
||||
RunScript(project, script); |
||||
} |
||||
|
||||
void RunUninstallScript(IPackageManagementProject project, PackageOperationEventArgs e) |
||||
{ |
||||
IPackageScript script = scriptFactory.CreatePackageUninstallScript(e.Package, e.InstallPath); |
||||
RunScript(project, script); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,120 @@
@@ -0,0 +1,120 @@
|
||||
// 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.Collections.Generic; |
||||
using System.Linq; |
||||
using ICSharpCode.PackageManagement.Scripting; |
||||
using NuGet; |
||||
|
||||
namespace ICSharpCode.PackageManagement |
||||
{ |
||||
public class UpdateSolutionPackagesAction : IPackageAction, IUpdatePackageSettings |
||||
{ |
||||
List<IPackageFromRepository> packages = new List<IPackageFromRepository>(); |
||||
List<PackageOperation> operations = new List<PackageOperation>(); |
||||
List<IPackageManagementProject> projects; |
||||
|
||||
public UpdateSolutionPackagesAction(IPackageManagementSolution solution) |
||||
{ |
||||
this.Solution = solution; |
||||
this.UpdateDependencies = true; |
||||
} |
||||
|
||||
public IPackageManagementSolution Solution { get; private set; } |
||||
public IPackageScriptRunner PackageScriptRunner { get; set; } |
||||
public bool UpdateDependencies { get; set; } |
||||
public bool AllowPrereleaseVersions { get; set; } |
||||
public ILogger Logger { get; set; } |
||||
|
||||
public IEnumerable<PackageOperation> Operations { |
||||
get { return operations; } |
||||
} |
||||
|
||||
public IEnumerable<IPackageFromRepository> Packages { |
||||
get { return packages; } |
||||
} |
||||
|
||||
public bool HasPackageScriptsToRun() |
||||
{ |
||||
var files = new PackageFilesForOperations(Operations); |
||||
return files.HasAnyPackageScripts(); |
||||
} |
||||
|
||||
public void AddOperations(IEnumerable<PackageOperation> operations) |
||||
{ |
||||
this.operations.AddRange(operations); |
||||
} |
||||
|
||||
public void AddPackages(IEnumerable<IPackageFromRepository> packages) |
||||
{ |
||||
this.packages.AddRange(packages); |
||||
} |
||||
|
||||
public void Execute() |
||||
{ |
||||
if (PackageScriptRunner != null) { |
||||
ExecuteWithScriptRunner(); |
||||
} else { |
||||
ExecuteCore(); |
||||
} |
||||
} |
||||
|
||||
void ExecuteWithScriptRunner() |
||||
{ |
||||
using (RunAllProjectPackageScriptsAction runScriptsAction = CreateRunPackageScriptsAction()) { |
||||
ExecuteCore(); |
||||
} |
||||
} |
||||
|
||||
RunAllProjectPackageScriptsAction CreateRunPackageScriptsAction() |
||||
{ |
||||
return CreateRunPackageScriptsAction(PackageScriptRunner, GetProjects()); |
||||
} |
||||
|
||||
void ExecuteCore() |
||||
{ |
||||
RunPackageOperations(); |
||||
UpdatePackageReferences(); |
||||
} |
||||
|
||||
void RunPackageOperations() |
||||
{ |
||||
IPackageManagementProject project = GetProjects().First(); |
||||
project.RunPackageOperations(operations); |
||||
} |
||||
|
||||
IEnumerable<IPackageManagementProject> GetProjects() |
||||
{ |
||||
if (projects == null) { |
||||
IPackageFromRepository package = packages.First(); |
||||
projects = Solution |
||||
.GetProjects(package.Repository) |
||||
.Select(project => { |
||||
project.Logger = Logger; |
||||
return project; |
||||
}) |
||||
.ToList(); |
||||
} |
||||
return projects; |
||||
} |
||||
|
||||
void UpdatePackageReferences() |
||||
{ |
||||
foreach (IPackageManagementProject project in GetProjects()) { |
||||
foreach (IPackageFromRepository package in packages) { |
||||
if (project.HasOlderPackageInstalled(package)) { |
||||
project.UpdatePackageReference(package, this); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
protected virtual RunAllProjectPackageScriptsAction CreateRunPackageScriptsAction( |
||||
IPackageScriptRunner scriptRunner, |
||||
IEnumerable<IPackageManagementProject> projects) |
||||
{ |
||||
return new RunAllProjectPackageScriptsAction(scriptRunner, projects); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
|
||||
// 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 Rhino.Mocks; |
||||
|
||||
namespace PackageManagement.Tests.Helpers |
||||
{ |
||||
public class TestPackageHelper |
||||
{ |
||||
public TestPackageHelper() |
||||
{ |
||||
Package = MockRepository.GenerateStub<IPackage>(); |
||||
} |
||||
|
||||
public TestPackageHelper(string id, string version) |
||||
: this() |
||||
{ |
||||
SetId(id); |
||||
SetVersion(version); |
||||
} |
||||
|
||||
public IPackage Package { get; set; } |
||||
|
||||
public void SetId(string id) |
||||
{ |
||||
Package.Stub(p => p.Id).Return(id); |
||||
} |
||||
|
||||
public void SetVersion(string version) |
||||
{ |
||||
Package.Stub(p => p.Version).Return(new SemanticVersion(version)); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
// 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.Collections.Generic; |
||||
using System.Linq; |
||||
using ICSharpCode.PackageManagement; |
||||
using ICSharpCode.PackageManagement.Scripting; |
||||
|
||||
namespace PackageManagement.Tests.Helpers |
||||
{ |
||||
public class TestableUpdateSolutionPackagesAction : UpdateSolutionPackagesAction |
||||
{ |
||||
public bool IsRunPackageScriptsActionCreated; |
||||
public IPackageScriptRunner ScriptRunnerPassedToCreateRunPackageScriptsAction; |
||||
public List<IPackageManagementProject> ProjectsPassedToCreateRunPackageScriptsAction; |
||||
public RunAllProjectPackageScriptsAction RunPackageScriptsAction; |
||||
|
||||
public TestableUpdateSolutionPackagesAction(IPackageManagementSolution solution) |
||||
: base(solution) |
||||
{ |
||||
} |
||||
|
||||
protected override RunAllProjectPackageScriptsAction CreateRunPackageScriptsAction( |
||||
IPackageScriptRunner scriptRunner, |
||||
IEnumerable<IPackageManagementProject> projects) |
||||
{ |
||||
IsRunPackageScriptsActionCreated = true; |
||||
ScriptRunnerPassedToCreateRunPackageScriptsAction = scriptRunner; |
||||
ProjectsPassedToCreateRunPackageScriptsAction = projects.ToList(); |
||||
RunPackageScriptsAction = base.CreateRunPackageScriptsAction(scriptRunner, projects); |
||||
return RunPackageScriptsAction; |
||||
} |
||||
|
||||
public bool IsRunPackageScriptsActionDisposed { |
||||
get { return RunPackageScriptsAction.IsDisposed; } |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,339 @@
@@ -0,0 +1,339 @@
|
||||
// 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.Collections.Generic; |
||||
using ICSharpCode.PackageManagement; |
||||
using ICSharpCode.PackageManagement.Scripting; |
||||
using NuGet; |
||||
using NUnit.Framework; |
||||
using PackageManagement.Tests.Helpers; |
||||
using Rhino.Mocks; |
||||
using Rhino.Mocks.Constraints; |
||||
|
||||
namespace PackageManagement.Tests |
||||
{ |
||||
[TestFixture] |
||||
public class RunAllProjectPackageScriptsActionTests |
||||
{ |
||||
RunAllProjectPackageScriptsAction action; |
||||
List<IPackageManagementProject> projects; |
||||
IPackageScriptRunner scriptRunner; |
||||
IPackageScriptFactory scriptFactory; |
||||
|
||||
[SetUp] |
||||
public void Init() |
||||
{ |
||||
CreateProjectsList(); |
||||
} |
||||
|
||||
void CreateProjectsList() |
||||
{ |
||||
projects = new List<IPackageManagementProject>(); |
||||
} |
||||
|
||||
void CreateAction() |
||||
{ |
||||
scriptRunner = MockRepository.GenerateStub<IPackageScriptRunner>(); |
||||
scriptFactory = MockRepository.GenerateStub<IPackageScriptFactory>(); |
||||
action = new RunAllProjectPackageScriptsAction(scriptRunner, projects, scriptFactory); |
||||
} |
||||
|
||||
IPackageManagementProject AddProject() |
||||
{ |
||||
IPackageManagementProject project = MockRepository.GenerateStub<IPackageManagementProject>(); |
||||
projects.Add(project); |
||||
return project; |
||||
} |
||||
|
||||
PackageOperationEventArgs CreatePackageOperationEventArgs() |
||||
{ |
||||
IPackage package = CreatePackage(); |
||||
return CreatePackageOperationEventArgs(package); |
||||
} |
||||
|
||||
IPackage CreatePackage() |
||||
{ |
||||
return new TestPackageHelper("Test", "1.0").Package; |
||||
} |
||||
|
||||
PackageOperationEventArgs CreatePackageOperationEventArgs( |
||||
IPackage package, |
||||
string installPath = @"d:\projects\myproject\packages\test") |
||||
{ |
||||
return new PackageOperationEventArgs(package, null, installPath); |
||||
} |
||||
|
||||
void FirePackageInstalledEvent(IPackageManagementProject project, PackageOperationEventArgs eventArgs) |
||||
{ |
||||
project.Raise(p => p.PackageInstalled += null, null, eventArgs); |
||||
} |
||||
|
||||
void FirePackageReferenceAddedEvent(IPackageManagementProject project, PackageOperationEventArgs eventArgs) |
||||
{ |
||||
project.Raise(p => p.PackageReferenceAdded += null, null, eventArgs); |
||||
} |
||||
|
||||
void FirePackageReferenceRemovedEvent(IPackageManagementProject project, PackageOperationEventArgs eventArgs) |
||||
{ |
||||
project.Raise(p => p.PackageReferenceRemoved += null, null, eventArgs); |
||||
} |
||||
|
||||
IPackageScript CreatePackageScript() |
||||
{ |
||||
return MockRepository.GenerateStub<IPackageScript>(); |
||||
} |
||||
|
||||
void SetInitScriptToReturnFromScriptFactory(IPackageScript initScript) |
||||
{ |
||||
scriptFactory.Stub(factory => factory.CreatePackageInitializeScript( |
||||
Arg<IPackage>.Is.Anything, |
||||
Arg<string>.Is.Anything)) |
||||
.Return(initScript); |
||||
} |
||||
|
||||
void SetInstallScriptToReturnFromScriptFactory(IPackageScript installScript) |
||||
{ |
||||
scriptFactory.Stub(factory => factory.CreatePackageInstallScript( |
||||
Arg<IPackage>.Is.Anything, |
||||
Arg<string>.Is.Anything)) |
||||
.Return(installScript); |
||||
} |
||||
|
||||
void SetUninstallScriptToReturnFromScriptFactory(IPackageScript uninstallScript) |
||||
{ |
||||
scriptFactory.Stub(factory => factory.CreatePackageUninstallScript( |
||||
Arg<IPackage>.Is.Anything, |
||||
Arg<string>.Is.Anything)) |
||||
.Return(uninstallScript); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_OneProjectAndOnePackageIsInstalled_PackageInitializeScriptCreated() |
||||
{ |
||||
IPackageManagementProject project = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript initScript = CreatePackageScript(); |
||||
SetInitScriptToReturnFromScriptFactory(initScript); |
||||
IPackage package = CreatePackage(); |
||||
string installPath = @"d:\projects\MyProject\packages\foo"; |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(package, installPath); |
||||
|
||||
FirePackageInstalledEvent(project, eventArgs); |
||||
|
||||
scriptFactory.AssertWasCalled(factory => factory.CreatePackageInitializeScript(package, installPath)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_OneProjectAndOnePackageIsInstalled_PackageInitializeScriptIsRun() |
||||
{ |
||||
IPackageManagementProject project = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript initScript = CreatePackageScript(); |
||||
SetInitScriptToReturnFromScriptFactory(initScript); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
FirePackageInstalledEvent(project, eventArgs); |
||||
|
||||
scriptRunner.AssertWasCalled(runner => runner.Run(initScript)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_OneProjectAndOnePackageIsInstalled_ProjectSetForPackageScript() |
||||
{ |
||||
IPackageManagementProject project = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript initScript = CreatePackageScript(); |
||||
SetInitScriptToReturnFromScriptFactory(initScript); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
FirePackageInstalledEvent(project, eventArgs); |
||||
|
||||
Assert.AreEqual(project, initScript.Project); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_TwoProjectsAndPackageIsInstalledForSecondProject_PackageInitializeScriptIsRun() |
||||
{ |
||||
IPackageManagementProject project1 = AddProject(); |
||||
IPackageManagementProject project2 = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript initScript = CreatePackageScript(); |
||||
SetInitScriptToReturnFromScriptFactory(initScript); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
FirePackageInstalledEvent(project2, eventArgs); |
||||
|
||||
scriptRunner.AssertWasCalled(runner => runner.Run(initScript)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_TwoProjectsAndPackageIsInstalledForSecondProject_SecondProjectSetForPackageScript() |
||||
{ |
||||
IPackageManagementProject project1 = AddProject(); |
||||
IPackageManagementProject project2 = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript initScript = CreatePackageScript(); |
||||
SetInitScriptToReturnFromScriptFactory(initScript); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
FirePackageInstalledEvent(project2, eventArgs); |
||||
|
||||
Assert.AreEqual(project2, initScript.Project); |
||||
} |
||||
|
||||
[Test] |
||||
public void Dispose_OneProjectAndOnePackageIsInstalledAfterScriptsActionIsDisposed_PackageInitializeScriptIsNotRun() |
||||
{ |
||||
IPackageManagementProject project = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript initScript = CreatePackageScript(); |
||||
SetInitScriptToReturnFromScriptFactory(initScript); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
action.Dispose(); |
||||
FirePackageInstalledEvent(project, eventArgs); |
||||
|
||||
scriptRunner.AssertWasNotCalled(runner => runner.Run(Arg<IPackageScript>.Is.Anything)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Dispose_TwoProjectsAndOnePackageIsInstalledForSecondProjectAfterScriptsActionIsDisposed_PackageInitializeScriptIsNotRun() |
||||
{ |
||||
IPackageManagementProject project1 = AddProject(); |
||||
IPackageManagementProject project2 = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript initScript = CreatePackageScript(); |
||||
SetInitScriptToReturnFromScriptFactory(initScript); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
action.Dispose(); |
||||
FirePackageInstalledEvent(project2, eventArgs); |
||||
|
||||
scriptRunner.AssertWasNotCalled(runner => runner.Run(Arg<IPackageScript>.Is.Anything)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_OneProjectAndPackageReferencedAddedToProject_PackageInstallScriptCreated() |
||||
{ |
||||
IPackageManagementProject project = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript installScript = CreatePackageScript(); |
||||
SetInstallScriptToReturnFromScriptFactory(installScript); |
||||
IPackage package = CreatePackage(); |
||||
string installPath = @"d:\projects\MyProject\packages\foo"; |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(package, installPath); |
||||
|
||||
FirePackageReferenceAddedEvent(project, eventArgs); |
||||
|
||||
scriptFactory.AssertWasCalled(factory => factory.CreatePackageInstallScript(package, installPath)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_TwoProjectsAndPackageReferencedAddedToSecondProject_PackageInstallScriptIsRun() |
||||
{ |
||||
IPackageManagementProject project1 = AddProject(); |
||||
IPackageManagementProject project2 = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript installScript = CreatePackageScript(); |
||||
SetInstallScriptToReturnFromScriptFactory(installScript); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
FirePackageReferenceAddedEvent(project2, eventArgs); |
||||
|
||||
scriptRunner.AssertWasCalled(runner => runner.Run(installScript)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_TwoProjectsAndPackageReferencedIsAddedForSecondProject_SecondProjectSetForPackageScript() |
||||
{ |
||||
IPackageManagementProject project1 = AddProject(); |
||||
IPackageManagementProject project2 = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript installScript = CreatePackageScript(); |
||||
SetInstallScriptToReturnFromScriptFactory(installScript); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
FirePackageReferenceAddedEvent(project2, eventArgs); |
||||
|
||||
Assert.AreEqual(project2, installScript.Project); |
||||
} |
||||
|
||||
[Test] |
||||
public void Dispose_OneProjectAndPackageReferencedAddedToProjectAfterActionIsDisposed_PackageInstallScriptIsNotRun() |
||||
{ |
||||
IPackageManagementProject project = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript installScript = CreatePackageScript(); |
||||
SetInstallScriptToReturnFromScriptFactory(installScript); |
||||
IPackage package = CreatePackage(); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
action.Dispose(); |
||||
FirePackageReferenceAddedEvent(project, eventArgs); |
||||
|
||||
scriptRunner.AssertWasNotCalled(runner => runner.Run(installScript)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_OneProjectAndPackageReferencedRemovedFromProject_PackageUninstallScriptCreated() |
||||
{ |
||||
IPackageManagementProject project = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript uninstallScript = CreatePackageScript(); |
||||
SetUninstallScriptToReturnFromScriptFactory(uninstallScript); |
||||
IPackage package = CreatePackage(); |
||||
string installPath = @"d:\projects\MyProject\packages\foo"; |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(package, installPath); |
||||
|
||||
FirePackageReferenceRemovedEvent(project, eventArgs); |
||||
|
||||
scriptFactory.AssertWasCalled(factory => factory.CreatePackageUninstallScript(package, installPath)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_TwoProjectsAndPackageReferencedRemovedFromSecondProject_PackageUninstallScriptIsRun() |
||||
{ |
||||
IPackageManagementProject project1 = AddProject(); |
||||
IPackageManagementProject project2 = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript uninstallScript = CreatePackageScript(); |
||||
SetUninstallScriptToReturnFromScriptFactory(uninstallScript); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
FirePackageReferenceRemovedEvent(project2, eventArgs); |
||||
|
||||
scriptRunner.AssertWasCalled(runner => runner.Run(uninstallScript)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_TwoProjectsAndPackageReferencedIsRemovedFromSecondProject_SecondProjectSetForPackageScript() |
||||
{ |
||||
IPackageManagementProject project1 = AddProject(); |
||||
IPackageManagementProject project2 = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript uninstallScript = CreatePackageScript(); |
||||
SetUninstallScriptToReturnFromScriptFactory(uninstallScript); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
FirePackageReferenceRemovedEvent(project2, eventArgs); |
||||
|
||||
Assert.AreEqual(project2, uninstallScript.Project); |
||||
} |
||||
|
||||
[Test] |
||||
public void Dispose_OneProjectAndPackageReferencedRemovedFromProjectAfterActionIsDisposed_PackageUninstallScriptIsNotRun() |
||||
{ |
||||
IPackageManagementProject project = AddProject(); |
||||
CreateAction(); |
||||
IPackageScript uninstallScript = CreatePackageScript(); |
||||
SetUninstallScriptToReturnFromScriptFactory(uninstallScript); |
||||
PackageOperationEventArgs eventArgs = CreatePackageOperationEventArgs(); |
||||
|
||||
action.Dispose(); |
||||
FirePackageReferenceRemovedEvent(project, eventArgs); |
||||
|
||||
scriptRunner.AssertWasNotCalled(runner => runner.Run(uninstallScript)); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,311 @@
@@ -0,0 +1,311 @@
|
||||
// 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.Collections.Generic; |
||||
using ICSharpCode.PackageManagement; |
||||
using ICSharpCode.PackageManagement.Scripting; |
||||
using NuGet; |
||||
using NUnit.Framework; |
||||
using PackageManagement.Tests.Helpers; |
||||
using Rhino.Mocks; |
||||
|
||||
namespace PackageManagement.Tests |
||||
{ |
||||
[TestFixture] |
||||
public class UpdateSolutionPackagesActionTests |
||||
{ |
||||
TestableUpdateSolutionPackagesAction action; |
||||
IPackageManagementSolution solution; |
||||
List<IPackageManagementProject> projects; |
||||
IPackageRepository sourceRepository; |
||||
|
||||
void CreateAction() |
||||
{ |
||||
CreateSolution(); |
||||
action = new TestableUpdateSolutionPackagesAction(solution); |
||||
} |
||||
|
||||
void CreateActionWithOperations(params PackageOperation[] operations) |
||||
{ |
||||
CreateAction(); |
||||
action.AddOperations(operations); |
||||
} |
||||
|
||||
void CreateSolution() |
||||
{ |
||||
projects = new List<IPackageManagementProject>(); |
||||
sourceRepository = MockRepository.GenerateStub<IPackageRepository>(); |
||||
|
||||
solution = MockRepository.GenerateStub<IPackageManagementSolution>(); |
||||
solution |
||||
.Stub(s => s.GetProjects(sourceRepository)) |
||||
.Return(projects); |
||||
} |
||||
|
||||
IPackageFromRepository CreatePackage(string packageId, string version) |
||||
{ |
||||
var package = MockRepository.GenerateStub<IPackageFromRepository>(); |
||||
package.Stub(p => p.Id).Return(packageId); |
||||
package.Stub(p => p.Version).Return(new SemanticVersion(version)); |
||||
package.Stub(p => p.Repository).Return(sourceRepository); |
||||
return package; |
||||
} |
||||
|
||||
void ProjectHasOlderVersionOfPackage(IPackageManagementProject project, IPackageFromRepository package) |
||||
{ |
||||
project.Stub(p => p.HasOlderPackageInstalled(package)).Return(true); |
||||
} |
||||
|
||||
PackageOperation CreateInstallOperationWithFile(string fileName) |
||||
{ |
||||
return PackageOperationHelper.CreateInstallOperationWithFile(fileName); |
||||
} |
||||
|
||||
IPackageScriptRunner CreatePackageScriptRunner() |
||||
{ |
||||
return MockRepository.GenerateStub<IPackageScriptRunner>(); |
||||
} |
||||
|
||||
IPackageManagementProject AddProjectToSolution() |
||||
{ |
||||
IPackageManagementProject project = MockRepository.GenerateStub<IPackageManagementProject>(); |
||||
projects.Add(project); |
||||
return project; |
||||
} |
||||
|
||||
IPackageFromRepository AddPackageToAction(string packageId, string version) |
||||
{ |
||||
IPackageFromRepository package = CreatePackage(packageId, version); |
||||
action.AddPackages(new IPackageFromRepository[] { package }); |
||||
return package; |
||||
} |
||||
|
||||
[Test] |
||||
public void UpdateDependencies_DefaultValue_IsTrue() |
||||
{ |
||||
CreateActionWithOperations(); |
||||
|
||||
bool result = action.UpdateDependencies; |
||||
|
||||
Assert.IsTrue(result); |
||||
} |
||||
|
||||
[Test] |
||||
public void HasPackageScriptsToRun_PackageHasInitPowerShellScript_ReturnsTrue() |
||||
{ |
||||
PackageOperation operation = CreateInstallOperationWithFile(@"tools\install.ps1"); |
||||
CreateActionWithOperations(operation); |
||||
|
||||
bool result = action.HasPackageScriptsToRun(); |
||||
|
||||
Assert.IsTrue(result); |
||||
} |
||||
|
||||
[Test] |
||||
public void HasPackageScriptsToRun_PackageHasOneTextFile_ReturnsFalse() |
||||
{ |
||||
PackageOperation operation = CreateInstallOperationWithFile(@"tools\readme.txt"); |
||||
CreateActionWithOperations(operation); |
||||
|
||||
bool result = action.HasPackageScriptsToRun(); |
||||
|
||||
Assert.IsFalse(result); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_OneProjectThatHasOlderVersionOfPackageBeingUpdated_PackageOperationsAreRun() |
||||
{ |
||||
PackageOperation operation = CreateInstallOperationWithFile(@"tools\readme.txt"); |
||||
CreateActionWithOperations(operation); |
||||
IPackageFromRepository package = AddPackageToAction("Test", "1.0"); |
||||
IPackageManagementProject project = AddProjectToSolution(); |
||||
var expectedOperations = new PackageOperation[] { operation }; |
||||
|
||||
action.Execute(); |
||||
|
||||
project.AssertWasCalled(p => p.RunPackageOperations(expectedOperations)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_OneProjectThatHasOlderVersionOfPackageBeingUpdated_PackageReferenceUpdatedInProject() |
||||
{ |
||||
CreateAction(); |
||||
IPackageFromRepository package = AddPackageToAction("Test", "1.0"); |
||||
IPackageManagementProject project = AddProjectToSolution(); |
||||
ProjectHasOlderVersionOfPackage(project, package); |
||||
|
||||
action.Execute(); |
||||
|
||||
project.AssertWasCalled(p => p.UpdatePackageReference(package, action)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_OneProjectThatHasOlderVersionsOfTwoPackagesBeingUpdated_PackageReferenceUpdatedInProjectForBothPackages() |
||||
{ |
||||
CreateAction(); |
||||
IPackageFromRepository package1 = AddPackageToAction("A", "1.0"); |
||||
IPackageFromRepository package2 = AddPackageToAction("B", "1.0"); |
||||
IPackageManagementProject project = AddProjectToSolution(); |
||||
ProjectHasOlderVersionOfPackage(project, package1); |
||||
ProjectHasOlderVersionOfPackage(project, package2); |
||||
|
||||
action.Execute(); |
||||
|
||||
project.AssertWasCalled(p => p.UpdatePackageReference(package1, action)); |
||||
project.AssertWasCalled(p => p.UpdatePackageReference(package2, action)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_TwoProjectsThatHaveOlderVersionsOfPackageBeingUpdated_PackageReferenceUpdatedInBothProjects() |
||||
{ |
||||
CreateAction(); |
||||
IPackageFromRepository package = AddPackageToAction("A", "1.0"); |
||||
IPackageManagementProject project1 = AddProjectToSolution(); |
||||
IPackageManagementProject project2 = AddProjectToSolution(); |
||||
ProjectHasOlderVersionOfPackage(project1, package); |
||||
ProjectHasOlderVersionOfPackage(project2, package); |
||||
|
||||
action.Execute(); |
||||
|
||||
project1.AssertWasCalled(p => p.UpdatePackageReference(package, action)); |
||||
project2.AssertWasCalled(p => p.UpdatePackageReference(package, action)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_TwoProjectsAndOnlyOneHasOlderVersionsOfPackageBeingUpdated_PackageReferenceUpdatedInOnlyOneProject() |
||||
{ |
||||
CreateAction(); |
||||
IPackageFromRepository package = AddPackageToAction("A", "1.0"); |
||||
IPackageManagementProject project1 = AddProjectToSolution(); |
||||
IPackageManagementProject project2 = AddProjectToSolution(); |
||||
ProjectHasOlderVersionOfPackage(project2, package); |
||||
|
||||
action.Execute(); |
||||
|
||||
project1.AssertWasNotCalled(p => p.UpdatePackageReference(package, action)); |
||||
project2.AssertWasCalled(p => p.UpdatePackageReference(package, action)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_PackageScriptRunnerSet_RunPackageScriptsActionCreatedUsingPackageScriptRunner() |
||||
{ |
||||
CreateAction(); |
||||
IPackageScriptRunner expectedRunner = CreatePackageScriptRunner(); |
||||
action.PackageScriptRunner = expectedRunner; |
||||
AddPackageToAction("Test", "1.0"); |
||||
AddProjectToSolution(); |
||||
|
||||
action.Execute(); |
||||
|
||||
IPackageScriptRunner actualRunner = action.ScriptRunnerPassedToCreateRunPackageScriptsAction; |
||||
Assert.AreEqual(expectedRunner, actualRunner); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_PackageScriptRunnerSet_RunPackageScriptsActionCreatedUsingProjects() |
||||
{ |
||||
CreateAction(); |
||||
AddPackageToAction("Test", "1.0"); |
||||
IPackageManagementProject project1 = AddProjectToSolution(); |
||||
IPackageManagementProject project2 = AddProjectToSolution(); |
||||
var expectedProjects = new IPackageManagementProject[] { |
||||
project1, |
||||
project2 |
||||
}; |
||||
action.PackageScriptRunner = CreatePackageScriptRunner(); |
||||
|
||||
action.Execute(); |
||||
|
||||
Assert.AreEqual(expectedProjects, action.ProjectsPassedToCreateRunPackageScriptsAction); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_PackageScriptRunnerSet_RunPackageScriptsActionIsDisposed() |
||||
{ |
||||
CreateAction(); |
||||
AddPackageToAction("Test", "1.0"); |
||||
AddProjectToSolution(); |
||||
action.PackageScriptRunner = CreatePackageScriptRunner(); |
||||
|
||||
action.Execute(); |
||||
|
||||
Assert.IsTrue(action.IsRunPackageScriptsActionDisposed); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_NullPackageScriptRunner_RunPackageScriptsActionIsNotCreated() |
||||
{ |
||||
CreateAction(); |
||||
AddPackageToAction("Test", "1.0"); |
||||
AddProjectToSolution(); |
||||
action.PackageScriptRunner = null; |
||||
|
||||
action.Execute(); |
||||
|
||||
Assert.IsFalse(action.IsRunPackageScriptsActionCreated); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_PackageScriptRunnerSet_PackageReferenceUpdatedInProject() |
||||
{ |
||||
CreateAction(); |
||||
IPackageFromRepository package = AddPackageToAction("Test", "1.0"); |
||||
IPackageManagementProject project = AddProjectToSolution(); |
||||
ProjectHasOlderVersionOfPackage(project, package); |
||||
action.PackageScriptRunner = CreatePackageScriptRunner(); |
||||
|
||||
action.Execute(); |
||||
|
||||
project.AssertWasCalled(p => p.UpdatePackageReference(package, action)); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_PackageScriptRunnerSet_ProjectsFromSolutionReadOnlyOnce() |
||||
{ |
||||
CreateAction(); |
||||
IPackageFromRepository package = AddPackageToAction("Test", "1.0"); |
||||
IPackageManagementProject project = AddProjectToSolution(); |
||||
ProjectHasOlderVersionOfPackage(project, package); |
||||
action.PackageScriptRunner = CreatePackageScriptRunner(); |
||||
|
||||
action.Execute(); |
||||
|
||||
solution.AssertWasCalled( |
||||
s => s.GetProjects(sourceRepository), |
||||
setupConstraint => setupConstraint.Repeat.Once()); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_NullPackageScriptRunner_ProjectsFromSolutionReadOnlyOnce() |
||||
{ |
||||
CreateAction(); |
||||
IPackageFromRepository package = AddPackageToAction("Test", "1.0"); |
||||
IPackageManagementProject project = AddProjectToSolution(); |
||||
ProjectHasOlderVersionOfPackage(project, package); |
||||
action.PackageScriptRunner = null; |
||||
|
||||
action.Execute(); |
||||
|
||||
solution.AssertWasCalled( |
||||
s => s.GetProjects(sourceRepository), |
||||
setupConstraint => setupConstraint.Repeat.Once()); |
||||
} |
||||
|
||||
[Test] |
||||
public void Execute_TwoProjectsBeingUpdated_LoggerSetOnBothProjects() |
||||
{ |
||||
CreateAction(); |
||||
ILogger logger = MockRepository.GenerateStub<ILogger>(); |
||||
action.Logger = logger; |
||||
IPackageFromRepository package = AddPackageToAction("A", "1.0"); |
||||
IPackageManagementProject project1 = AddProjectToSolution(); |
||||
IPackageManagementProject project2 = AddProjectToSolution(); |
||||
|
||||
action.Execute(); |
||||
|
||||
Assert.AreEqual(logger, project1.Logger); |
||||
Assert.AreEqual(logger, project2.Logger); |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue