Browse Source

Move install/uninstall/update package actions to project.

pull/15/head
Matt Ward 15 years ago
parent
commit
e7fb02720a
  1. 7
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs
  2. 9
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UninstallPackageCmdlet.cs
  3. 7
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
  4. 33
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs
  5. 32
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UninstallPackageCmdletTests.cs
  6. 32
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs
  7. 2
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeInstallPackageTask.cs
  8. 21
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
  9. 24
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs
  10. 2
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUninstallPackageAction.cs
  11. 2
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUpdatePackageAction.cs
  12. 4
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs
  13. 4
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs
  14. 7
      src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs
  15. 19
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs
  16. 12
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProjectFactory.cs
  17. 17
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs
  18. 14
      src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
  19. 8
      src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs
  20. 10
      src/AddIns/Misc/PackageManagement/Project/Src/UninstallPackageAction.cs
  21. 8
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageAction.cs
  22. 3
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs
  23. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  24. 25
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageManagementProject.cs
  25. 12
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageManagementService.cs
  26. 8
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs
  27. 62
      src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs
  28. 13
      src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs

7
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs

@ -58,12 +58,13 @@ namespace ICSharpCode.PackageManagement.Cmdlets
action.Execute(); action.Execute();
} }
InstallPackageAction CreateInstallPackageTask(PackageSource packageSource, MSBuildBasedProject project) InstallPackageAction CreateInstallPackageTask(PackageSource packageSource, MSBuildBasedProject msbuildProject)
{ {
InstallPackageAction action = Solution.CreateInstallPackageAction(); IPackageManagementProject project = Solution.CreateProject(packageSource, msbuildProject);
InstallPackageAction action = project.CreateInstallPackageAction();
action.PackageId = Id; action.PackageId = Id;
action.PackageVersion = Version; action.PackageVersion = Version;
action.MSBuildProject = project; action.MSBuildProject = msbuildProject;
action.PackageSource = packageSource; action.PackageSource = packageSource;
action.IgnoreDependencies = IgnoreDependencies.IsPresent; action.IgnoreDependencies = IgnoreDependencies.IsPresent;
return action; return action;

9
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UninstallPackageCmdlet.cs

@ -54,7 +54,7 @@ namespace ICSharpCode.PackageManagement.Cmdlets
MSBuildBasedProject project = GetActiveProject(ProjectName); MSBuildBasedProject project = GetActiveProject(ProjectName);
PackageSource packageSource = GetActivePackageSource(); PackageSource packageSource = GetActivePackageSource();
UninstallPackageAction action = CreateUninstallPackageAction(project, packageSource); UninstallPackageAction action = CreateUninstallPackageAction(packageSource, project);
action.Execute(); action.Execute();
} }
@ -63,12 +63,13 @@ namespace ICSharpCode.PackageManagement.Cmdlets
return GetActivePackageSource(null); return GetActivePackageSource(null);
} }
UninstallPackageAction CreateUninstallPackageAction(MSBuildBasedProject project, PackageSource packageSource) UninstallPackageAction CreateUninstallPackageAction(PackageSource packageSource, MSBuildBasedProject msbuildProject)
{ {
var action = Solution.CreateUninstallPackageAction(); IPackageManagementProject project = Solution.CreateProject(packageSource, msbuildProject);
UninstallPackageAction action = project.CreateUninstallPackageAction();
action.PackageId = Id; action.PackageId = Id;
action.PackageVersion = Version; action.PackageVersion = Version;
action.MSBuildProject = project; action.MSBuildProject = msbuildProject;
action.PackageSource = packageSource; action.PackageSource = packageSource;
action.ForceRemove = Force.IsPresent; action.ForceRemove = Force.IsPresent;
action.RemoveDependencies = RemoveDependencies.IsPresent; action.RemoveDependencies = RemoveDependencies.IsPresent;

7
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs

@ -58,11 +58,12 @@ namespace ICSharpCode.PackageManagement.Cmdlets
action.Execute(); action.Execute();
} }
UpdatePackageAction CreateUpdatePackageAction(PackageSource packageSource, MSBuildBasedProject project) UpdatePackageAction CreateUpdatePackageAction(PackageSource packageSource, MSBuildBasedProject msbuildProject)
{ {
var action = Solution.CreateUpdatePackageAction(); IPackageManagementProject project = Solution.CreateProject(packageSource, msbuildProject);
UpdatePackageAction action = project.CreateUpdatePackageAction();
action.PackageSource = packageSource; action.PackageSource = packageSource;
action.MSBuildProject = project; action.MSBuildProject = msbuildProject;
action.PackageId = Id; action.PackageId = Id;
action.PackageVersion = Version; action.PackageVersion = Version;
action.UpdateDependencies = !IgnoreDependencies.IsPresent; action.UpdateDependencies = !IgnoreDependencies.IsPresent;

33
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs

@ -19,6 +19,7 @@ namespace PackageManagement.Cmdlets.Tests
TestableInstallPackageCmdlet cmdlet; TestableInstallPackageCmdlet cmdlet;
FakeCmdletTerminatingError fakeTerminatingError; FakeCmdletTerminatingError fakeTerminatingError;
FakePackageManagementSolution fakeSolution; FakePackageManagementSolution fakeSolution;
FakePackageManagementProject fakeProject;
FakeInstallPackageAction fakeInstallPackageTask; FakeInstallPackageAction fakeInstallPackageTask;
void CreateCmdletWithoutActiveProject() void CreateCmdletWithoutActiveProject()
@ -27,7 +28,8 @@ namespace PackageManagement.Cmdlets.Tests
fakeTerminatingError = cmdlet.FakeCmdletTerminatingError; fakeTerminatingError = cmdlet.FakeCmdletTerminatingError;
fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost; fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost;
fakeSolution = cmdlet.FakeSolution; fakeSolution = cmdlet.FakeSolution;
fakeInstallPackageTask = fakeSolution.ActionToReturnFromCreateInstallPackageAction; fakeProject = fakeSolution.FakeProject;
fakeInstallPackageTask = fakeProject.FakeInstallPackageAction;
} }
void CreateCmdletWithActivePackageSourceAndProject() void CreateCmdletWithActivePackageSourceAndProject()
@ -130,6 +132,20 @@ namespace PackageManagement.Cmdlets.Tests
Assert.AreEqual(project, actualProject); Assert.AreEqual(project, actualProject);
} }
[Test]
public void ProcessRecord_PackageIdSpecified_ActiveProjectUsedToCreateProject()
{
CreateCmdletWithoutActiveProject();
AddPackageSourceToConsoleHost();
var project = AddDefaultProjectToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
var actualProject = fakeSolution.ProjectPassedToCreateProject;
Assert.AreEqual(project, actualProject);
}
[Test] [Test]
public void ProcessRecord_IgnoreDependenciesParameterSet_IgnoreDependenciesIsTrueWhenInstallingPackage() public void ProcessRecord_IgnoreDependenciesParameterSet_IgnoreDependenciesIsTrueWhenInstallingPackage()
{ {
@ -172,6 +188,21 @@ namespace PackageManagement.Cmdlets.Tests
Assert.AreEqual(expected, actual); Assert.AreEqual(expected, actual);
} }
[Test]
public void ProcessRecord_SourceParameterSet_CustomSourceUsedWhenCreatingProject()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
SetSourceParameter("http://sharpdevelop.net/packages");
RunCmdlet();
var expected = "http://sharpdevelop.net/packages";
var actual = fakeSolution.PackageSourcePassedToCreateProject.Source;
Assert.AreEqual(expected, actual);
}
[Test] [Test]
public void ProcessRecord_PackageVersionParameterSet_VersionUsedWhenInstallingPackage() public void ProcessRecord_PackageVersionParameterSet_VersionUsedWhenInstallingPackage()
{ {

32
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UninstallPackageCmdletTests.cs

@ -16,6 +16,7 @@ namespace PackageManagement.Cmdlets.Tests
TestableUninstallPackageCmdlet cmdlet; TestableUninstallPackageCmdlet cmdlet;
FakeCmdletTerminatingError fakeTerminatingError; FakeCmdletTerminatingError fakeTerminatingError;
FakePackageManagementSolution fakeSolution; FakePackageManagementSolution fakeSolution;
FakePackageManagementProject fakeProject;
FakeUninstallPackageAction uninstallPackageAction; FakeUninstallPackageAction uninstallPackageAction;
void CreateCmdletWithoutActiveProject() void CreateCmdletWithoutActiveProject()
@ -24,7 +25,8 @@ namespace PackageManagement.Cmdlets.Tests
fakeTerminatingError = cmdlet.FakeCmdletTerminatingError; fakeTerminatingError = cmdlet.FakeCmdletTerminatingError;
fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost; fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost;
fakeSolution = cmdlet.FakeSolution; fakeSolution = cmdlet.FakeSolution;
uninstallPackageAction = fakeSolution.ActionToReturnFromCreateUninstallPackageAction; fakeProject = fakeSolution.FakeProject;
uninstallPackageAction = fakeProject.FakeUninstallPackageAction;
} }
void CreateCmdletWithActivePackageSourceAndProject() void CreateCmdletWithActivePackageSourceAndProject()
@ -113,6 +115,20 @@ namespace PackageManagement.Cmdlets.Tests
Assert.AreEqual(project, actualProject); Assert.AreEqual(project, actualProject);
} }
[Test]
public void ProcessRecord_PackageIdSpecified_ActiveProjectUsedToCreateProject()
{
CreateCmdletWithoutActiveProject();
AddPackageSourceToConsoleHost();
var project = AddDefaultProjectToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
var actualProject = fakeSolution.ProjectPassedToCreateProject;
Assert.AreEqual(project, actualProject);
}
[Test] [Test]
public void ProcessRecord_ForceParameterSet_PackageForcefullyUninstalled() public void ProcessRecord_ForceParameterSet_PackageForcefullyUninstalled()
{ {
@ -240,6 +256,20 @@ namespace PackageManagement.Cmdlets.Tests
Assert.AreEqual(packageSource, actualPackageSource); Assert.AreEqual(packageSource, actualPackageSource);
} }
[Test]
public void ProcessRecord_PackageIdSpecified_ActivePackageSourceUsedToCreateProject()
{
CreateCmdletWithoutActiveProject();
AddDefaultProjectToConsoleHost();
var packageSource = AddPackageSourceToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
var actualPackageSource = fakeSolution.PackageSourcePassedToCreateProject;
Assert.AreEqual(packageSource, actualPackageSource);
}
[Test] [Test]
public void ProcessRecord_PackageIdSpecified_PackageIsUninstalled() public void ProcessRecord_PackageIdSpecified_PackageIsUninstalled()
{ {

32
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs

@ -16,6 +16,7 @@ namespace PackageManagement.Cmdlets.Tests
TestableUpdatePackageCmdlet cmdlet; TestableUpdatePackageCmdlet cmdlet;
FakeCmdletTerminatingError fakeTerminatingError; FakeCmdletTerminatingError fakeTerminatingError;
FakePackageManagementSolution fakeSolution; FakePackageManagementSolution fakeSolution;
FakePackageManagementProject fakeProject;
FakeUpdatePackageAction fakeUpdatePackageAction; FakeUpdatePackageAction fakeUpdatePackageAction;
void CreateCmdletWithoutActiveProject() void CreateCmdletWithoutActiveProject()
@ -24,7 +25,8 @@ namespace PackageManagement.Cmdlets.Tests
fakeTerminatingError = cmdlet.FakeCmdletTerminatingError; fakeTerminatingError = cmdlet.FakeCmdletTerminatingError;
fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost; fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost;
fakeSolution = cmdlet.FakeSolution; fakeSolution = cmdlet.FakeSolution;
fakeUpdatePackageAction = fakeSolution.ActionToReturnFromCreateUpdatePackageAction; fakeProject = fakeSolution.FakeProject;
fakeUpdatePackageAction = fakeProject.FakeUpdatePackageAction;
} }
void CreateCmdletWithActivePackageSourceAndProject() void CreateCmdletWithActivePackageSourceAndProject()
@ -113,6 +115,20 @@ namespace PackageManagement.Cmdlets.Tests
Assert.AreEqual(packageSource, actualPackageSource); Assert.AreEqual(packageSource, actualPackageSource);
} }
[Test]
public void ProcessRecord_PackageIdSpecified_ActivePackageSourceUsedToCreateProject()
{
CreateCmdletWithoutActiveProject();
AddDefaultProjectToConsoleHost();
var packageSource = AddPackageSourceToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
var actualPackageSource = fakeSolution.PackageSourcePassedToCreateProject;
Assert.AreEqual(packageSource, actualPackageSource);
}
[Test] [Test]
public void ProcessRecord_PackageIdSpecified_ActiveProjectUsedToUpdatePackage() public void ProcessRecord_PackageIdSpecified_ActiveProjectUsedToUpdatePackage()
{ {
@ -127,6 +143,20 @@ namespace PackageManagement.Cmdlets.Tests
Assert.AreEqual(project, actualProject); Assert.AreEqual(project, actualProject);
} }
[Test]
public void ProcessRecord_PackageIdSpecified_ActiveProjectUsedToCreateProject()
{
CreateCmdletWithoutActiveProject();
AddPackageSourceToConsoleHost();
var project = AddDefaultProjectToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
var actualProject = fakeSolution.ProjectPassedToCreateProject;
Assert.AreEqual(project, actualProject);
}
[Test] [Test]
public void ProcessRecord_IgnoreDependenciesParameterSet_UpdateDependenciesIsFalseWhenUpdatingPackage() public void ProcessRecord_IgnoreDependenciesParameterSet_UpdateDependenciesIsFalseWhenUpdatingPackage()
{ {

2
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeInstallPackageTask.cs

@ -8,7 +8,7 @@ namespace ICSharpCode.PackageManagement.Design
public class FakeInstallPackageAction : InstallPackageAction public class FakeInstallPackageAction : InstallPackageAction
{ {
public FakeInstallPackageAction() public FakeInstallPackageAction()
: base(null, null) : base((IPackageManagementProject)null, null)
{ {
} }

21
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs

@ -86,5 +86,26 @@ namespace ICSharpCode.PackageManagement.Design
PackageOperationsPassedToUpdatePackage = operations; PackageOperationsPassedToUpdatePackage = operations;
UpdateDependenciesPassedToUpdatePackage = updateDependencies; UpdateDependenciesPassedToUpdatePackage = updateDependencies;
} }
public FakeInstallPackageAction FakeInstallPackageAction = new FakeInstallPackageAction();
public virtual InstallPackageAction CreateInstallPackageAction()
{
return FakeInstallPackageAction;
}
public FakeUninstallPackageAction FakeUninstallPackageAction = new FakeUninstallPackageAction();
public virtual UninstallPackageAction CreateUninstallPackageAction()
{
return FakeUninstallPackageAction;
}
public FakeUpdatePackageAction FakeUpdatePackageAction = new FakeUpdatePackageAction();
public UpdatePackageAction CreateUpdatePackageAction()
{
return FakeUpdatePackageAction;
}
} }
} }

24
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs

@ -12,22 +12,6 @@ namespace ICSharpCode.PackageManagement.Design
{ {
public class FakePackageManagementSolution : IPackageManagementSolution public class FakePackageManagementSolution : IPackageManagementSolution
{ {
public FakeInstallPackageAction ActionToReturnFromCreateInstallPackageAction =
new FakeInstallPackageAction();
public virtual InstallPackageAction CreateInstallPackageAction()
{
return ActionToReturnFromCreateInstallPackageAction;
}
public FakeUninstallPackageAction ActionToReturnFromCreateUninstallPackageAction =
new FakeUninstallPackageAction();
public virtual UninstallPackageAction CreateUninstallPackageAction()
{
return ActionToReturnFromCreateUninstallPackageAction;
}
public void AddPackageToActiveProjectLocalRepository(FakePackage package) public void AddPackageToActiveProjectLocalRepository(FakePackage package)
{ {
FakeProject.FakePackages.Add(package); FakeProject.FakePackages.Add(package);
@ -40,14 +24,6 @@ namespace ICSharpCode.PackageManagement.Design
return package; return package;
} }
public FakeUpdatePackageAction ActionToReturnFromCreateUpdatePackageAction =
new FakeUpdatePackageAction();
public UpdatePackageAction CreateUpdatePackageAction()
{
return ActionToReturnFromCreateUpdatePackageAction;
}
public int GetActiveProjectCallCount; public int GetActiveProjectCallCount;
public FakePackageManagementProject FakeProject = new FakePackageManagementProject(); public FakePackageManagementProject FakeProject = new FakePackageManagementProject();

2
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUninstallPackageAction.cs

@ -10,7 +10,7 @@ namespace ICSharpCode.PackageManagement.Design
public bool IsExecuted; public bool IsExecuted;
public FakeUninstallPackageAction() public FakeUninstallPackageAction()
: base(null, null) : base((IPackageManagementProject)null, null)
{ {
} }

2
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUpdatePackageAction.cs

@ -10,7 +10,7 @@ namespace ICSharpCode.PackageManagement.Design
public bool IsExecuted; public bool IsExecuted;
public FakeUpdatePackageAction() public FakeUpdatePackageAction()
: base(null, null) : base((IPackageManagementProject)null, null)
{ {
} }

4
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs

@ -23,5 +23,9 @@ namespace ICSharpCode.PackageManagement
void InstallPackage(IPackage package, IEnumerable<PackageOperation> operations, bool ignoreDependencies); void InstallPackage(IPackage package, IEnumerable<PackageOperation> operations, bool ignoreDependencies);
void UpdatePackage(IPackage package, IEnumerable<PackageOperation> operations, bool updateDependencies); void UpdatePackage(IPackage package, IEnumerable<PackageOperation> operations, bool updateDependencies);
void UninstallPackage(IPackage package, bool forceRemove, bool removeDependencies); void UninstallPackage(IPackage package, bool forceRemove, bool removeDependencies);
InstallPackageAction CreateInstallPackageAction();
UninstallPackageAction CreateUninstallPackageAction();
UpdatePackageAction CreateUpdatePackageAction();
} }
} }

4
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs

@ -14,9 +14,5 @@ namespace ICSharpCode.PackageManagement
IPackageManagementProject CreateProject(PackageSource source, MSBuildBasedProject project); IPackageManagementProject CreateProject(PackageSource source, MSBuildBasedProject project);
IPackageManagementProject CreateProject(IPackageRepository sourceRepository, MSBuildBasedProject project); IPackageManagementProject CreateProject(IPackageRepository sourceRepository, MSBuildBasedProject project);
IPackageManagementProject GetActiveProject(IPackageRepository sourceRepository); IPackageManagementProject GetActiveProject(IPackageRepository sourceRepository);
InstallPackageAction CreateInstallPackageAction();
UninstallPackageAction CreateUninstallPackageAction();
UpdatePackageAction CreateUpdatePackageAction();
} }
} }

7
src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs

@ -17,6 +17,13 @@ namespace ICSharpCode.PackageManagement
{ {
} }
public InstallPackageAction(
IPackageManagementProject project,
IPackageManagementEvents packageManagementEvents)
: base(project, packageManagementEvents)
{
}
public IEnumerable<PackageOperation> Operations { get; set; } public IEnumerable<PackageOperation> Operations { get; set; }
public bool IgnoreDependencies { get; set; } public bool IgnoreDependencies { get; set; }

