Skip to content
This repository has been archived by the owner on Oct 16, 2020. It is now read-only.

Commit

Permalink
Prevent the projects selected from changing when the Manage Packages …
Browse files Browse the repository at this point in the history
…dialog is opened.
  • Loading branch information
mrward committed Jul 17, 2011
1 parent 4c5a649 commit 7355907
Show file tree
Hide file tree
Showing 11 changed files with 92 additions and 59 deletions.
Expand Up @@ -73,7 +73,7 @@ public IPackageManagementProject GetProject(IPackageRepository sourceRepository,
public Dictionary<string, FakePackageManagementProject> FakeProjectsToReturnFromGetProject public Dictionary<string, FakePackageManagementProject> FakeProjectsToReturnFromGetProject
= new Dictionary<string, FakePackageManagementProject>(); = new Dictionary<string, FakePackageManagementProject>();


public IPackageManagementProject GetProject(IPackageRepository sourceRepository, IProject project) public virtual IPackageManagementProject GetProject(IPackageRepository sourceRepository, IProject project)
{ {
RepositoryPassedToGetProject = sourceRepository; RepositoryPassedToGetProject = sourceRepository;
ProjectPassedToGetProject = project; ProjectPassedToGetProject = project;
Expand Down
Expand Up @@ -14,7 +14,7 @@ namespace ICSharpCode.PackageManagement
public class PackageManagementSelectedProjects public class PackageManagementSelectedProjects
{ {
IPackageManagementSolution solution; IPackageManagementSolution solution;
bool? singledProjectSelected; bool? singleProjectSelected;
IProject singleMSBuildProjectSelected; IProject singleMSBuildProjectSelected;


public PackageManagementSelectedProjects(IPackageManagementSolution solution) public PackageManagementSelectedProjects(IPackageManagementSolution solution)
Expand All @@ -35,11 +35,11 @@ public IEnumerable<IPackageManagementSelectedProject> GetProjects(IPackageFromRe


public bool HasSingleProjectSelected() public bool HasSingleProjectSelected()
{ {
if (!singledProjectSelected.HasValue) { if (!singleProjectSelected.HasValue) {
singleMSBuildProjectSelected = solution.GetActiveMSBuildProject(); singleMSBuildProjectSelected = solution.GetActiveMSBuildProject();
singledProjectSelected = singleMSBuildProjectSelected != null; singleProjectSelected = singleMSBuildProjectSelected != null;
} }
return singledProjectSelected.Value; return singleProjectSelected.Value;
} }


IEnumerable<IProject> GetOpenProjects() IEnumerable<IProject> GetOpenProjects()
Expand Down Expand Up @@ -101,8 +101,8 @@ string GetSolutionFileNameWithoutFullPath()
/// </summary> /// </summary>
public bool IsPackageInstalled(IPackageFromRepository package) public bool IsPackageInstalled(IPackageFromRepository package)
{ {
IPackageManagementProject project = solution.GetActiveProject(package.Repository); if (HasSingleProjectSelected()) {
if (project != null) { IPackageManagementProject project = GetSingleProjectSelected(package.Repository);
return project.IsPackageInstalled(package); return project.IsPackageInstalled(package);
} }
return IsPackageInstalledInSolution(package); return IsPackageInstalledInSolution(package);
Expand All @@ -121,15 +121,18 @@ public IQueryable<IPackage> GetPackagesInstalledInSolution()
public IQueryable<IPackage> GetInstalledPackages(IPackageRepository sourceRepository) public IQueryable<IPackage> GetInstalledPackages(IPackageRepository sourceRepository)
{ {
if (HasSingleProjectSelected()) { if (HasSingleProjectSelected()) {
IPackageManagementProject project = GetActiveProject(sourceRepository); IPackageManagementProject project = GetSingleProjectSelected(sourceRepository);
return project.GetPackages(); return project.GetPackages();
} }
return GetPackagesInstalledInSolution(); return GetPackagesInstalledInSolution();
} }


public IPackageManagementProject GetActiveProject(IPackageRepository repository) public IPackageManagementProject GetSingleProjectSelected(IPackageRepository repository)
{ {
return solution.GetActiveProject(repository); if (HasSingleProjectSelected()) {
return solution.GetProject(repository, singleMSBuildProjectSelected);
}
return null;
} }
} }
} }
Expand Up @@ -172,14 +172,14 @@ void ClearReportedMessages()


void GetPackageOperations() void GetPackageOperations()
{ {
IPackageManagementProject project = GetActiveProject(); IPackageManagementProject project = GetSingleProjectSelected();
project.Logger = logger; project.Logger = logger;
packageOperations = project.GetInstallPackageOperations(package, false); packageOperations = project.GetInstallPackageOperations(package, false);
} }


IPackageManagementProject GetActiveProject() IPackageManagementProject GetSingleProjectSelected()
{ {
return selectedProjects.GetActiveProject(package.Repository); return selectedProjects.GetSingleProjectSelected(package.Repository);
} }


bool CanInstallPackage() bool CanInstallPackage()
Expand Down Expand Up @@ -244,7 +244,7 @@ void InstallPackage()


void InstallPackage(IEnumerable<PackageOperation> packageOperations) void InstallPackage(IEnumerable<PackageOperation> packageOperations)
{ {
IPackageManagementProject project = GetActiveProject(); IPackageManagementProject project = GetSingleProjectSelected();
ProcessPackageOperationsAction action = CreateInstallPackageAction(project); ProcessPackageOperationsAction action = CreateInstallPackageAction(project);
action.Package = package; action.Package = package;
action.Operations = packageOperations; action.Operations = packageOperations;
Expand Down Expand Up @@ -280,7 +280,7 @@ void LogRemovingPackage()
void TryUninstallingPackage() void TryUninstallingPackage()
{ {
try { try {
IPackageManagementProject project = GetActiveProject(); IPackageManagementProject project = GetSingleProjectSelected();
UninstallPackageAction action = project.CreateUninstallPackageAction(); UninstallPackageAction action = project.CreateUninstallPackageAction();
action.Package = package; action.Package = package;
actionRunner.Run(action); actionRunner.Run(action);
Expand Down
Expand Up @@ -5,13 +5,15 @@
using System.Collections.Generic; using System.Collections.Generic;
using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design; using ICSharpCode.PackageManagement.Design;
using ICSharpCode.SharpDevelop.Project;
using NuGet; using NuGet;


namespace PackageManagement.Tests.Helpers namespace PackageManagement.Tests.Helpers
{ {
public class ExceptionThrowingPackageManagementSolution : FakePackageManagementSolution public class ExceptionThrowingPackageManagementSolution : FakePackageManagementSolution
{ {
public Exception ExceptionToThrowWhenGetActiveProjectCalled { get; set; } public Exception ExceptionToThrowWhenGetActiveProjectCalled { get; set; }
public Exception ExceptionToThrowWhenGetProjectCalled { get; set; }


public override IPackageManagementProject GetActiveProject() public override IPackageManagementProject GetActiveProject()
{ {
Expand All @@ -28,5 +30,13 @@ public override IPackageManagementProject GetActiveProject(IPackageRepository so
} }
return base.GetActiveProject(sourceRepository); return base.GetActiveProject(sourceRepository);
} }

public override IPackageManagementProject GetProject(IPackageRepository sourceRepository, IProject project)
{
if (ExceptionToThrowWhenGetProjectCalled != null) {
throw ExceptionToThrowWhenGetProjectCalled;
}
return base.GetProject(sourceRepository, project);
}
} }
} }
Expand Up @@ -25,6 +25,7 @@ public TestablePackageViewModel(FakePackageManagementSolution solution)
new FakeLogger()) new FakeLogger())
{ {
this.FakeSolution = solution; this.FakeSolution = solution;
solution.FakeActiveMSBuildProject = ProjectHelper.CreateTestProject();
} }


public TestablePackageViewModel( public TestablePackageViewModel(
Expand Down Expand Up @@ -63,7 +64,7 @@ public PackageOperation AddOneFakeInstallPackageOperationForViewModelPackage()
var operation = new FakePackageOperation(FakePackage, PackageAction.Install); var operation = new FakePackageOperation(FakePackage, PackageAction.Install);


FakeSolution FakeSolution
.FakeActiveProject .FakeProjectToReturnFromGetProject
.FakeInstallOperations .FakeInstallOperations
.Add(operation); .Add(operation);


Expand All @@ -74,7 +75,7 @@ public PackageOperation AddOneFakeUninstallPackageOperation()
{ {
var package = new FakePackage("PackageToUninstall"); var package = new FakePackage("PackageToUninstall");
var operation = new FakePackageOperation(package, PackageAction.Uninstall); var operation = new FakePackageOperation(package, PackageAction.Uninstall);
FakeSolution.FakeActiveProject.FakeInstallOperations.Add(operation); FakeSolution.FakeProjectToReturnFromGetProject.FakeInstallOperations.Add(operation);
return operation; return operation;
} }
} }
Expand Down
Expand Up @@ -32,6 +32,7 @@ public TestableUpdatedPackageViewModel(FakePackageManagementSolution solution)
new FakeLogger()) new FakeLogger())
{ {
this.FakeSolution = solution; this.FakeSolution = solution;
solution.FakeActiveMSBuildProject = ProjectHelper.CreateTestProject("MyProject");
} }


public TestableUpdatedPackageViewModel( public TestableUpdatedPackageViewModel(
Expand Down
Expand Up @@ -169,7 +169,7 @@ public void PackageUpdatesViewModel_OneUpdatedPackageVersion_HasOnePackageViewMo
Id = "Test", Id = "Test",
Version = new Version("1.0.0.0") Version = new Version("1.0.0.0")
}; };
fakeSolution.AddPackageToActiveProjectLocalRepository(oldPackage); fakeSolution.FakeProjectToReturnFromGetProject.FakePackages.Add(oldPackage);


var newPackage = new FakePackage() { var newPackage = new FakePackage() {
Id = "Test", Id = "Test",
Expand Down
Expand Up @@ -277,7 +277,7 @@ public void IsPackageInstalled_PackageIsInstalledInProjectAndProjectSelected_Ret
fakeSolution.FakeActiveMSBuildProject = projectsAddedToSolution[0]; fakeSolution.FakeActiveMSBuildProject = projectsAddedToSolution[0];


var package = new FakePackage("Test"); var package = new FakePackage("Test");
fakeSolution.FakeActiveProject.FakePackages.Add(package); fakeSolution.FakeProjectToReturnFromGetProject.FakePackages.Add(package);


bool installed = selectedProjects.IsPackageInstalled(package); bool installed = selectedProjects.IsPackageInstalled(package);


Expand Down Expand Up @@ -307,7 +307,7 @@ public void IsPackageInstalled_PackagePackageIsNotInstalledInProjectAndProjectSe
var package = new FakePackage("Test"); var package = new FakePackage("Test");
bool installed = selectedProjects.IsPackageInstalled(package); bool installed = selectedProjects.IsPackageInstalled(package);


IPackageRepository repository = fakeSolution.RepositoryPassedToGetActiveProject; IPackageRepository repository = fakeSolution.RepositoryPassedToGetProject;
IPackageRepository expectedRepository = package.FakePackageRepository; IPackageRepository expectedRepository = package.FakePackageRepository;


Assert.AreEqual(expectedRepository, repository); Assert.AreEqual(expectedRepository, repository);
Expand Down Expand Up @@ -362,31 +362,44 @@ public void GetPackagesInstalledInSolution_PackageInstalledInSolutionAndProjectN
} }


[Test] [Test]
public void GetActiveProject_ProjectSelected_ReturnsProject() public void GetSingleProjectSelected_ProjectSelected_ReturnsProject()
{ {
CreateSelectedProjects(); CreateSelectedProjects();
List<IProject> projectsAddedToSolution = AddSolutionWithTwoProjectsToProjectService(); List<IProject> projectsAddedToSolution = AddSolutionWithTwoProjectsToProjectService();
fakeSolution.FakeActiveMSBuildProject = projectsAddedToSolution[0]; fakeSolution.FakeActiveMSBuildProject = projectsAddedToSolution[0];


var repository = new FakePackageRepository(); var repository = new FakePackageRepository();
IPackageManagementProject project = selectedProjects.GetActiveProject(repository); IPackageManagementProject project = selectedProjects.GetSingleProjectSelected(repository);


FakePackageManagementProject expectedProject = fakeSolution.FakeActiveProject; FakePackageManagementProject expectedProject = fakeSolution.FakeProjectToReturnFromGetProject;


Assert.AreEqual(expectedProject, project); Assert.AreEqual(expectedProject, project);
} }


[Test] [Test]
public void GetActiveProject_ProjectSelectedAndRepositoryPassed_ReturnsProjectCreatedWithRepository() public void GetSingleProjectSelected_ProjectSelectedAndRepositoryPassed_ReturnsProjectCreatedWithRepository()
{ {
CreateSelectedProjects(); CreateSelectedProjects();
List<IProject> projectsAddedToSolution = AddSolutionWithTwoProjectsToProjectService(); List<IProject> projectsAddedToSolution = AddSolutionWithTwoProjectsToProjectService();
fakeSolution.FakeActiveMSBuildProject = projectsAddedToSolution[0]; fakeSolution.FakeActiveMSBuildProject = projectsAddedToSolution[0];


var repository = new FakePackageRepository(); var repository = new FakePackageRepository();
IPackageManagementProject project = selectedProjects.GetActiveProject(repository); IPackageManagementProject project = selectedProjects.GetSingleProjectSelected(repository);


Assert.AreEqual(repository, fakeSolution.RepositoryPassedToGetActiveProject); Assert.AreEqual(repository, fakeSolution.RepositoryPassedToGetProject);
}

[Test]
public void GetSingleProjectSelected_NoProjectSelectedAndRepositoryPassed_ReturnsProjectCreatedWithRepository()
{
CreateSelectedProjects();
List<IProject> projectsAddedToSolution = AddSolutionWithTwoProjectsToProjectService();
fakeSolution.FakeActiveMSBuildProject = projectsAddedToSolution[0];

var repository = new FakePackageRepository();
IPackageManagementProject project = selectedProjects.GetSingleProjectSelected(repository);

Assert.AreEqual(repository, fakeSolution.RepositoryPassedToGetProject);
} }


[Test] [Test]
Expand Down Expand Up @@ -454,9 +467,12 @@ public void GetInstalledPackages_PackageInstalledInProjectAndProjectIsSelected_R
CreateSelectedProjects(); CreateSelectedProjects();
List<IProject> projectsAddedToSolution = AddSolutionWithTwoProjectsToProjectService(); List<IProject> projectsAddedToSolution = AddSolutionWithTwoProjectsToProjectService();
fakeSolution.FakeActiveMSBuildProject = projectsAddedToSolution[0]; fakeSolution.FakeActiveMSBuildProject = projectsAddedToSolution[0];
fakeSolution.FakeActiveMSBuildProject.Name = "MyProject";


var package = new FakePackage("Test"); var package = new FakePackage("Test");
fakeSolution.FakeActiveProject.FakePackages.Add(package); var project = new FakePackageManagementProject("MyProject");
project.FakePackages.Add(package);
fakeSolution.FakeProjectsToReturnFromGetProject.Add("MyProject", project);


var repository = new FakePackageRepository(); var repository = new FakePackageRepository();
IQueryable<IPackage> packages = selectedProjects.GetInstalledPackages(repository); IQueryable<IPackage> packages = selectedProjects.GetInstalledPackages(repository);
Expand All @@ -478,9 +494,22 @@ public void GetInstalledPackages_PackageInstalledInProjectAndProjectIsSelected_C
var expectedRepository = new FakePackageRepository(); var expectedRepository = new FakePackageRepository();
IQueryable<IPackage> packages = selectedProjects.GetInstalledPackages(expectedRepository); IQueryable<IPackage> packages = selectedProjects.GetInstalledPackages(expectedRepository);


IPackageRepository repository = fakeSolution.RepositoryPassedToGetActiveProject; IPackageRepository repository = fakeSolution.RepositoryPassedToGetProject;


Assert.AreEqual(expectedRepository, repository); Assert.AreEqual(expectedRepository, repository);
} }

[Test]
public void GetSingleProjectSelected_NoProjectSelected_ReturnsNull()
{
CreateSelectedProjects();
AddSolutionWithTwoProjectsToProjectService();
NoProjectsSelected();

var repository = new FakePackageRepository();
IPackageManagementProject project = selectedProjects.GetSingleProjectSelected(repository);

Assert.IsNull(project);
}
} }
} }

0 comments on commit 7355907

Please sign in to comment.