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

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

@ -23,7 +23,6 @@ using ICSharpCode.PackageManagement.Design;
using NuGet; using NuGet;
using NUnit.Framework; using NUnit.Framework;
using PackageManagement.Cmdlets.Tests.Helpers; using PackageManagement.Cmdlets.Tests.Helpers;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Cmdlets.Tests namespace PackageManagement.Cmdlets.Tests
{ {
@ -715,5 +714,19 @@ namespace PackageManagement.Cmdlets.Tests
List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject; List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
CollectionAssert.AreEqual(expectedPackages, actualPackages); 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 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Scripting;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using NuGet; using NuGet;
@ -132,7 +130,10 @@ namespace ICSharpCode.PackageManagement.Design
public IQueryable<IPackage> GetPackages() public IQueryable<IPackage> GetPackages()
{ {
return FakeInstalledPackages.AsQueryable(); var allPackages = new List<FakePackage>();
allPackages.AddRange(FakeInstalledPackages);
allPackages.AddRange(PackagesOnlyInPackagesFolder);
return allPackages.AsQueryable();
} }
public void NoProjectsSelected() public void NoProjectsSelected()
@ -181,6 +182,8 @@ namespace ICSharpCode.PackageManagement.Design
return package; return package;
} }
public List<FakePackage> PackagesOnlyInPackagesFolder = new List<FakePackage>();
public FakePackage AddPackageToSharedLocalRepository(string packageId) public FakePackage AddPackageToSharedLocalRepository(string packageId)
{ {
var package = new FakePackage(packageId); var package = new FakePackage(packageId);
@ -192,5 +195,10 @@ namespace ICSharpCode.PackageManagement.Design
{ {
throw new NotImplementedException(); 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
IProject GetActiveMSBuildProject(); IProject GetActiveMSBuildProject();
IEnumerable<IProject> GetMSBuildProjects(); IEnumerable<IProject> GetMSBuildProjects();
bool HasMultipleProjects(); bool HasMultipleProjects();
bool IsPackageInstalled(IPackage package); bool IsPackageInstalled(IPackage package);
IQueryable<IPackage> GetPackages(); IQueryable<IPackage> GetPackages();
IEnumerable<IPackage> GetPackagesInReverseDependencyOrder(); IEnumerable<IPackage> GetPackagesInReverseDependencyOrder();
string GetInstallPath(IPackage package); 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; } bool IsOpen { get; }
string FileName { get; } string FileName { get; }
} }

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

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

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

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

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

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

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

@ -253,5 +253,20 @@ namespace PackageManagement.Tests
IPackageViewModelParent parent = childViewModel.GetParent(); IPackageViewModelParent parent = childViewModel.GetParent();
Assert.AreEqual(viewModel, parent); 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
} }
[Test] [Test]
public void GetPackages_OnePackageInstalledIntoOneProjectButTwoPackagesInSolutionRepository_ReturnsOnlyPackageInstalled() public void GetPackages_OnePackageInstalledIntoOneProjectButTwoPackagesInSolutionRepository_ReturnsAllPackages()
{ {
CreateSolution(); CreateSolution();
fakeProjectService.CurrentProject = null; fakeProjectService.CurrentProject = null;
@ -600,19 +600,47 @@ namespace PackageManagement.Tests
IQueryable<IPackage> packages = solution.GetPackages(); IQueryable<IPackage> packages = solution.GetPackages();
var expectedPackages = new FakePackage[] { var expectedPackages = new FakePackage[] {
notInstalledPackage,
installedPackage installedPackage
}; };
Assert.AreEqual(expectedPackages, packages);
} }
[Test] [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(); CreateSolution();
fakeProjectService.CurrentProject = null; fakeProjectService.CurrentProject = null;
TestableProject testProject1 = AddProjectToOpenProjects("Test1"); TestableProject testProject1 = AddProjectToOpenProjects("Test1");
TestableProject testProject2 = AddProjectToOpenProjects("Test2"); TestableProject testProject2 = AddProjectToOpenProjects("Test2");
IQueryable<IPackage> packages = solution.GetPackages(); IQueryable<IPackage> packages = solution.GetInstalledPackages();
Assert.AreEqual(testProject1, fakeProjectFactory.ProjectsPassedToCreateProject[0]); Assert.AreEqual(testProject1, fakeProjectFactory.ProjectsPassedToCreateProject[0]);
Assert.AreEqual(testProject2, fakeProjectFactory.ProjectsPassedToCreateProject[1]); Assert.AreEqual(testProject2, fakeProjectFactory.ProjectsPassedToCreateProject[1]);
@ -632,5 +660,21 @@ namespace PackageManagement.Tests
CollectionAssert.AreEqual(expectedProjects, projects); 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