Browse Source

Fix #563 null reference exception when managing packages.

A null reference exception would occur if the Manage Packages dialog
was opened when the solution was selected, the solution contained
only one project, and then a package was installed. If the solution
had more than one project the exception would not occur.

The NuGet addin was incorrectly treating a solution with one project
the same as if the project was selected when the Manage Packages
dialog was opened.
pull/567/head
Matt Ward 11 years ago
parent
commit
d5fe344025
  1. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
  2. 25
      src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs

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

@ -219,7 +219,7 @@ namespace ICSharpCode.PackageManagement
public void AddOrManagePackage() public void AddOrManagePackage()
{ {
if (selectedProjects.HasMultipleProjects()) { if (!selectedProjects.HasSingleProjectSelected()) {
if (IsProjectPackage(package)) { if (IsProjectPackage(package)) {
ManagePackage(); ManagePackage();
} else { } else {

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

@ -1531,5 +1531,30 @@ namespace PackageManagement.Tests
operationAwareRepository.AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Install, "MyPackage"); operationAwareRepository.AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Install, "MyPackage");
} }
[Test]
public void AddOrManagePackage_SolutionSelectedAndContainsOnlyOneProject_UserPromptedToSelectOneProject()
{
CreateFakeSolution();
AddProjectToSolution();
fakeSolution.FakeMSBuildProjects[0].Name = "MyProject";
fakeSolution.NoProjectsSelected();
fakeSolution.AddFakeProjectToReturnFromGetProject("MyProject");
CreateViewModel(fakeSolution);
UserCancelsProjectSelection();
viewModel.AddOrManagePackage();
IEnumerable<IPackageManagementSelectedProject> selectedProjects =
fakePackageManagementEvents.SelectedProjectsPassedToOnSelectProjects;
var expectedSelectedProjects = new List<IPackageManagementSelectedProject>();
expectedSelectedProjects.Add(new FakeSelectedProject("MyProject"));
var nullReferenceException = new NullReferenceException();
Assert.IsFalse(fakeLogger.FormattedMessagesLoggedContainsText(nullReferenceException.Message));
Assert.IsNotNull(selectedProjects);
SelectedProjectCollectionAssert.AreEqual(expectedSelectedProjects, selectedProjects);
}
} }
} }

Loading…
Cancel
Save