Browse Source

Do not uninstall a NuGet package if the project does not reference it.

pull/16/merge
Matt Ward 15 years ago
parent
commit
fd1e74af91
  1. 21
      src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModel.cs
  2. 28
      src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackageViewModelTests.cs

21
src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModel.cs

@ -25,7 +25,9 @@ namespace ICSharpCode.PackageManagement @@ -25,7 +25,9 @@ namespace ICSharpCode.PackageManagement
var actions = new List<ProcessPackageAction>();
foreach (IPackageManagementSelectedProject selectedProject in selectedProjects) {
ProcessPackageAction action = CreatePackageAction(selectedProject);
actions.Add(action);
if (action != null) {
actions.Add(action);
}
}
return actions;
}
@ -35,7 +37,22 @@ namespace ICSharpCode.PackageManagement @@ -35,7 +37,22 @@ namespace ICSharpCode.PackageManagement
if (selectedProject.IsSelected) {
return base.CreateInstallPackageAction(selectedProject);
}
return base.CreateUninstallPackageAction(selectedProject);
return CreateUninstallPackageActionForSelectedProject(selectedProject);
}
ProcessPackageAction CreateUninstallPackageActionForSelectedProject(IPackageManagementSelectedProject selectedProject)
{
ProcessPackageAction action = base.CreateUninstallPackageAction(selectedProject);
if (IsPackageInstalled(action.Project)) {
return action;
}
return null;
}
bool IsPackageInstalled(IPackageManagementProject project)
{
IPackage package = GetPackage();
return project.IsPackageInstalled(package);
}
protected override bool AnyProjectsSelected(IList<IPackageManagementSelectedProject> projects)

28
src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackageViewModelTests.cs

@ -71,6 +71,18 @@ namespace PackageManagement.Tests @@ -71,6 +71,18 @@ namespace PackageManagement.Tests
fakeSolution.AddFakeProjectToReturnFromGetProject(projectName2);
}
void AddViewModelPackageToTwoSelectedProjectPackages(string projectName1, string projectName2)
{
FakePackage package = viewModel.FakePackage;
fakeSolution.FakeProjectsToReturnFromGetProject[projectName1].FakePackages.Add(package);
fakeSolution.FakeProjectsToReturnFromGetProject[projectName2].FakePackages.Add(package);
}
void AddViewModelPackageToFirstSelectedProjectPackages()
{
FirstSelectedProject.FakeProject.FakePackages.Add(viewModel.FakePackage);
}
[Test]
public void GetProcessPackageActionsForSelectedProjects_OneProjectIsSelected_ReturnsOneAction()
{
@ -112,6 +124,7 @@ namespace PackageManagement.Tests @@ -112,6 +124,7 @@ namespace PackageManagement.Tests
CreateViewModel();
CreateOneFakeSelectedProject("Test");
FirstSelectedProject.IsSelected = false;
AddViewModelPackageToFirstSelectedProjectPackages();
GetPackageActionsForSelectedProjects();
var action = packageActions[0] as UninstallPackageAction;
@ -141,6 +154,7 @@ namespace PackageManagement.Tests @@ -141,6 +154,7 @@ namespace PackageManagement.Tests
CreateViewModel();
CreateOneFakeSelectedProject("Test");
FirstSelectedProject.IsSelected = false;
AddViewModelPackageToFirstSelectedProjectPackages();
GetPackageActionsForSelectedProjects();
var action = packageActions[0] as UninstallPackageAction;
@ -170,6 +184,7 @@ namespace PackageManagement.Tests @@ -170,6 +184,7 @@ namespace PackageManagement.Tests
CreateViewModel();
CreateOneFakeSelectedProject("Test");
FirstSelectedProject.IsSelected = false;
AddViewModelPackageToFirstSelectedProjectPackages();
GetPackageActionsForSelectedProjects();
ILogger logger = FirstSelectedProject.Project.Logger;
@ -178,11 +193,24 @@ namespace PackageManagement.Tests @@ -178,11 +193,24 @@ namespace PackageManagement.Tests
Assert.AreEqual(expectedLogger, logger);
}
[Test]
public void GetProcessPackageActionsForSelectedProjects_OneProjectWithIsSelectedSetToFalseButPackageDoesNotExistInProject_NoActionsReturned()
{
CreateViewModel();
CreateOneFakeSelectedProject("Test");
FirstSelectedProject.IsSelected = false;
GetPackageActionsForSelectedProjects();
Assert.AreEqual(0, packageActions.Count);
}
[Test]
public void ManagePackage_SolutionWithTwoProjectsAndUserUnselectsBothProjects_TwoProjectsAreUninstalled()
{
CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
viewModel.FakePackageManagementEvents.OnSelectProjectsReturnValue = true;
AddViewModelPackageToTwoSelectedProjectPackages("Project A", "Project B");
viewModel.FakePackageManagementEvents.ProjectsToSelect.Add("UnknownProject");
viewModel.ManagePackage();
List<ProcessPackageAction> actions = fakeActionRunner.GetActionsRunInOneCallAsList();

Loading…
Cancel
Save