Browse Source

Make Get-Packages consistent with Visual Studio.

Get-Packages should return all NuGet packages in the packages folder
even if they are not installed in any project.
pull/375/head
Matt Ward 12 years ago
parent
commit
b76a1346f9
  1. 12
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs
  2. 15
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs
  3. 14
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs
  4. 8
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs
  5. 2
      src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs
  6. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs
  7. 7
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs
  8. 15
      src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs
  9. 50
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs

12
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs

@ -200,12 +200,12 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -200,12 +200,12 @@ namespace ICSharpCode.PackageManagement.Cmdlets
if (project != null) {
return new UpdatedPackages(project, repository);
}
return new UpdatedPackages(GetSolutionPackages(), repository);
return new UpdatedPackages(GetPackagesInstalledIntoAnyProject(), repository);
}
IQueryable<IPackage> GetSolutionPackages()
IQueryable<IPackage> GetPackagesInstalledIntoAnyProject()
{
return ConsoleHost.Solution.GetPackages();
return ConsoleHost.Solution.GetInstalledPackages();
}
IPackageManagementProject GetSelectedProject(IPackageRepository repository)
@ -223,17 +223,17 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -223,17 +223,17 @@ namespace ICSharpCode.PackageManagement.Cmdlets
IQueryable<IPackage> GetInstalledPackages()
{
IQueryable<IPackage> packages = GetPackagesFromSelectedProjectOrSolution();
IQueryable<IPackage> packages = GetPackagesFromSelectedProjectOrPackagesFolder();
return FilterPackages(packages);
}
IQueryable<IPackage> GetPackagesFromSelectedProjectOrSolution()
IQueryable<IPackage> GetPackagesFromSelectedProjectOrPackagesFolder()
{
IPackageManagementProject project = GetSelectedProject();
if (project != null) {
return project.GetPackages();
}
return GetSolutionPackages();
return ConsoleHost.Solution.GetPackages();
}
IPackageManagementProject GetSelectedProject()

15
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs

@ -23,7 +23,6 @@ using ICSharpCode.PackageManagement.Design; @@ -23,7 +23,6 @@ using ICSharpCode.PackageManagement.Design;
using NuGet;
using NUnit.Framework;
using PackageManagement.Cmdlets.Tests.Helpers;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Cmdlets.Tests
{
@ -715,5 +714,19 @@ namespace PackageManagement.Cmdlets.Tests @@ -715,5 +714,19 @@ namespace PackageManagement.Cmdlets.Tests
List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
CollectionAssert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_NoParametersPassedAndPackageOnlyInPackagesFolder_ReturnsPackageInPackagesFolder()
{
CreateCmdlet();
FakePackage package = FakePackage.CreatePackageWithVersion("One", "1.0");
fakeSolution.PackagesOnlyInPackagesFolder.Add(package);
RunCmdlet();
List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
List<FakePackage> expectedPackages = fakeSolution.PackagesOnlyInPackagesFolder;
Assert.AreEqual(expectedPackages, actualPackages);
}
}
}

14
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs

@ -19,9 +19,7 @@ @@ -19,9 +19,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Scripting;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
@ -132,7 +130,10 @@ namespace ICSharpCode.PackageManagement.Design @@ -132,7 +130,10 @@ namespace ICSharpCode.PackageManagement.Design
public IQueryable<IPackage> GetPackages()
{
return FakeInstalledPackages.AsQueryable();
var allPackages = new List<FakePackage>();
allPackages.AddRange(FakeInstalledPackages);
allPackages.AddRange(PackagesOnlyInPackagesFolder);
return allPackages.AsQueryable();
}
public void NoProjectsSelected()
@ -181,6 +182,8 @@ namespace ICSharpCode.PackageManagement.Design @@ -181,6 +182,8 @@ namespace ICSharpCode.PackageManagement.Design
return package;
}
public List<FakePackage> PackagesOnlyInPackagesFolder = new List<FakePackage>();
public FakePackage AddPackageToSharedLocalRepository(string packageId)
{
var package = new FakePackage(packageId);
@ -192,5 +195,10 @@ namespace ICSharpCode.PackageManagement.Design @@ -192,5 +195,10 @@ namespace ICSharpCode.PackageManagement.Design
{
throw new NotImplementedException();
}
public IQueryable<IPackage> GetInstalledPackages()
{
return FakeInstalledPackages.AsQueryable();
}
}
}

8
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs

@ -37,12 +37,18 @@ namespace ICSharpCode.PackageManagement @@ -37,12 +37,18 @@ namespace ICSharpCode.PackageManagement
IProject GetActiveMSBuildProject();
IEnumerable<IProject> GetMSBuildProjects();
bool HasMultipleProjects();
bool IsPackageInstalled(IPackage package);
IQueryable<IPackage> GetPackages();
IEnumerable<IPackage> GetPackagesInReverseDependencyOrder();
string GetInstallPath(IPackage package);
/// <summary>
/// Returns all packages that are installed into solution or a project.
/// GetPackages() will return any packages in the packages folder even if
/// they are not installed.
/// </summary>
IQueryable<IPackage> GetInstalledPackages();
bool IsOpen { get; }
string FileName { get; }
}

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

