8 changed files with 163 additions and 10 deletions
@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
|
||||
// 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; |
||||
|
||||
namespace ICSharpCode.PackageManagement |
||||
{ |
||||
public interface IPackageRepositoryCache : ISharpDevelopPackageRepositoryFactory |
||||
{ |
||||
} |
||||
} |
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
// 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 NuGet; |
||||
|
||||
namespace ICSharpCode.PackageManagement |
||||
{ |
||||
public class PackageRepositoryCache : IPackageRepositoryCache |
||||
{ |
||||
ISharpDevelopPackageRepositoryFactory factory; |
||||
Dictionary<PackageSource, IPackageRepository> repositories = |
||||
new Dictionary<PackageSource, IPackageRepository>(); |
||||
|
||||
public PackageRepositoryCache(ISharpDevelopPackageRepositoryFactory factory) |
||||
{ |
||||
this.factory = factory; |
||||
} |
||||
|
||||
public PackageRepositoryCache() |
||||
: this(new SharpDevelopPackageRepositoryFactory()) |
||||
{ |
||||
} |
||||
|
||||
public IPackageRepository CreateRepository(PackageSource packageSource) |
||||
{ |
||||
IPackageRepository repository = GetExistingRepository(packageSource); |
||||
if (repository != null) { |
||||
return repository; |
||||
} |
||||
return CreateNewCachedRepository(packageSource); |
||||
} |
||||
|
||||
IPackageRepository GetExistingRepository(PackageSource packageSource) |
||||
{ |
||||
IPackageRepository repository = null; |
||||
if (repositories.TryGetValue(packageSource, out repository)) { |
||||
return repository; |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
IPackageRepository CreateNewCachedRepository(PackageSource packageSource) |
||||
{ |
||||
IPackageRepository repository = factory.CreateRepository(packageSource); |
||||
repositories.Add(packageSource, repository); |
||||
return repository; |
||||
} |
||||
|
||||
public ISharedPackageRepository CreateSharedRepository(string path) |
||||
{ |
||||
return factory.CreateSharedRepository(path); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,79 @@
@@ -0,0 +1,79 @@
|
||||
// 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 NuGet; |
||||
using NUnit.Framework; |
||||
using PackageManagement.Tests.Helpers; |
||||
|
||||
namespace PackageManagement.Tests |
||||
{ |
||||
[TestFixture] |
||||
public class PackageRepositoryCacheTests |
||||
{ |
||||
PackageRepositoryCache cache; |
||||
FakePackageRepositoryFactory fakePackageRepositoryFactory; |
||||
PackageSource nuGetPackageSource; |
||||
|
||||
void CreateCache() |
||||
{ |
||||
nuGetPackageSource = new PackageSource("http://nuget.org", "NuGet"); |
||||
fakePackageRepositoryFactory = new FakePackageRepositoryFactory(); |
||||
cache = new PackageRepositoryCache(fakePackageRepositoryFactory); |
||||
} |
||||
|
||||
[Test] |
||||
public void CreateRepository_CacheCastToISharpDevelopPackageRepositoryFactory_CreatesPackageRepositoryUsingPackageRepositoryFactoryPassedInConstructor() |
||||
{ |
||||
CreateCache(); |
||||
var factory = cache as ISharpDevelopPackageRepositoryFactory; |
||||
IPackageRepository repository = factory.CreateRepository(nuGetPackageSource); |
||||
|
||||
Assert.AreEqual(fakePackageRepositoryFactory.FakePackageRepository, repository); |
||||
} |
||||
|
||||
[Test] |
||||
public void CreateRepository_PackageSourcePassed_PackageSourceUsedToCreateRepository() |
||||
{ |
||||
CreateCache(); |
||||
cache.CreateRepository(nuGetPackageSource); |
||||
|
||||
var actualPackageSource = fakePackageRepositoryFactory.FirstPackageSourcePassedToCreateRepository; |
||||
Assert.AreEqual(nuGetPackageSource, actualPackageSource); |
||||
} |
||||
|
||||
[Test] |
||||
public void CreateRepository_RepositoryAlreadyCreatedForPackageSource_NoRepositoryCreated() |
||||
{ |
||||
CreateCache(); |
||||
cache.CreateRepository(nuGetPackageSource); |
||||
fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository.Clear(); |
||||
|
||||
cache.CreateRepository(nuGetPackageSource); |
||||
|
||||
Assert.AreEqual(0, fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository.Count); |
||||
} |
||||
|
||||
[Test] |
||||
public void CreateRepository_RepositoryAlreadyCreatedForPackageSource_RepositoryOriginallyCreatedIsReturned() |
||||
{ |
||||
CreateCache(); |
||||
IPackageRepository originallyCreatedRepository = cache.CreateRepository(nuGetPackageSource); |
||||
fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository.Clear(); |
||||
|
||||
IPackageRepository repository = cache.CreateRepository(nuGetPackageSource); |
||||
|
||||
Assert.AreSame(originallyCreatedRepository, repository); |
||||
} |
||||
|
||||
[Test] |
||||
public void CreatedSharedRepository_PathPassed_PathUsedToCreatedSharedRepository() |
||||
{ |
||||
CreateCache(); |
||||
FakeSharedPackageRepository repository = cache.CreateSharedRepository("abc") as FakeSharedPackageRepository; |
||||
|
||||
Assert.AreEqual("abc", repository.PathPassedToConstructor); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue