Browse Source

Fix null reference when installing unknown NuGet package.

If a NuGet package is not found when installing it via the Package Management Console or
when a project template tries to install the package an exception is thrown indicating the
actual problem instead of a null reference exception being thrown.
pull/30/head
Matt Ward 14 years ago
parent
commit
35df476a73
  1. 5
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
  2. 9
      src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs
  3. 21
      src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs
  4. 12
      src/AddIns/Misc/PackageManagement/Test/Src/UninstallPackageActionTests.cs
  5. 14
      src/AddIns/Misc/PackageManagement/Test/Src/UpdatePackageActionTests.cs

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

@ -208,5 +208,10 @@ namespace ICSharpCode.PackageManagement.Design @@ -208,5 +208,10 @@ namespace ICSharpCode.PackageManagement.Design
{
FakePackages.Add(new FakePackage(id));
}
public void AddFakePackageToSourceRepository(string packageId)
{
FakeSourceRepository.AddFakePackage(packageId);
}
}
}

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

@ -99,6 +99,15 @@ namespace ICSharpCode.PackageManagement @@ -99,6 +99,15 @@ namespace ICSharpCode.PackageManagement
if (Package == null) {
Package = Project.SourceRepository.FindPackage(PackageId, PackageVersion);
}
if (Package == null) {
ThrowPackageNotFoundError(PackageId);
}
}
void ThrowPackageNotFoundError(string packageId)
{
string message = String.Format("Unable to find package '{0}'.", packageId);
throw new ApplicationException(message);
}
protected bool PackageIdExistsInProject()

21
src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs

@ -148,6 +148,7 @@ namespace PackageManagement.Tests @@ -148,6 +148,7 @@ namespace PackageManagement.Tests
{
CreateAction();
fakeProject.AddFakeInstallOperation();
fakeProject.AddFakePackageToSourceRepository("PackageId");
installPackageHelper.InstallPackageById("PackageId");
var actualOperations = action.Operations;
@ -174,6 +175,7 @@ namespace PackageManagement.Tests @@ -174,6 +175,7 @@ namespace PackageManagement.Tests
public void Execute_PackageIdAndSourceAndProjectPassedAndIgnoreDependenciesIsTrue_DependenciesIgnoredWhenGettingPackageOperations()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("PackageId");
installPackageHelper.IgnoreDependencies = true;
installPackageHelper.InstallPackageById("PackageId");
@ -186,6 +188,7 @@ namespace PackageManagement.Tests @@ -186,6 +188,7 @@ namespace PackageManagement.Tests
public void Execute_PackageIdAndSourceAndProjectPassedAndAllowPrereleaseVersionsIsTrue_PrereleaseVersionsAllowedWhenGettingPackageOperations()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("PackageId");
installPackageHelper.AllowPrereleaseVersions = true;
installPackageHelper.InstallPackageById("PackageId");
@ -198,6 +201,7 @@ namespace PackageManagement.Tests @@ -198,6 +201,7 @@ namespace PackageManagement.Tests
public void InstallPackage_PackageIdAndSourceAndProjectPassedAndIgnoreDependenciesIsFalse_DependenciesNotIgnoredWhenGettingPackageOperations()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("PackageId");
installPackageHelper.IgnoreDependencies = false;
installPackageHelper.InstallPackageById("PackageId");
@ -210,6 +214,7 @@ namespace PackageManagement.Tests @@ -210,6 +214,7 @@ namespace PackageManagement.Tests
public void Execute_PackageIdAndSourceAndProjectPassedAndAllowPrereleaseVersionsIsFalse_PrereleaseVersionsNotAllowedWhenGettingPackageOperations()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("PackageId");
installPackageHelper.AllowPrereleaseVersions = false;
installPackageHelper.InstallPackageById("PackageId");
@ -245,6 +250,7 @@ namespace PackageManagement.Tests @@ -245,6 +250,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasInitPowerShellScript_ReturnsTrue()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("Test");
action.PackageId = "Test";
AddInstallOperationWithFile(@"tools\init.ps1");
@ -257,6 +263,7 @@ namespace PackageManagement.Tests @@ -257,6 +263,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasNoFiles_ReturnsFalse()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("Test");
action.PackageId = "Test";
action.Operations = new List<PackageOperation>();
@ -269,6 +276,7 @@ namespace PackageManagement.Tests @@ -269,6 +276,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasInitPowerShellScriptInUpperCase_ReturnsTrue()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("Test");
action.PackageId = "Test";
AddInstallOperationWithFile(@"tools\INIT.PS1");
@ -281,6 +289,7 @@ namespace PackageManagement.Tests @@ -281,6 +289,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasInstallPowerShellScriptInUpperCase_ReturnsTrue()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("Test");
action.PackageId = "Test";
AddInstallOperationWithFile(@"tools\INSTALL.PS1");
@ -293,6 +302,7 @@ namespace PackageManagement.Tests @@ -293,6 +302,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasUninstallPowerShellScriptInUpperCase_ReturnsTrue()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("Test");
action.PackageId = "Test";
AddInstallOperationWithFile(@"tools\UNINSTALL.PS1");
@ -331,5 +341,16 @@ namespace PackageManagement.Tests @@ -331,5 +341,16 @@ namespace PackageManagement.Tests
Assert.AreEqual(expectedPackage, actualPackage);
}
[Test]
public void Execute_PackageIdSpecifiedButDoesNotExistInRepository_ExceptionThrown()
{
CreateAction();
action.PackageId = "UnknownId";
Exception ex = Assert.Throws(typeof(ApplicationException), () => action.Execute());
Assert.AreEqual("Unable to find package 'UnknownId'.", ex.Message);
}
}
}

12
src/AddIns/Misc/PackageManagement/Test/Src/UninstallPackageActionTests.cs

@ -75,7 +75,7 @@ namespace PackageManagement.Tests @@ -75,7 +75,7 @@ namespace PackageManagement.Tests
public void Execute_PackageObjectPassedAndForceRemoveIsFalse_PackageIsNotForcefullyRemoved()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("PackageId");
uninstallPackageHelper.ForceRemove = false;
uninstallPackageHelper.UninstallPackageById("PackageId");
@ -88,7 +88,7 @@ namespace PackageManagement.Tests @@ -88,7 +88,7 @@ namespace PackageManagement.Tests
public void Execute_PackageObjectPassedAndForceRemoveIsTrue_PackageIsForcefullyRemoved()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("PackageId");
uninstallPackageHelper.ForceRemove = true;
uninstallPackageHelper.UninstallPackageById("PackageId");
@ -101,7 +101,7 @@ namespace PackageManagement.Tests @@ -101,7 +101,7 @@ namespace PackageManagement.Tests
public void Execute_PackageObjectPassedAndRemoveDependenciesIsFalse_PackageDependenciesAreNotRemoved()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("PackageId");
uninstallPackageHelper.RemoveDependencies = false;
uninstallPackageHelper.UninstallPackageById("PackageId");
@ -114,7 +114,7 @@ namespace PackageManagement.Tests @@ -114,7 +114,7 @@ namespace PackageManagement.Tests
public void Execute_PackageObjectPassedAndRemoveDependenciesIsTrue_PackageDependenciesAreRemoved()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("PackageId");
uninstallPackageHelper.RemoveDependencies = true;
uninstallPackageHelper.UninstallPackageById("PackageId");
@ -127,7 +127,7 @@ namespace PackageManagement.Tests @@ -127,7 +127,7 @@ namespace PackageManagement.Tests
public void Execute_PackageIdSpecifiedAndForceRemoveIsTrue_PackageIsForcefullyRemoved()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("PackageId");
uninstallPackageHelper.ForceRemove = true;
uninstallPackageHelper.UninstallPackageById("PackageId");
@ -140,7 +140,7 @@ namespace PackageManagement.Tests @@ -140,7 +140,7 @@ namespace PackageManagement.Tests
public void Execute_PackageIdSpecifiedAndRemoveDependenciesIsTrue_PackageDependenciesAreRemoved()
{
CreateAction();
fakeProject.AddFakePackageToSourceRepository("PackageId");
uninstallPackageHelper.RemoveDependencies = true;
uninstallPackageHelper.UninstallPackageById("PackageId");

14
src/AddIns/Misc/PackageManagement/Test/Src/UpdatePackageActionTests.cs

@ -166,7 +166,7 @@ namespace PackageManagement.Tests @@ -166,7 +166,7 @@ namespace PackageManagement.Tests
public void Execute_PackageIdAndSourceAndProjectPassedAndUpdateDependenciesIsTrue_DependenciesUpdatedWhenUpdatingPackage()
{
CreateSolution();
fakeProject.AddFakePackageToSourceRepository("PackageId");
updatePackageHelper.UpdateDependencies = true;
updatePackageHelper.UpdatePackageById("PackageId");
@ -179,7 +179,7 @@ namespace PackageManagement.Tests @@ -179,7 +179,7 @@ namespace PackageManagement.Tests
public void Execute_PackageIdAndSourceAndProjectPassedAndUpdateDependenciesIsFalse_DependenciesNotUpdatedWhenGettingPackageOperations()
{
CreateSolution();
fakeProject.AddFakePackageToSourceRepository("PackageId");
updatePackageHelper.UpdateDependencies = false;
updatePackageHelper.UpdatePackageById("PackageId");
@ -192,7 +192,7 @@ namespace PackageManagement.Tests @@ -192,7 +192,7 @@ namespace PackageManagement.Tests
public void Execute_UpdatedDepdenciesIsFalseAndNoPackageOperations_DependenciesIgnoredWhenGettingPackageOperations()
{
CreateSolution();
fakeProject.AddFakePackageToSourceRepository("PackageId");
updatePackageHelper.UpdateDependencies = false;
updatePackageHelper.UpdatePackageById("PackageId");
@ -205,7 +205,7 @@ namespace PackageManagement.Tests @@ -205,7 +205,7 @@ namespace PackageManagement.Tests
public void Execute_UpdateDependenciesIsTrueAndNoPackageOperations_DependenciesNotIgnoredWhenGettingPackageOperations()
{
CreateSolution();
fakeProject.AddFakePackageToSourceRepository("PackageId");
updatePackageHelper.UpdateDependencies = true;
updatePackageHelper.UpdatePackageById("PackageId");
@ -218,7 +218,7 @@ namespace PackageManagement.Tests @@ -218,7 +218,7 @@ namespace PackageManagement.Tests
public void Execute_AllowPrereleaseVersionsIsFalseAndNoPackageOperations_PrereleaseVersionsNotAllowedWhenGettingPackageOperations()
{
CreateSolution();
fakeProject.AddFakePackageToSourceRepository("PackageId");
updatePackageHelper.AllowPrereleaseVersions = false;
updatePackageHelper.UpdatePackageById("PackageId");
@ -231,7 +231,7 @@ namespace PackageManagement.Tests @@ -231,7 +231,7 @@ namespace PackageManagement.Tests
public void Execute_AllowPrereleaseVersionsIsTrueAndNoPackageOperations_PrereleaseVersionsAllowedWhenGettingPackageOperations()
{
CreateSolution();
fakeProject.AddFakePackageToSourceRepository("PackageId");
updatePackageHelper.AllowPrereleaseVersions = true;
updatePackageHelper.UpdatePackageById("PackageId");
@ -255,6 +255,7 @@ namespace PackageManagement.Tests @@ -255,6 +255,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasInitPowerShellScript_ReturnsTrue()
{
CreateSolution();
fakeProject.AddFakePackageToSourceRepository("Test");
action.PackageId = "Test";
AddInstallOperationWithFile(@"tools\init.ps1");
@ -267,6 +268,7 @@ namespace PackageManagement.Tests @@ -267,6 +268,7 @@ namespace PackageManagement.Tests
public void HasPackageScriptsToRun_OnePackageInOperationsHasNoFiles_ReturnsFalse()
{
CreateSolution();
fakeProject.AddFakePackageToSourceRepository("Test");
action.PackageId = "Test";
action.Operations = new List<PackageOperation>();

Loading…
Cancel
Save