From d5fe34402587dde54b07a49d02c7a70f70047534 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 13 Sep 2014 10:05:22 +0100 Subject: [PATCH] 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. --- .../Project/Src/PackageViewModel.cs | 2 +- .../Test/Src/PackageViewModelTests.cs | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs index 3379e790e6..bbb9fa59f0 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs @@ -219,7 +219,7 @@ namespace ICSharpCode.PackageManagement public void AddOrManagePackage() { - if (selectedProjects.HasMultipleProjects()) { + if (!selectedProjects.HasSingleProjectSelected()) { if (IsProjectPackage(package)) { ManagePackage(); } else { diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs index 2ac900a373..4a916d3fb7 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs @@ -1531,5 +1531,30 @@ namespace PackageManagement.Tests 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 selectedProjects = + fakePackageManagementEvents.SelectedProjectsPassedToOnSelectProjects; + + var expectedSelectedProjects = new List(); + expectedSelectedProjects.Add(new FakeSelectedProject("MyProject")); + + var nullReferenceException = new NullReferenceException(); + Assert.IsFalse(fakeLogger.FormattedMessagesLoggedContainsText(nullReferenceException.Message)); + Assert.IsNotNull(selectedProjects); + SelectedProjectCollectionAssert.AreEqual(expectedSelectedProjects, selectedProjects); + } } }