Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit b76a134

Browse files
committed
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.
1 parent 0f6a3b8 commit b76a134

9 files changed

Lines changed: 108 additions & 17 deletions

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,12 +200,12 @@ UpdatedPackages CreateUpdatedPackages(IPackageRepository repository)
200200
if (project != null) {
201201
return new UpdatedPackages(project, repository);
202202
}
203-
return new UpdatedPackages(GetSolutionPackages(), repository);
203+
return new UpdatedPackages(GetPackagesInstalledIntoAnyProject(), repository);
204204
}
205205

206-
IQueryable<IPackage> GetSolutionPackages()
206+
IQueryable<IPackage> GetPackagesInstalledIntoAnyProject()
207207
{
208-
return ConsoleHost.Solution.GetPackages();
208+
return ConsoleHost.Solution.GetInstalledPackages();
209209
}
210210

211211
IPackageManagementProject GetSelectedProject(IPackageRepository repository)
@@ -223,17 +223,17 @@ bool HasSelectedProjectName()
223223

224224
IQueryable<IPackage> GetInstalledPackages()
225225
{
226-
IQueryable<IPackage> packages = GetPackagesFromSelectedProjectOrSolution();
226+
IQueryable<IPackage> packages = GetPackagesFromSelectedProjectOrPackagesFolder();
227227
return FilterPackages(packages);
228228
}
229229

230-
IQueryable<IPackage> GetPackagesFromSelectedProjectOrSolution()
230+
IQueryable<IPackage> GetPackagesFromSelectedProjectOrPackagesFolder()
231231
{
232232
IPackageManagementProject project = GetSelectedProject();
233233
if (project != null) {
234234
return project.GetPackages();
235235
}
236-
return GetSolutionPackages();
236+
return ConsoleHost.Solution.GetPackages();
237237
}
238238

239239
IPackageManagementProject GetSelectedProject()

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
using NuGet;
2424
using NUnit.Framework;
2525
using PackageManagement.Cmdlets.Tests.Helpers;
26-
using PackageManagement.Tests.Helpers;
2726

2827
namespace PackageManagement.Cmdlets.Tests
2928
{
@@ -715,5 +714,19 @@ public void ProcessRecord_ListAvailablePackagesAndAllVersionsAndTwoVersionsOfSam
715714
List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
716715
CollectionAssert.AreEqual(expectedPackages, actualPackages);
717716
}
717+
718+
[Test]
719+
public void ProcessRecord_NoParametersPassedAndPackageOnlyInPackagesFolder_ReturnsPackageInPackagesFolder()
720+
{
721+
CreateCmdlet();
722+
FakePackage package = FakePackage.CreatePackageWithVersion("One", "1.0");
723+
fakeSolution.PackagesOnlyInPackagesFolder.Add(package);
724+
725+
RunCmdlet();
726+
727+
List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
728+
List<FakePackage> expectedPackages = fakeSolution.PackagesOnlyInPackagesFolder;
729+
Assert.AreEqual(expectedPackages, actualPackages);
730+
}
718731
}
719732
}

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@
1919
using System;
2020
using System.Collections.Generic;
2121
using System.Linq;
22-
using ICSharpCode.Core;
2322
using ICSharpCode.PackageManagement;
24-
using ICSharpCode.PackageManagement.Scripting;
2523
using ICSharpCode.SharpDevelop.Project;
2624
using NuGet;
2725

@@ -132,7 +130,10 @@ public bool IsPackageInstalled(IPackage package)
132130

133131
public IQueryable<IPackage> GetPackages()
134132
{
135-
return FakeInstalledPackages.AsQueryable();
133+
var allPackages = new List<FakePackage>();
134+
allPackages.AddRange(FakeInstalledPackages);
135+
allPackages.AddRange(PackagesOnlyInPackagesFolder);
136+
return allPackages.AsQueryable();
136137
}
137138

138139
public void NoProjectsSelected()
@@ -181,6 +182,8 @@ public FakePackage AddPackageToSharedLocalRepository(string packageId, string ve
181182
return package;
182183
}
183184

185+
public List<FakePackage> PackagesOnlyInPackagesFolder = new List<FakePackage>();
186+
184187
public FakePackage AddPackageToSharedLocalRepository(string packageId)
185188
{
186189
var package = new FakePackage(packageId);
@@ -192,5 +195,10 @@ public string GetInstallPath(IPackage package)
192195
{
193196
throw new NotImplementedException();
194197
}
198+
199+
public IQueryable<IPackage> GetInstalledPackages()
200+
{
201+
return FakeInstalledPackages.AsQueryable();
202+
}
195203
}
196204
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,18 @@ public interface IPackageManagementSolution
3737
IProject GetActiveMSBuildProject();
3838
IEnumerable<IProject> GetMSBuildProjects();
3939
bool HasMultipleProjects();
40-
4140
bool IsPackageInstalled(IPackage package);
4241
IQueryable<IPackage> GetPackages();
4342
IEnumerable<IPackage> GetPackagesInReverseDependencyOrder();
4443
string GetInstallPath(IPackage package);
4544

45+
/// <summary>
46+
/// Returns all packages that are installed into solution or a project.
47+
/// GetPackages() will return any packages in the packages folder even if
48+
/// they are not installed.
49+
/// </summary>
50+
IQueryable<IPackage> GetInstalledPackages();
51+
4652
bool IsOpen { get; }
4753
string FileName { get; }
4854
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ protected override IQueryable<IPackage> GetAllPackages()
8181
if (project != null) {
8282
return project.GetPackages();
8383
}
84-
return solution.GetPackages();
84+
return solution.GetInstalledPackages();
8585
}
8686

8787
void ThrowOriginalExceptionWhenTryingToGetProjectManager()

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public bool IsPackageInstalledInSolution(IPackage package)
148148

149149
public IQueryable<IPackage> GetPackagesInstalledInSolution()
150150
{
151-
return Solution.GetPackages();
151+
return Solution.GetInstalledPackages();
152152
}
153153

154154
public IQueryable<IPackage> GetInstalledPackages(IPackageRepository sourceRepository)

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
using System;
2020
using System.Collections.Generic;
2121
using System.Linq;
22-
using ICSharpCode.Core;
2322
using ICSharpCode.SharpDevelop.Project;
2423
using NuGet;
2524

@@ -165,6 +164,12 @@ ISolutionPackageRepository CreateSolutionPackageRepository()
165164
}
166165

167166
public IQueryable<IPackage> GetPackages()
167+
{
168+
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
169+
return repository.GetPackages();
170+
}
171+
172+
public IQueryable<IPackage> GetInstalledPackages()
168173
{
169174
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
170175
List<IPackageManagementProject> projects = GetProjects(ActivePackageRepository).ToList();

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,5 +253,20 @@ public void PackageViewModels_ChildViewModelParent_IsInstalledPackagesViewModel(
253253
IPackageViewModelParent parent = childViewModel.GetParent();
254254
Assert.AreEqual(viewModel, parent);
255255
}
256+
257+
[Test]
258+
public void PackageViewModels_PackageOnlyInPackagesFolder_ReturnsNoPackages()
259+
{
260+
CreateSolution();
261+
NoProjectSelected();
262+
CreateViewModel(solution);
263+
FakePackage package = FakePackage.CreatePackageWithVersion("One", "1.1");
264+
solution.PackagesOnlyInPackagesFolder.Add(package);
265+
266+
viewModel.ReadPackages();
267+
CompleteReadPackagesTask();
268+
269+
Assert.AreEqual(0, viewModel.PackageViewModels.Count);
270+
}
256271
}
257272
}

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

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,7 @@ public void GetInstallPath_OnePackageInSolutionRepository_ReturnsPackageInstallP
582582
}
583583

584584
[Test]
585-
public void GetPackages_OnePackageInstalledIntoOneProjectButTwoPackagesInSolutionRepository_ReturnsOnlyPackageInstalled()
585+
public void GetPackages_OnePackageInstalledIntoOneProjectButTwoPackagesInSolutionRepository_ReturnsAllPackages()
586586
{
587587
CreateSolution();
588588
fakeProjectService.CurrentProject = null;
@@ -600,19 +600,47 @@ public void GetPackages_OnePackageInstalledIntoOneProjectButTwoPackagesInSolutio
600600
IQueryable<IPackage> packages = solution.GetPackages();
601601

602602
var expectedPackages = new FakePackage[] {
603+
notInstalledPackage,
603604
installedPackage
604605
};
606+
607+
Assert.AreEqual(expectedPackages, packages);
605608
}
606609

607610
[Test]
608-
public void GetPackages_TwoProjectsButNoPackagesInstalled_PackageProjectsCreatedUsingActiveRepository()
611+
public void GetInstalledPackages_OnePackageInstalledIntoOneProjectButTwoPackagesInSolutionRepository_ReturnsOnlyPackageInstalled()
612+
{
613+
CreateSolution();
614+
fakeProjectService.CurrentProject = null;
615+
TestableProject testProject = AddProjectToOpenProjects("Test");
616+
var project = new FakePackageManagementProject();
617+
fakeProjectFactory.CreatePackageManagementProject = (repository, msbuildProject) => {
618+
return project;
619+
};
620+
FakePackage notInstalledPackage = FakePackage.CreatePackageWithVersion("NotInstalled", "1.0.0.0");
621+
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(notInstalledPackage);
622+
FakePackage installedPackage = FakePackage.CreatePackageWithVersion("Installed", "1.0.0.0");
623+
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(installedPackage);
624+
project.FakePackages.Add(installedPackage);
625+
626+
IQueryable<IPackage> packages = solution.GetInstalledPackages();
627+
628+
var expectedPackages = new FakePackage[] {
629+
installedPackage
630+
};
631+
632+
Assert.AreEqual(expectedPackages, packages);
633+
}
634+
635+
[Test]
636+
public void GetInstalledPackages_TwoProjectsButNoPackagesInstalled_PackageProjectsCreatedUsingActiveRepository()
609637
{
610638
CreateSolution();
611639
fakeProjectService.CurrentProject = null;
612640
TestableProject testProject1 = AddProjectToOpenProjects("Test1");
613641
TestableProject testProject2 = AddProjectToOpenProjects("Test2");
614642

615-
IQueryable<IPackage> packages = solution.GetPackages();
643+
IQueryable<IPackage> packages = solution.GetInstalledPackages();
616644

617645
Assert.AreEqual(testProject1, fakeProjectFactory.ProjectsPassedToCreateProject[0]);
618646
Assert.AreEqual(testProject2, fakeProjectFactory.ProjectsPassedToCreateProject[1]);
@@ -632,5 +660,21 @@ public void GetMSBuildProjects_TwoProjectsInOpenSolutionButOneIsNotMSBuildBased_
632660

633661
CollectionAssert.AreEqual(expectedProjects, projects);
634662
}
663+
664+
[Test]
665+
public void GetPackages_OnePackageInstalledIntoPackagesFolderOnly_ReturnsOnePackage()
666+
{
667+
CreateSolution();
668+
fakeProjectService.CurrentProject = null;
669+
FakePackage fakePackage = FakePackage.CreatePackageWithVersion("One", "1.0");
670+
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(fakePackage);
671+
672+
IQueryable<IPackage> packages = solution.GetPackages();
673+
674+
var expectedPackages = new FakePackage[] {
675+
fakePackage
676+
};
677+
Assert.AreEqual(expectedPackages, packages);
678+
}
635679
}
636680
}

0 commit comments

Comments
 (0)