1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
5
using System.Collections.Generic;
6
using System.IO.Packaging;
7
using ICSharpCode.PackageManagement;
8
using ICSharpCode.PackageManagement.Design;
10
using NUnit.Framework;
11
using PackageManagement.Tests.Helpers;
13
namespace PackageManagement.Tests
16
public class PackageRepositoryCacheTests
18
PackageRepositoryCache cache;
19
FakePackageRepositoryFactory fakePackageRepositoryFactory;
20
PackageSource nuGetPackageSource;
21
OneRegisteredPackageSourceHelper packageSourcesHelper;
22
RecentPackageInfo[] recentPackagesPassedToCreateRecentPackageRepository;
23
FakePackageRepository fakeAggregateRepositoryPassedToCreateRecentPackageRepository;
27
CreatePackageSources();
28
CreateCacheUsingPackageSources();
31
void CreatePackageSources()
33
packageSourcesHelper = new OneRegisteredPackageSourceHelper();
36
void CreateCacheUsingPackageSources()
38
nuGetPackageSource = new PackageSource("http://nuget.org", "NuGet");
39
fakePackageRepositoryFactory = new FakePackageRepositoryFactory();
40
RegisteredPackageSources packageSources = packageSourcesHelper.Options.PackageSources;
41
IList<RecentPackageInfo> recentPackages = packageSourcesHelper.Options.RecentPackages;
42
cache = new PackageRepositoryCache(fakePackageRepositoryFactory, packageSources, recentPackages);
45
FakePackageRepository AddFakePackageRepositoryForPackageSource(string source)
47
return fakePackageRepositoryFactory.AddFakePackageRepositoryForPackageSource(source);
50
IPackageRepository CreateRecentPackageRepositoryPassingAggregateRepository()
52
recentPackagesPassedToCreateRecentPackageRepository = new RecentPackageInfo[0];
53
fakeAggregateRepositoryPassedToCreateRecentPackageRepository = new FakePackageRepository();
55
return cache.CreateRecentPackageRepository(
56
recentPackagesPassedToCreateRecentPackageRepository,
57
fakeAggregateRepositoryPassedToCreateRecentPackageRepository);
60
RecentPackageInfo AddOneRecentPackage()
62
var recentPackage = new RecentPackageInfo("Id", new Version("1.0"));
63
packageSourcesHelper.Options.RecentPackages.Add(recentPackage);
68
public void CreateRepository_CacheCastToISharpDevelopPackageRepositoryFactory_CreatesPackageRepositoryUsingPackageRepositoryFactoryPassedInConstructor()
71
var factory = cache as ISharpDevelopPackageRepositoryFactory;
72
IPackageRepository repository = factory.CreateRepository(nuGetPackageSource.Source);
74
Assert.AreEqual(fakePackageRepositoryFactory.FakePackageRepository, repository);
78
public void CreateRepository_PackageSourcePassed_PackageSourceUsedToCreateRepository()
81
cache.CreateRepository(nuGetPackageSource.Source);
83
string actualPackageSource = fakePackageRepositoryFactory.FirstPackageSourcePassedToCreateRepository;
84
Assert.AreEqual(nuGetPackageSource.Source, actualPackageSource);
88
public void CreateRepository_RepositoryAlreadyCreatedForPackageSource_NoRepositoryCreated()
91
cache.CreateRepository(nuGetPackageSource.Source);
92
fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository.Clear();
94
cache.CreateRepository(nuGetPackageSource.Source);
96
Assert.AreEqual(0, fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository.Count);
100
public void CreateRepository_RepositoryAlreadyCreatedForPackageSource_RepositoryOriginallyCreatedIsReturned()
103
IPackageRepository originallyCreatedRepository = cache.CreateRepository(nuGetPackageSource.Source);
104
fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository.Clear();
106
IPackageRepository repository = cache.CreateRepository(nuGetPackageSource.Source);
108
Assert.AreSame(originallyCreatedRepository, repository);
112
public void CreateSharedRepository_MethodCalled_ReturnsSharedPackageRepository()
115
ISharedPackageRepository repository = cache.CreateSharedRepository(null, null);
116
Assert.IsNotNull(repository);
120
public void CreatedSharedRepository_PathResolverPassed_PathResolverUsedToCreatedSharedRepository()
123
FakePackagePathResolver resolver = new FakePackagePathResolver();
124
cache.CreateSharedRepository(resolver, null);
126
Assert.AreEqual(resolver, fakePackageRepositoryFactory.PathResolverPassedToCreateSharedRepository);
130
public void CreatedSharedRepository_FileSystemPassed_FileSystemUsedToCreatedSharedRepository()
133
FakeFileSystem fileSystem = new FakeFileSystem();
134
cache.CreateSharedRepository(null, fileSystem);
136
Assert.AreEqual(fileSystem, fakePackageRepositoryFactory.FileSystemPassedToCreateSharedRepository);
140
public void CreateAggregatePackageRepository_TwoRegisteredPackageRepositories_ReturnsAggregateRepositoryFromFactory()
142
CreatePackageSources();
143
packageSourcesHelper.AddTwoPackageSources("Source1", "Source2");
144
CreateCacheUsingPackageSources();
146
IPackageRepository aggregateRepository = cache.CreateAggregateRepository();
147
FakePackageRepository expectedRepository = fakePackageRepositoryFactory.FakeAggregateRepository;
149
Assert.AreEqual(expectedRepository, aggregateRepository);
153
public void CreateAggregatePackageRepository_TwoRegisteredPackageRepositories_AllRegisteredRepositoriesUsedToCreateAggregateRepositoryFromFactory()
155
CreatePackageSources();
156
packageSourcesHelper.AddTwoPackageSources("Source1", "Source2");
157
CreateCacheUsingPackageSources();
159
FakePackageRepository repository1 = AddFakePackageRepositoryForPackageSource("Source1");
160
FakePackageRepository repository2 = AddFakePackageRepositoryForPackageSource("Source2");
161
var expectedRepositories = new FakePackageRepository[] {
166
cache.CreateAggregateRepository();
168
IEnumerable<IPackageRepository> repositoriesUsedToCreateAggregateRepository =
169
fakePackageRepositoryFactory.RepositoriesPassedToCreateAggregateRepository;
171
var actualRepositoriesAsList = new List<IPackageRepository>(repositoriesUsedToCreateAggregateRepository);
172
IPackageRepository[] actualRepositories = actualRepositoriesAsList.ToArray();
174
CollectionAssert.AreEqual(expectedRepositories, actualRepositories);
178
public void CreateAggregatePackageRepository_OnePackageRepositoryPassed_ReturnsAggregateRepositoryFromFactory()
182
var repositories = new FakePackageRepository[] {
183
new FakePackageRepository()
185
IPackageRepository aggregateRepository = cache.CreateAggregateRepository(repositories);
187
FakePackageRepository expectedRepository = fakePackageRepositoryFactory.FakeAggregateRepository;
189
Assert.AreEqual(expectedRepository, aggregateRepository);
193
public void CreateAggregatePackageRepository_OnePackageRepositoryPassed_RepositoryUsedToCreateAggregateRepository()
197
var repositories = new FakePackageRepository[] {
198
new FakePackageRepository()
200
cache.CreateAggregateRepository(repositories);
202
IEnumerable<IPackageRepository> repositoriesUsedToCreateAggregateRepository =
203
fakePackageRepositoryFactory.RepositoriesPassedToCreateAggregateRepository;
205
Assert.AreEqual(repositories, repositoriesUsedToCreateAggregateRepository);
209
public void RecentPackageRepository_NoRecentPackages_ReturnsRecentRepositoryCreatedByFactory()
212
IRecentPackageRepository repository = cache.RecentPackageRepository;
213
FakeRecentPackageRepository expectedRepository = fakePackageRepositoryFactory.FakeRecentPackageRepository;
215
Assert.AreEqual(expectedRepository, repository);
219
public void RecentPackageRepository_NoRecentPackages_CreatedWithAggregateRepository()
222
IRecentPackageRepository repository = cache.RecentPackageRepository;
224
FakePackageRepository expectedRepository = fakePackageRepositoryFactory.FakeAggregateRepository;
225
IPackageRepository actualRepository = fakePackageRepositoryFactory.AggregateRepositoryPassedToCreateRecentPackageRepository;
227
Assert.AreEqual(expectedRepository, actualRepository);
231
public void RecentPackageRepository_OneRecentPackage_RecentPackageUsedToCreateRecentPackageRepository()
234
RecentPackageInfo recentPackage = AddOneRecentPackage();
236
IRecentPackageRepository repository = cache.RecentPackageRepository;
238
IList<RecentPackageInfo> actualRecentPackages = fakePackageRepositoryFactory.RecentPackagesPassedToCreateRecentPackageRepository;
240
var expectedRecentPackages = new RecentPackageInfo[] {
244
Assert.AreEqual(expectedRecentPackages, actualRecentPackages);
248
public void RecentPackageRepository_OnePackageSource_OneRepositoryCreatedForPackageSourceAndUsedToCreateAggregateRepository()
250
CreatePackageSources();
251
packageSourcesHelper.AddOnePackageSource("Source1");
252
CreateCacheUsingPackageSources();
254
FakePackageRepository repository = AddFakePackageRepositoryForPackageSource("Source1");
255
var expectedRepositories = new FakePackageRepository[] {
259
IRecentPackageRepository recentRepository = cache.RecentPackageRepository;
261
IEnumerable<IPackageRepository> repositoriesUsedToCreateAggregateRepository =
262
fakePackageRepositoryFactory.RepositoriesPassedToCreateAggregateRepository;
264
var actualRepositoriesAsList = new List<IPackageRepository>(repositoriesUsedToCreateAggregateRepository);
265
IPackageRepository[] actualRepositories = actualRepositoriesAsList.ToArray();
267
CollectionAssert.AreEqual(expectedRepositories, actualRepositories);
271
public void RecentPackageRepository_PropertyAccessedTwice_AggregateRepositoryCreatedOnce()
274
IRecentPackageRepository repository = cache.RecentPackageRepository;
275
fakePackageRepositoryFactory.RepositoriesPassedToCreateAggregateRepository = null;
276
repository = cache.RecentPackageRepository;
278
Assert.IsNull(fakePackageRepositoryFactory.RepositoriesPassedToCreateAggregateRepository);
282
public void CreateRecentPackageRepository_AggregateRepositoryPassedAndNoRecentPackagesPassed_UsesFactoryToCreateRepository()
285
IPackageRepository repository = CreateRecentPackageRepositoryPassingAggregateRepository();
287
FakeRecentPackageRepository expectedRepository = fakePackageRepositoryFactory.FakeRecentPackageRepository;
289
Assert.AreEqual(expectedRepository, repository);
293
public void CreateRecentPackageRepository_AggregateRepositoryPassedAndNoRecentPackagesPassed_AggregateIsUsedToCreateRepository()
296
CreateRecentPackageRepositoryPassingAggregateRepository();
298
IPackageRepository actualRepository = fakePackageRepositoryFactory.AggregateRepositoryPassedToCreateRecentPackageRepository;
300
Assert.AreEqual(fakeAggregateRepositoryPassedToCreateRecentPackageRepository, actualRepository);
304
public void CreateRecentPackageRepository_AggregateRepositoryPassedAndNoRecentPackagesPassed_RecentPackagesUsedToCreateRepository()
307
CreateRecentPackageRepositoryPassingAggregateRepository();
309
IList<RecentPackageInfo> recentPackages = fakePackageRepositoryFactory.RecentPackagesPassedToCreateRecentPackageRepository;
311
Assert.AreEqual(recentPackagesPassedToCreateRecentPackageRepository, recentPackages);
315
public void CreateRecentPackageRepository_MethodCalledTwice_RecentPackageRepositoryCreatedOnce()
318
CreateRecentPackageRepositoryPassingAggregateRepository();
319
fakePackageRepositoryFactory.AggregateRepositoryPassedToCreateRecentPackageRepository = null;
320
CreateRecentPackageRepositoryPassingAggregateRepository();
322
Assert.IsNull(fakePackageRepositoryFactory.AggregateRepositoryPassedToCreateRecentPackageRepository);