@ -81,7 +81,7 @@ namespace ICSharpCode.PackageManagement @@ -81,7 +81,7 @@ namespace ICSharpCode.PackageManagement
if (project != null) {
return project.GetPackages();
}
return solution.GetPackages();
return solution.GetInstalledPackages();
}
void ThrowOriginalExceptionWhenTryingToGetProjectManager()

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

@ -148,7 +148,7 @@ namespace ICSharpCode.PackageManagement @@ -148,7 +148,7 @@ namespace ICSharpCode.PackageManagement
public IQueryable<IPackage> GetPackagesInstalledInSolution()
{
return Solution.GetPackages();
return Solution.GetInstalledPackages();
}
public IQueryable<IPackage> GetInstalledPackages(IPackageRepository sourceRepository)

7
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs

@ -19,7 +19,6 @@ @@ -19,7 +19,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
@ -165,6 +164,12 @@ namespace ICSharpCode.PackageManagement @@ -165,6 +164,12 @@ namespace ICSharpCode.PackageManagement
}
public IQueryable<IPackage> GetPackages()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.GetPackages();
}
public IQueryable<IPackage> GetInstalledPackages()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
List<IPackageManagementProject> projects = GetProjects(ActivePackageRepository).ToList();

15
src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs

@ -253,5 +253,20 @@ namespace PackageManagement.Tests @@ -253,5 +253,20 @@ namespace PackageManagement.Tests
IPackageViewModelParent parent = childViewModel.GetParent();
Assert.AreEqual(viewModel, parent);
}
[Test]
public void PackageViewModels_PackageOnlyInPackagesFolder_ReturnsNoPackages()
{
CreateSolution();
NoProjectSelected();
CreateViewModel(solution);
FakePackage package = FakePackage.CreatePackageWithVersion("One", "1.1");
solution.PackagesOnlyInPackagesFolder.Add(package);
viewModel.ReadPackages();
CompleteReadPackagesTask();
Assert.AreEqual(0, viewModel.PackageViewModels.Count);
}
}
}

50
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs

@ -582,7 +582,7 @@ namespace PackageManagement.Tests @@ -582,7 +582,7 @@ namespace PackageManagement.Tests
}
[Test]
public void GetPackages_OnePackageInstalledIntoOneProjectButTwoPackagesInSolutionRepository_ReturnsOnlyPackageInstalled()
public void GetPackages_OnePackageInstalledIntoOneProjectButTwoPackagesInSolutionRepository_ReturnsAllPackages()
{
CreateSolution();
fakeProjectService.CurrentProject = null;
@ -600,19 +600,47 @@ namespace PackageManagement.Tests @@ -600,19 +600,47 @@ namespace PackageManagement.Tests
IQueryable<IPackage> packages = solution.GetPackages();
var expectedPackages = new FakePackage[] {
notInstalledPackage,
installedPackage
};
Assert.AreEqual(expectedPackages, packages);
}
[Test]
public void GetPackages_TwoProjectsButNoPackagesInstalled_PackageProjectsCreatedUsingActiveRepository()
public void GetInstalledPackages_OnePackageInstalledIntoOneProjectButTwoPackagesInSolutionRepository_ReturnsOnlyPackageInstalled()
{
CreateSolution();
fakeProjectService.CurrentProject = null;
TestableProject testProject = AddProjectToOpenProjects("Test");
var project = new FakePackageManagementProject();
fakeProjectFactory.CreatePackageManagementProject = (repository, msbuildProject) => {
return project;
};
FakePackage notInstalledPackage = FakePackage.CreatePackageWithVersion("NotInstalled", "1.0.0.0");
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(notInstalledPackage);
FakePackage installedPackage = FakePackage.CreatePackageWithVersion("Installed", "1.0.0.0");
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(installedPackage);
project.FakePackages.Add(installedPackage);
IQueryable<IPackage> packages = solution.GetInstalledPackages();
var expectedPackages = new FakePackage[] {
installedPackage
};
Assert.AreEqual(expectedPackages, packages);
}
[Test]
public void GetInstalledPackages_TwoProjectsButNoPackagesInstalled_PackageProjectsCreatedUsingActiveRepository()
{
CreateSolution();
fakeProjectService.CurrentProject = null;
TestableProject testProject1 = AddProjectToOpenProjects("Test1");
TestableProject testProject2 = AddProjectToOpenProjects("Test2");
IQueryable<IPackage> packages = solution.GetPackages();
IQueryable<IPackage> packages = solution.GetInstalledPackages();
Assert.AreEqual(testProject1, fakeProjectFactory.ProjectsPassedToCreateProject[0]);
Assert.AreEqual(testProject2, fakeProjectFactory.ProjectsPassedToCreateProject[1]);
@ -632,5 +660,21 @@ namespace PackageManagement.Tests @@ -632,5 +660,21 @@ namespace PackageManagement.Tests
CollectionAssert.AreEqual(expectedProjects, projects);
}
[Test]
public void GetPackages_OnePackageInstalledIntoPackagesFolderOnly_ReturnsOnePackage()
{
CreateSolution();
fakeProjectService.CurrentProject = null;
FakePackage fakePackage = FakePackage.CreatePackageWithVersion("One", "1.0");
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(fakePackage);
IQueryable<IPackage> packages = solution.GetPackages();
var expectedPackages = new FakePackage[] {
fakePackage
};
Assert.AreEqual(expectedPackages, packages);
}
}
}

Loading…
Cancel
Save