19
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs

@ -14,13 +14,17 @@ namespace ICSharpCode.PackageManagement
{ {
ISharpDevelopPackageManager packageManager; ISharpDevelopPackageManager packageManager;
ISharpDevelopProjectManager projectManager; ISharpDevelopProjectManager projectManager;
IPackageManagementEvents packageManagementEvents;
public PackageManagementProject( public PackageManagementProject(
IPackageRepository sourceRepository, IPackageRepository sourceRepository,
MSBuildBasedProject project, MSBuildBasedProject project,
IPackageManagementEvents packageManagementEvents,
IPackageManagerFactory packageManagerFactory) IPackageManagerFactory packageManagerFactory)
{ {
SourceRepository = sourceRepository; SourceRepository = sourceRepository;
this.packageManagementEvents = packageManagementEvents;
packageManager = packageManagerFactory.CreatePackageManager(sourceRepository, project); packageManager = packageManagerFactory.CreatePackageManager(sourceRepository, project);
projectManager = packageManager.ProjectManager; projectManager = packageManager.ProjectManager;
} }
@ -67,5 +71,20 @@ namespace ICSharpCode.PackageManagement
{ {
packageManager.UpdatePackage(package, operations, updateDependencies); packageManager.UpdatePackage(package, operations, updateDependencies);
} }
public InstallPackageAction CreateInstallPackageAction()
{
return new InstallPackageAction(this, packageManagementEvents);
}
public UninstallPackageAction CreateUninstallPackageAction()
{
return new UninstallPackageAction(this, packageManagementEvents);
}
public UpdatePackageAction CreateUpdatePackageAction()
{
return new UpdatePackageAction(this, packageManagementEvents);
}
} }
} }

12
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProjectFactory.cs

@ -10,10 +10,18 @@ namespace ICSharpCode.PackageManagement
public class PackageManagementProjectFactory : IPackageManagementProjectFactory public class PackageManagementProjectFactory : IPackageManagementProjectFactory
{ {
SharpDevelopPackageManagerFactory factory = new SharpDevelopPackageManagerFactory(); SharpDevelopPackageManagerFactory factory = new SharpDevelopPackageManagerFactory();
IPackageManagementEvents packageManagementEvents;
public IPackageManagementProject CreateProject(IPackageRepository sourceRepository, MSBuildBasedProject project) public PackageManagementProjectFactory(IPackageManagementEvents packageManagementEvents)
{ {
return new PackageManagementProject(sourceRepository, project, factory); this.packageManagementEvents = packageManagementEvents;
}
public IPackageManagementProject CreateProject(
IPackageRepository sourceRepository,
MSBuildBasedProject project)
{
return new PackageManagementProject(sourceRepository, project, packageManagementEvents, factory);
} }
} }
} }

17
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs

@ -24,7 +24,7 @@ namespace ICSharpCode.PackageManagement
registeredPackageRepositories, registeredPackageRepositories,
packageManagementEvents, packageManagementEvents,
new PackageManagementProjectService(), new PackageManagementProjectService(),
new PackageManagementProjectFactory()) new PackageManagementProjectFactory(packageManagementEvents))
{ {
} }
@ -40,21 +40,6 @@ namespace ICSharpCode.PackageManagement
this.projectService = projectService; this.projectService = projectService;
} }
public InstallPackageAction CreateInstallPackageAction()
{
return new InstallPackageAction(this, packageManagementEvents);
}
public UpdatePackageAction CreateUpdatePackageAction()
{
return new UpdatePackageAction(this, packageManagementEvents);
}
public UninstallPackageAction CreateUninstallPackageAction()
{
return new UninstallPackageAction(this, packageManagementEvents);
}
public IPackageManagementProject GetActiveProject() public IPackageManagementProject GetActiveProject()
{ {
return GetActiveProject(ActivePackageRepository); return GetActiveProject(ActivePackageRepository);

14
src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs

@ -233,11 +233,12 @@ namespace ICSharpCode.PackageManagement
IPackageFromRepository package, IPackageFromRepository package,
IEnumerable<PackageOperation> packageOperations) IEnumerable<PackageOperation> packageOperations)
{ {
InstallPackageAction task = solution.CreateInstallPackageAction(); IPackageManagementProject project = solution.GetActiveProject(package.Repository);
task.SourceRepository = package.Repository; InstallPackageAction action = project.CreateInstallPackageAction();
task.Package = package; action.SourceRepository = package.Repository;
task.Operations = packageOperations; action.Package = package;
task.Execute(); action.Operations = packageOperations;
action.Execute();
} }
void ReportError(Exception ex) void ReportError(Exception ex)
@ -263,7 +264,8 @@ namespace ICSharpCode.PackageManagement
void TryUninstallingPackage() void TryUninstallingPackage()
{ {
try { try {
var action = solution.CreateUninstallPackageAction(); IPackageManagementProject project = solution.GetActiveProject(null);
UninstallPackageAction action = project.CreateUninstallPackageAction();
action.SourceRepository = package.Repository; action.SourceRepository = package.Repository;
action.Package = package; action.Package = package;
action.Execute(); action.Execute();

8
src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs

@ -20,6 +20,14 @@ namespace ICSharpCode.PackageManagement
this.packageManagementEvents = packageManagementEvents; this.packageManagementEvents = packageManagementEvents;
} }
public ProcessPackageAction(
IPackageManagementProject project,
IPackageManagementEvents packageManagementEvents)
{
this.Project = project;
this.packageManagementEvents = packageManagementEvents;
}
public IPackageManagementProject Project { get; set; } public IPackageManagementProject Project { get; set; }
public ILogger Logger { get; set; } public ILogger Logger { get; set; }
public IPackage Package { get; set; } public IPackage Package { get; set; }

10
src/AddIns/Misc/PackageManagement/Project/Src/UninstallPackageAction.cs

@ -9,14 +9,18 @@ namespace ICSharpCode.PackageManagement
{ {
public class UninstallPackageAction : ProcessPackageAction public class UninstallPackageAction : ProcessPackageAction
{ {
IPackageManagementSolution solution;
public UninstallPackageAction( public UninstallPackageAction(
IPackageManagementSolution solution, IPackageManagementSolution solution,
IPackageManagementEvents packageManagementEvents) IPackageManagementEvents packageManagementEvents)
: base(solution, packageManagementEvents) : base(solution, packageManagementEvents)
{ {
this.solution = solution; }
public UninstallPackageAction(
IPackageManagementProject project,
IPackageManagementEvents packageManagementEvents)
: base(project, packageManagementEvents)
{
} }
public bool ForceRemove { get; set; } public bool ForceRemove { get; set; }

8
src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageAction.cs

@ -18,6 +18,14 @@ namespace ICSharpCode.PackageManagement
UpdateDependencies = true; UpdateDependencies = true;
} }
public UpdatePackageAction(
IPackageManagementProject project,
IPackageManagementEvents packageManagementEvents)
: base(project, packageManagementEvents)
{
UpdateDependencies = true;
}
public IEnumerable<PackageOperation> Operations { get; set; } public IEnumerable<PackageOperation> Operations { get; set; }
public bool UpdateDependencies { get; set; } public bool UpdateDependencies { get; set; }

3
src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs

@ -25,7 +25,8 @@ namespace ICSharpCode.PackageManagement
IPackageFromRepository package, IPackageFromRepository package,
IEnumerable<PackageOperation> packageOperations) IEnumerable<PackageOperation> packageOperations)
{ {
var action = solution.CreateUpdatePackageAction(); IPackageManagementProject project = solution.GetActiveProject(package.Repository);
UpdatePackageAction action = project.CreateUpdatePackageAction();
action.SourceRepository = package.Repository; action.SourceRepository = package.Repository;
action.Package = package; action.Package = package;
action.Operations = packageOperations; action.Operations = packageOperations;

1
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -70,6 +70,7 @@
<Link>Properties\GlobalAssemblyInfo.cs</Link> <Link>Properties\GlobalAssemblyInfo.cs</Link>
</Compile> </Compile>
<Compile Include="Src\AddPackageReferenceCommandTests.cs" /> <Compile Include="Src\AddPackageReferenceCommandTests.cs" />
<Compile Include="Src\Helpers\ExceptionThrowingPackageManagementProject.cs" />
<Compile Include="Src\Helpers\ExceptionThrowingRegisteredPackageRepositories.cs" /> <Compile Include="Src\Helpers\ExceptionThrowingRegisteredPackageRepositories.cs" />
<Compile Include="Src\Helpers\FakeAddPackageReferenceView.cs" /> <Compile Include="Src\Helpers\FakeAddPackageReferenceView.cs" />
<Compile Include="Src\Helpers\FakeLogger.cs" /> <Compile Include="Src\Helpers\FakeLogger.cs" />

25
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageManagementProject.cs

@ -0,0 +1,25 @@
// 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 ICSharpCode.PackageManagement.Design;
namespace PackageManagement.Tests.Helpers
{
public class ExceptionThrowingPackageManagementProject : FakePackageManagementProject
{
public Exception ExceptionToThrowWhenCreateInstallPackageTaskCalled { get; set; }
public Exception ExceptionToThrowWhenCreateUninstallPackageActionCalled { get; set; }
public override InstallPackageAction CreateInstallPackageAction()
{
throw ExceptionToThrowWhenCreateInstallPackageTaskCalled;
}
public override UninstallPackageAction CreateUninstallPackageAction()
{
throw ExceptionToThrowWhenCreateUninstallPackageActionCalled;
}
}
}

12
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageManagementService.cs

@ -12,18 +12,6 @@ namespace PackageManagement.Tests.Helpers
public class ExceptionThrowingPackageManagementSolution : FakePackageManagementSolution public class ExceptionThrowingPackageManagementSolution : FakePackageManagementSolution
{ {
public Exception ExceptionToThrowWhenGetActiveProjectCalled { get; set; } public Exception ExceptionToThrowWhenGetActiveProjectCalled { get; set; }
public Exception ExceptionToThrowWhenCreateInstallPackageTaskCalled { get; set; }
public Exception ExceptionToThrowWhenCreateUninstallPackageActionCalled { get; set; }
public override InstallPackageAction CreateInstallPackageAction()
{
throw ExceptionToThrowWhenCreateInstallPackageTaskCalled;
}
public override UninstallPackageAction CreateUninstallPackageAction()
{
throw ExceptionToThrowWhenCreateUninstallPackageActionCalled;
}
public override IPackageManagementProject GetActiveProject() public override IPackageManagementProject GetActiveProject()
{ {

8
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs

@ -20,6 +20,7 @@ namespace PackageManagement.Tests
PackageManagementProject project; PackageManagementProject project;
FakeProjectManager fakeProjectManager; FakeProjectManager fakeProjectManager;
FakePackageManager fakePackageManager; FakePackageManager fakePackageManager;
FakePackageManagementEvents fakePackageManagementEvents;
void CreateProject() void CreateProject()
{ {
@ -28,8 +29,13 @@ namespace PackageManagement.Tests
fakeProjectManager = fakePackageManager.FakeProjectManager; fakeProjectManager = fakePackageManager.FakeProjectManager;
fakeSourceRepository = new FakePackageRepository(); fakeSourceRepository = new FakePackageRepository();
fakeMSBuildProject = ProjectHelper.CreateTestProject(); fakeMSBuildProject = ProjectHelper.CreateTestProject();
fakePackageManagementEvents = new FakePackageManagementEvents();
project = new PackageManagementProject(fakeSourceRepository, fakeMSBuildProject, fakePackageManagerFactory); project = new PackageManagementProject(
fakeSourceRepository,
fakeMSBuildProject,
fakePackageManagementEvents,
fakePackageManagerFactory);
} }
[Test] [Test]

62
src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs

@ -15,17 +15,18 @@ namespace PackageManagement.Tests
{ {
TestablePackageViewModel viewModel; TestablePackageViewModel viewModel;
FakePackage package; FakePackage package;
FakePackageManagementSolution solution; FakePackageManagementSolution fakeSolution;
FakePackageManagementEvents packageManagementEvents; FakePackageManagementEvents packageManagementEvents;
ExceptionThrowingPackageManagementSolution exceptionThrowingSolution; ExceptionThrowingPackageManagementSolution exceptionThrowingSolution;
ExceptionThrowingPackageManagementProject exceptionThrowingProject;
FakeInstallPackageAction fakeInstallPackageTask; FakeInstallPackageAction fakeInstallPackageTask;
FakeUninstallPackageAction fakeUninstallPackageAction; FakeUninstallPackageAction fakeUninstallPackageAction;
FakeLogger fakeLogger; FakeLogger fakeLogger;
void CreateViewModel() void CreateViewModel()
{ {
solution = new FakePackageManagementSolution(); fakeSolution = new FakePackageManagementSolution();
CreateViewModel(solution); CreateViewModel(fakeSolution);
} }
void CreateViewModelWithExceptionThrowingSolution() void CreateViewModelWithExceptionThrowingSolution()
@ -34,15 +35,22 @@ namespace PackageManagement.Tests
CreateViewModel(exceptionThrowingSolution); CreateViewModel(exceptionThrowingSolution);
} }
void CreateViewModelWithExceptionThrowingProject()
{
CreateViewModel();
exceptionThrowingProject = new ExceptionThrowingPackageManagementProject();
viewModel.FakeSolution.FakeProject = exceptionThrowingProject;
}
void CreateViewModel(FakePackageManagementSolution solution) void CreateViewModel(FakePackageManagementSolution solution)
{ {
viewModel = new TestablePackageViewModel(solution); viewModel = new TestablePackageViewModel(solution);
package = viewModel.FakePackage; package = viewModel.FakePackage;
this.solution = solution; this.fakeSolution = solution;
packageManagementEvents = viewModel.FakePackageManagementEvents; packageManagementEvents = viewModel.FakePackageManagementEvents;
fakeLogger = viewModel.FakeLogger; fakeLogger = viewModel.FakeLogger;
fakeInstallPackageTask = solution.ActionToReturnFromCreateInstallPackageAction; fakeInstallPackageTask = solution.FakeProject.FakeInstallPackageAction;
fakeUninstallPackageAction = solution.ActionToReturnFromCreateUninstallPackageAction; fakeUninstallPackageAction = solution.FakeProject.FakeUninstallPackageAction;
} }
[Test] [Test]
@ -67,6 +75,17 @@ namespace PackageManagement.Tests
Assert.AreEqual(package.Repository, fakeInstallPackageTask.SourceRepository); Assert.AreEqual(package.Repository, fakeInstallPackageTask.SourceRepository);
} }
[Test]
public void AddPackage_PackageAddedSuccessfully_SourcePackageRepositoryUsedToCreateProject()
{
CreateViewModel();
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
viewModel.AddPackage();
Assert.AreEqual(package.Repository, fakeSolution.RepositoryPassedToCreateProject);
}
[Test] [Test]
public void AddPackage_PackageAddedSuccessfully_PackageIsInstalled() public void AddPackage_PackageAddedSuccessfully_PackageIsInstalled()
{ {
@ -176,7 +195,7 @@ namespace PackageManagement.Tests
public void IsAdded_ProjectHasPackageAdded_ReturnsTrue() public void IsAdded_ProjectHasPackageAdded_ReturnsTrue()
{ {
CreateViewModel(); CreateViewModel();
solution.FakeProject.IsInstalledReturnValue = true; fakeSolution.FakeProject.IsInstalledReturnValue = true;
Assert.IsTrue(viewModel.IsAdded); Assert.IsTrue(viewModel.IsAdded);
} }
@ -185,7 +204,7 @@ namespace PackageManagement.Tests
public void IsAdded_ProjectDoesNotHavePackageInstalled_ReturnsFalse() public void IsAdded_ProjectDoesNotHavePackageInstalled_ReturnsFalse()
{ {
CreateViewModel(); CreateViewModel();
solution.FakeProject.IsInstalledReturnValue = false; fakeSolution.FakeProject.IsInstalledReturnValue = false;
Assert.IsFalse(viewModel.IsAdded); Assert.IsFalse(viewModel.IsAdded);
} }
@ -197,7 +216,7 @@ namespace PackageManagement.Tests
bool result = viewModel.IsAdded; bool result = viewModel.IsAdded;
result = viewModel.IsAdded; result = viewModel.IsAdded;
int count = solution.GetActiveProjectCallCount; int count = fakeSolution.GetActiveProjectCallCount;
Assert.AreEqual(1, count); Assert.AreEqual(1, count);
} }
@ -376,7 +395,7 @@ namespace PackageManagement.Tests
viewModel.AddPackage(); viewModel.AddPackage();
ILogger expectedLogger = viewModel.OperationLoggerCreated; ILogger expectedLogger = viewModel.OperationLoggerCreated;
ILogger actualLogger = solution.FakeProject.Logger; ILogger actualLogger = fakeSolution.FakeProject.Logger;
Assert.AreEqual(expectedLogger, actualLogger); Assert.AreEqual(expectedLogger, actualLogger);
} }
@ -464,10 +483,10 @@ namespace PackageManagement.Tests
[Test] [Test]
public void AddPackage_ExceptionWhenInstallingPackage_ExceptionErrorMessageReported() public void AddPackage_ExceptionWhenInstallingPackage_ExceptionErrorMessageReported()
{ {
CreateViewModelWithExceptionThrowingSolution(); CreateViewModelWithExceptionThrowingProject();
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage(); viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
Exception ex = new Exception("Test"); Exception ex = new Exception("Test");
exceptionThrowingSolution.ExceptionToThrowWhenCreateInstallPackageTaskCalled = ex; exceptionThrowingProject.ExceptionToThrowWhenCreateInstallPackageTaskCalled = ex;
viewModel.AddPackage(); viewModel.AddPackage();
Assert.AreEqual(ex, packageManagementEvents.ExceptionPassedToOnPackageOperationError); Assert.AreEqual(ex, packageManagementEvents.ExceptionPassedToOnPackageOperationError);
@ -486,10 +505,10 @@ namespace PackageManagement.Tests
[Test] [Test]
public void AddPackage_ExceptionWhenInstallingPackage_ExceptionLogged() public void AddPackage_ExceptionWhenInstallingPackage_ExceptionLogged()
{ {
CreateViewModelWithExceptionThrowingSolution(); CreateViewModelWithExceptionThrowingProject();
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage(); viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
Exception ex = new Exception("Exception error message"); Exception ex = new Exception("Exception error message");
exceptionThrowingSolution.ExceptionToThrowWhenCreateInstallPackageTaskCalled = ex; exceptionThrowingProject.ExceptionToThrowWhenCreateInstallPackageTaskCalled = ex;
viewModel.AddPackage(); viewModel.AddPackage();
string actualMessage = fakeLogger.SecondFormattedMessageLogged; string actualMessage = fakeLogger.SecondFormattedMessageLogged;
@ -501,9 +520,9 @@ namespace PackageManagement.Tests
[Test] [Test]
public void RemovePackage_ExceptionWhenUninstallingPackage_ExceptionErrorMessageReported() public void RemovePackage_ExceptionWhenUninstallingPackage_ExceptionErrorMessageReported()
{ {
CreateViewModelWithExceptionThrowingSolution(); CreateViewModelWithExceptionThrowingProject();
Exception ex = new Exception("Test"); Exception ex = new Exception("Test");
exceptionThrowingSolution.ExceptionToThrowWhenCreateUninstallPackageActionCalled = ex; exceptionThrowingProject.ExceptionToThrowWhenCreateUninstallPackageActionCalled = ex;
viewModel.RemovePackage(); viewModel.RemovePackage();
Assert.AreEqual(ex, packageManagementEvents.ExceptionPassedToOnPackageOperationError); Assert.AreEqual(ex, packageManagementEvents.ExceptionPassedToOnPackageOperationError);
@ -521,9 +540,9 @@ namespace PackageManagement.Tests
[Test] [Test]
public void RemovePackage_ExceptionWhenUninstallingPackage_ExceptionLogged() public void RemovePackage_ExceptionWhenUninstallingPackage_ExceptionLogged()
{ {
CreateViewModelWithExceptionThrowingSolution(); CreateViewModelWithExceptionThrowingProject();
Exception ex = new Exception("Exception error message"); Exception ex = new Exception("Exception error message");
exceptionThrowingSolution.ExceptionToThrowWhenCreateUninstallPackageActionCalled = ex; exceptionThrowingProject.ExceptionToThrowWhenCreateUninstallPackageActionCalled = ex;
viewModel.RemovePackage(); viewModel.RemovePackage();
string actualMessage = fakeLogger.SecondFormattedMessageLogged; string actualMessage = fakeLogger.SecondFormattedMessageLogged;
@ -539,8 +558,7 @@ namespace PackageManagement.Tests
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage(); viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
var exception = new Exception("Test");; var exception = new Exception("Test");;
exceptionThrowingSolution.ExceptionToThrowWhenGetActiveProjectCalled = exceptionThrowingSolution.ExceptionToThrowWhenGetActiveProjectCalled = exception;
exception;
viewModel.AddPackage(); viewModel.AddPackage();
Assert.AreEqual(exception, packageManagementEvents.ExceptionPassedToOnPackageOperationError); Assert.AreEqual(exception, packageManagementEvents.ExceptionPassedToOnPackageOperationError);
@ -554,7 +572,7 @@ namespace PackageManagement.Tests
viewModel.AddPackage(); viewModel.AddPackage();
var expectedPackage = package; var expectedPackage = package;
var actualPackage = solution var actualPackage = fakeSolution
.FakeProject .FakeProject
.PackagePassedToGetInstallPackageOperations; .PackagePassedToGetInstallPackageOperations;
@ -568,7 +586,7 @@ namespace PackageManagement.Tests
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage(); viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
viewModel.AddPackage(); viewModel.AddPackage();
bool result = solution bool result = fakeSolution
.FakeProject .FakeProject
.IgnoreDependenciesPassedToGetInstallPackageOperations; .IgnoreDependenciesPassedToGetInstallPackageOperations;

13
src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs

@ -13,13 +13,15 @@ namespace PackageManagement.Tests
{ {
TestableUpdatedPackageViewModel viewModel; TestableUpdatedPackageViewModel viewModel;
FakePackageManagementSolution fakeSolution; FakePackageManagementSolution fakeSolution;
FakePackageManagementProject fakeProject;
FakeUpdatePackageAction updatePackageAction; FakeUpdatePackageAction updatePackageAction;
void CreateViewModel() void CreateViewModel()
{ {
viewModel = new TestableUpdatedPackageViewModel(); viewModel = new TestableUpdatedPackageViewModel();
fakeSolution = viewModel.FakeSolution; fakeSolution = viewModel.FakeSolution;
updatePackageAction = fakeSolution.ActionToReturnFromCreateUpdatePackageAction; fakeProject = fakeSolution.FakeProject;
updatePackageAction = fakeProject.FakeUpdatePackageAction;
} }
[Test] [Test]
@ -30,6 +32,15 @@ namespace PackageManagement.Tests
Assert.AreEqual(viewModel.FakePackage.Repository, updatePackageAction.SourceRepository); Assert.AreEqual(viewModel.FakePackage.Repository, updatePackageAction.SourceRepository);
} }
[Test]
public void AddPackage_PackageAddedSuccessfully_ProjectCreatedUsingSourcePackageRepository()
{
CreateViewModel();
viewModel.AddPackage();
Assert.AreEqual(viewModel.FakePackage.Repository, fakeSolution.RepositoryPassedToCreateProject);
}
[Test] [Test]
public void AddPackage_PackageAddedSuccessfully_PackageUpdated() public void AddPackage_PackageAddedSuccessfully_PackageUpdated()

Loading…
Cancel
Save