13 changed files with 365 additions and 8 deletions
@ -0,0 +1,77 @@
@@ -0,0 +1,77 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Linq; |
||||
using NuGet; |
||||
|
||||
namespace ICSharpCode.PackageManagement |
||||
{ |
||||
public class RecentPackageRepository : IPackageRepository |
||||
{ |
||||
public const int DefaultMaximumPackagesCount = 20; |
||||
|
||||
List<IPackage> packages = new List<IPackage>(); |
||||
int maximumPackagesCount = DefaultMaximumPackagesCount; |
||||
|
||||
public RecentPackageRepository() |
||||
{ |
||||
} |
||||
|
||||
public string Source { |
||||
get { return "RecentPackages"; } |
||||
} |
||||
|
||||
public void AddPackage(IPackage package) |
||||
{ |
||||
RemovePackageIfAlreadyAdded(package); |
||||
AddPackageAtBeginning(package); |
||||
RemoveLastPackageIfCurrentPackageCountExceedsMaximum(); |
||||
} |
||||
|
||||
void RemovePackageIfAlreadyAdded(IPackage package) |
||||
{ |
||||
int index = FindPackage(package); |
||||
if (index >= 0) { |
||||
packages.RemoveAt(index); |
||||
} |
||||
} |
||||
|
||||
int FindPackage(IPackage package) |
||||
{ |
||||
return packages.FindIndex(p => PackageEqualityComparer.IdAndVersion.Equals(package, p)); |
||||
} |
||||
|
||||
void AddPackageAtBeginning(IPackage package) |
||||
{ |
||||
packages.Insert(0, package); |
||||
} |
||||
|
||||
void RemoveLastPackageIfCurrentPackageCountExceedsMaximum() |
||||
{ |
||||
if (packages.Count > maximumPackagesCount) { |
||||
RemoveLastPackage(); |
||||
} |
||||
} |
||||
|
||||
void RemoveLastPackage() |
||||
{ |
||||
packages.RemoveAt(packages.Count - 1); |
||||
} |
||||
|
||||
public void RemovePackage(IPackage package) |
||||
{ |
||||
} |
||||
|
||||
public IQueryable<IPackage> GetPackages() |
||||
{ |
||||
return packages.AsQueryable(); |
||||
} |
||||
|
||||
public int MaximumPackagesCount { |
||||
get { return maximumPackagesCount; } |
||||
set { maximumPackagesCount = value; } |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.Linq; |
||||
using NuGet; |
||||
|
||||
namespace ICSharpCode.PackageManagement |
||||
{ |
||||
public class RecentPackagesViewModel : PackagesViewModel |
||||
{ |
||||
IPackageRepository recentPackageRepository; |
||||
|
||||
public RecentPackagesViewModel(IPackageManagementService packageManagementService, ITaskFactory taskFactory) |
||||
: base(packageManagementService, taskFactory) |
||||
{ |
||||
recentPackageRepository = packageManagementService.RecentPackageRepository; |
||||
packageManagementService.PackageInstalled += PackageInstalled; |
||||
} |
||||
|
||||
void PackageInstalled(object sender, EventArgs e) |
||||
{ |
||||
ReadPackages(); |
||||
} |
||||
|
||||
protected override IQueryable<IPackage> GetAllPackages() |
||||
{ |
||||
return recentPackageRepository.GetPackages(); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,111 @@
@@ -0,0 +1,111 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Linq; |
||||
using ICSharpCode.PackageManagement; |
||||
using ICSharpCode.PackageManagement.Design; |
||||
using NuGet; |
||||
using NUnit.Framework; |
||||
using PackageManagement.Tests.Helpers; |
||||
|
||||
namespace PackageManagement.Tests |
||||
{ |
||||
[TestFixture] |
||||
public class RecentPackageRepositoryTests |
||||
{ |
||||
RecentPackageRepository repository; |
||||
|
||||
void CreateRepository() |
||||
{ |
||||
repository = new RecentPackageRepository(); |
||||
} |
||||
|
||||
FakePackage AddOnePackageToRepository(string id) |
||||
{ |
||||
var package = new FakePackage(id); |
||||
repository.AddPackage(package); |
||||
return package; |
||||
} |
||||
|
||||
IEnumerable<IPackage> AddTwoDifferentPackagesToRepository() |
||||
{ |
||||
yield return AddOnePackageToRepository("Test.Package.1"); |
||||
yield return AddOnePackageToRepository("Test.Package.2"); |
||||
} |
||||
|
||||
IEnumerable<IPackage> AddFourDifferentPackagesToRepository() |
||||
{ |
||||
yield return AddOnePackageToRepository("Test.Package.1"); |
||||
yield return AddOnePackageToRepository("Test.Package.2"); |
||||
yield return AddOnePackageToRepository("Test.Package.3"); |
||||
yield return AddOnePackageToRepository("Test.Package.4"); |
||||
} |
||||
|
||||
[Test] |
||||
public void Source_NewRecentRepositoryCreated_IsRecentPackages() |
||||
{ |
||||
CreateRepository(); |
||||
Assert.AreEqual("RecentPackages", repository.Source); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetPackages_RepositoryIsEmptyAndOnePackageAdded_ReturnsPackageAdded() |
||||
{ |
||||
CreateRepository(); |
||||
var package = AddOnePackageToRepository("Test.Package"); |
||||
|
||||
var packages = repository.GetPackages(); |
||||
|
||||
var expectedPackages = new FakePackage[] { |
||||
package |
||||
}; |
||||
|
||||
PackageCollectionAssert.AreEqual(expectedPackages, packages); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetPackages_RepositoryIsEmptyAndTwoDifferentPackagesAdded_ReturnsPackagesInReverseOrderWithLastAddedFirst() |
||||
{ |
||||
CreateRepository(); |
||||
var packagesAdded = AddTwoDifferentPackagesToRepository(); |
||||
|
||||
var packages = repository.GetPackages(); |
||||
|
||||
var expectedPackages = packagesAdded.Reverse(); |
||||
|
||||
PackageCollectionAssert.AreEqual(expectedPackages, packages); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetPackages_RepositoryCanHoldThreePackagesAndFourPackagesAdded_ReturnsLastThreePackagesAddedInReverseOrder() |
||||
{ |
||||
CreateRepository(); |
||||
repository.MaximumPackagesCount = 3; |
||||
var packagesAdded = AddFourDifferentPackagesToRepository(); |
||||
|
||||
var packages = repository.GetPackages(); |
||||
|
||||
var expectedPackages = packagesAdded.Reverse().Take(3); |
||||
|
||||
PackageCollectionAssert.AreEqual(expectedPackages, packages); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetPackages_RepositoryIsEmptyAndSamePackageIsAddedTwice_OnePackageReturned() |
||||
{ |
||||
CreateRepository(); |
||||
AddOnePackageToRepository("Test"); |
||||
var package = AddOnePackageToRepository("Test"); |
||||
|
||||
var packages = repository.GetPackages(); |
||||
|
||||
var expectedPackages = new FakePackage[] { |
||||
package |
||||
}; |
||||
|
||||
PackageCollectionAssert.AreEqual(expectedPackages, packages); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,67 @@
@@ -0,0 +1,67 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using ICSharpCode.PackageManagement; |
||||
using ICSharpCode.PackageManagement.Design; |
||||
using NUnit.Framework; |
||||
using PackageManagement.Tests.Helpers; |
||||
|
||||
namespace PackageManagement.Tests |
||||
{ |
||||
[TestFixture] |
||||
public class RecentPackagesViewModelTests |
||||
{ |
||||
RecentPackagesViewModel viewModel; |
||||
FakePackageManagementService packageManagementService; |
||||
FakeTaskFactory taskFactory; |
||||
|
||||
void CreateViewModel() |
||||
{ |
||||
CreatePackageManagementService(); |
||||
CreateViewModel(packageManagementService); |
||||
} |
||||
|
||||
void CreatePackageManagementService() |
||||
{ |
||||
packageManagementService = new FakePackageManagementService(); |
||||
} |
||||
|
||||
void CreateViewModel(FakePackageManagementService packageManagementService) |
||||
{ |
||||
taskFactory = new FakeTaskFactory(); |
||||
viewModel = new RecentPackagesViewModel(packageManagementService, taskFactory); |
||||
} |
||||
|
||||
void CompleteReadPackagesTask() |
||||
{ |
||||
taskFactory.ExecuteAllFakeTasks(); |
||||
} |
||||
|
||||
void ClearReadPackagesTasks() |
||||
{ |
||||
taskFactory.ClearAllFakeTasks(); |
||||
} |
||||
|
||||
[Test] |
||||
public void PackageViewModels_PackageIsInstalledAfterRecentPackagesDisplayed_PackagesOnDisplayAreUpdated() |
||||
{ |
||||
CreateViewModel(); |
||||
viewModel.ReadPackages(); |
||||
CompleteReadPackagesTask(); |
||||
var package = new FakePackage("Test"); |
||||
FakePackageRepository repository = packageManagementService.FakeRecentPackageRepository; |
||||
repository.FakePackages.Add(package); |
||||
|
||||
ClearReadPackagesTasks(); |
||||
packageManagementService.FirePackageInstalled(); |
||||
CompleteReadPackagesTask(); |
||||
|
||||
var expectedPackages = new FakePackage[] { |
||||
package |
||||
}; |
||||
|
||||
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue