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;
8
using ICSharpCode.PackageManagement;
9
using ICSharpCode.PackageManagement.Design;
10
using ICSharpCode.SharpDevelop.Project;
12
using NUnit.Framework;
13
using PackageManagement.Tests.Helpers;
15
namespace PackageManagement.Tests
18
public class PackageManagementSolutionTests
20
PackageManagementSolution solution;
21
FakeRegisteredPackageRepositories fakeRegisteredPackageRepositories;
22
OneRegisteredPackageSourceHelper packageSourcesHelper;
23
FakePackageManagementProjectService fakeProjectService;
24
FakePackageManagementProjectFactory fakeProjectFactory;
25
TestableProject testProject;
26
FakeSolutionPackageRepositoryFactory fakeSolutionPackageRepositoryFactory;
27
FakeSolutionPackageRepository fakeSolutionPackageRepository;
29
void CreatePackageSources()
31
packageSourcesHelper = new OneRegisteredPackageSourceHelper();
36
CreatePackageSources();
37
CreateSolution(packageSourcesHelper.Options);
40
void CreateSolution(PackageManagementOptions options)
42
testProject = ProjectHelper.CreateTestProject();
43
fakeRegisteredPackageRepositories = new FakeRegisteredPackageRepositories();
44
fakeProjectFactory = new FakePackageManagementProjectFactory();
45
fakeProjectService = new FakePackageManagementProjectService();
47
fakeProjectService.CurrentProject = testProject;
48
fakeProjectService.OpenSolution = testProject.ParentSolution;
50
fakeSolutionPackageRepositoryFactory = new FakeSolutionPackageRepositoryFactory();
51
fakeSolutionPackageRepository = fakeSolutionPackageRepositoryFactory.FakeSolutionPackageRepository;
54
new PackageManagementSolution(
55
fakeRegisteredPackageRepositories,
58
fakeSolutionPackageRepositoryFactory);
61
TestableProject AddProjectToOpenProjects(string projectName)
63
TestableProject project = ProjectHelper.CreateTestProject(projectName);
64
fakeProjectService.FakeOpenProjects.Add(project);
68
FakePackage AddPackageInReverseDependencyOrderToSolution(string packageId)
70
var package = new FakePackage(packageId);
71
fakeSolutionPackageRepository.FakePackagesByReverseDependencyOrder.Add(package);
76
public void GetActiveProject_ProjectIsSelected_CreatesProjectUsingCurrentProjectSelectedInSharpDevelop()
80
IPackageManagementProject activeProject = solution.GetActiveProject();
81
IProject actualProject = fakeProjectFactory.FirstProjectPassedToCreateProject;
83
Assert.AreEqual(testProject, actualProject);
87
public void GetActiveProject_ProjectIsSelected_CreatesProjectUsingCurrentActiveRepository()
91
IPackageManagementProject activeProject = solution.GetActiveProject();
93
IPackageRepository repository = fakeProjectFactory.FirstRepositoryPassedToCreateProject;
94
IPackageRepository expectedRepository = fakeRegisteredPackageRepositories.ActiveRepository;
96
Assert.AreEqual(expectedRepository, repository);
100
public void GetActiveProject_ProjectIsSelected_ReturnsProjectCreatedByFactory()
104
IPackageManagementProject activeProject = solution.GetActiveProject();
105
IPackageManagementProject expectedProject = fakeProjectFactory.FirstFakeProjectCreated;
107
Assert.AreEqual(expectedProject, activeProject);
111
public void GetActiveProject_RepositoryPassed_CreatesProjectUsingRepository()
114
var expectedRepository = new FakePackageRepository();
115
solution.GetActiveProject(expectedRepository);
117
IPackageRepository repository = fakeProjectFactory.FirstRepositoryPassedToCreateProject;
119
Assert.AreEqual(expectedRepository, repository);
123
public void GetActiveProject_RepositoryPassed_CreatesProjectUsingCurrentActiveProject()
126
var expectedRepository = new FakePackageRepository();
127
TestableProject expectedProject = ProjectHelper.CreateTestProject();
128
fakeProjectService.CurrentProject = expectedProject;
130
solution.GetActiveProject(expectedRepository);
132
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
134
Assert.AreEqual(expectedProject, project);
138
public void GetActiveProject_RepositoryPassed_ReturnsProjectFromProjectFactory()
141
var expectedRepository = new FakePackageRepository();
142
IPackageManagementProject project = solution.GetActiveProject(expectedRepository);
144
FakePackageManagementProject expectedProject = fakeProjectFactory.FirstFakeProjectCreated;
146
Assert.AreEqual(expectedProject, project);
150
public void GetProject_PackagesSourceAndProjectNamePassed_CreatesProjectUsingFoundProjectMatchingName()
153
TestableProject expectedProject = AddProjectToOpenProjects("Test");
154
var source = new PackageSource("http://sharpdevelop.net");
156
solution.GetProject(source, "Test");
158
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
160
Assert.AreEqual(expectedProject, project);
164
public void GetProject_PackagesSourceAndProjectNameWithDifferentCasePassed_CreatesProjectUsingFoundProjectMatchingName()
167
TestableProject expectedProject = AddProjectToOpenProjects("Test");
168
var source = new PackageSource("http://sharpdevelop.net");
170
solution.GetProject(source, "TEST");
172
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
174
Assert.AreEqual(expectedProject, project);
178
public void GetProject_PackagesSourceAndProjectPassed_ReturnsProjectFromProjectFactory()
181
AddProjectToOpenProjects("Test");
182
var source = new PackageSource("http://sharpdevelop.net");
183
IPackageManagementProject project = solution.GetProject(source, "Test");
185
FakePackageManagementProject expectedProject = fakeProjectFactory.FirstFakeProjectCreated;
187
Assert.AreEqual(expectedProject, project);
191
public void GetProject_PackagesSourceAndProjectPassed_PackageSourceUsedToCreateRepository()
194
AddProjectToOpenProjects("Test");
195
var expectedSource = new PackageSource("http://sharpdevelop.net");
196
IPackageManagementProject project = solution.GetProject(expectedSource, "Test");
198
PackageSource actualSource = fakeRegisteredPackageRepositories.PackageSourcePassedToCreateRepository;
200
Assert.AreEqual(expectedSource, actualSource);
204
public void GetProject_PackagesRepositoryAndProjectNamePassed_CreatesProjectUsingFoundProjectMatchingName()
207
TestableProject expectedProject = AddProjectToOpenProjects("Test");
208
var repository = new FakePackageRepository();
210
solution.GetProject(repository, "Test");
212
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
214
Assert.AreEqual(expectedProject, project);
218
public void GetProject_PackagesRepositoryAndProjectPassed_CreatesProjectUsingProjectPassed()
221
TestableProject expectedProject = AddProjectToOpenProjects("Test");
222
var repository = new FakePackageRepository();
224
solution.GetProject(repository, expectedProject);
226
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
228
Assert.AreEqual(expectedProject, project);
232
public void GetProject_PackagesRepositoryAndProjectPassed_ReturnsProjectCreatedFromProjectFactory()
235
TestableProject msbuildProject = AddProjectToOpenProjects("Test");
236
var repository = new FakePackageRepository();
238
IPackageManagementProject project = solution.GetProject(repository, msbuildProject);
240
FakePackageManagementProject expectedProject = fakeProjectFactory.FirstFakeProjectCreated;
242
Assert.AreEqual(expectedProject, project);
246
public void GetProject_PackagesRepositoryAndProjectPassed_CreatesProjectUsingRepository()
249
TestableProject expectedProject = AddProjectToOpenProjects("Test");
250
var expectedRepository = new FakePackageRepository();
252
solution.GetProject(expectedRepository, expectedProject);
254
IPackageRepository repository = fakeProjectFactory.FirstRepositoryPassedToCreateProject;
256
Assert.AreEqual(expectedRepository, repository);
260
public void GetProject_RepositoryAndProjectNameWithDifferentCasePassed_CreatesProjectUsingFoundProjectMatchingName()
263
TestableProject expectedProject = AddProjectToOpenProjects("Test");
264
var repository = new FakePackageRepository();
266
solution.GetProject(repository, "TEST");
268
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
270
Assert.AreEqual(expectedProject, project);
274
public void GetProject_RepositoryAndProjectNamePassed_ReturnsProject()
277
AddProjectToOpenProjects("Test");
278
var repository = new FakePackageRepository();
280
IPackageManagementProject project = solution.GetProject(repository, "Test");
282
FakePackageManagementProject expectedProject = fakeProjectFactory.FirstFakeProjectCreated;
284
Assert.AreEqual(expectedProject, project);
288
public void GetProject_RepositoryAndProjectNamePassed_RepositoryUsedToCreateProject()
291
AddProjectToOpenProjects("Test");
292
var expectedRepository = new FakePackageRepository();
294
solution.GetProject(expectedRepository, "Test");
296
IPackageRepository actualRepository = fakeProjectFactory.FirstRepositoryPassedToCreateProject;
298
Assert.AreEqual(expectedRepository, actualRepository);
302
public void GetMSBuildProjects_TwoProjectsInOpenSolution_ReturnsTwoProjects()
305
AddProjectToOpenProjects("A");
306
AddProjectToOpenProjects("B");
308
IEnumerable<IProject> projects = solution.GetMSBuildProjects();
309
List<IProject> expectedProjects = fakeProjectService.FakeOpenProjects;
311
CollectionAssert.AreEqual(expectedProjects, projects);
315
public void IsOpen_NoSolutionOpen_ReturnsFalse()
318
fakeProjectService.OpenSolution = null;
320
bool open = solution.IsOpen;
322
Assert.IsFalse(open);
326
public void IsOpen_SolutionIsOpen_ReturnsTrue()
329
fakeProjectService.OpenSolution = new Solution(new MockProjectChangeWatcher());
331
bool open = solution.IsOpen;
337
public void GetActiveMSBuildProject_CurrentProjectIsSetInProjectService_ReturnsProjectCurrentlySelected()
340
fakeProjectService.CurrentProject = testProject;
342
IProject activeProject = solution.GetActiveMSBuildProject();
344
Assert.AreEqual(testProject, activeProject);
348
public void HasMultipleProjects_OneProjectInSolution_ReturnsFalse()
351
TestableProject project = ProjectHelper.CreateTestProject();
352
fakeProjectService.AddFakeProject(project);
354
bool hasMultipleProjects = solution.HasMultipleProjects();
356
Assert.IsFalse(hasMultipleProjects);
360
public void HasMultipleProjects_TwoProjectsInSolution_ReturnsTrue()
363
TestableProject project1 = ProjectHelper.CreateTestProject();
364
fakeProjectService.AddFakeProject(project1);
365
TestableProject project2 = ProjectHelper.CreateTestProject();
366
fakeProjectService.AddFakeProject(project2);
368
bool hasMultipleProjects = solution.HasMultipleProjects();
370
Assert.IsTrue(hasMultipleProjects);
374
public void FileName_SolutionHasFileName_ReturnsSolutionFileName()
377
var solution = new Solution(new MockProjectChangeWatcher());
378
string expectedFileName = @"d:\projects\myproject\Project.sln";
379
solution.FileName = expectedFileName;
380
fakeProjectService.OpenSolution = solution;
382
string fileName = solution.FileName;
384
Assert.AreEqual(expectedFileName, fileName);
388
public void IsInstalled_PackageIsInstalledInSolutionLocalRepository_ReturnsTrue()
391
FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
392
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(package);
394
bool installed = solution.IsPackageInstalled(package);
396
Assert.IsTrue(installed);
400
public void IsInstalled_PackageIsNotInstalledInSolutionLocalRepository_ReturnsFalse()
403
FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
405
bool installed = solution.IsPackageInstalled(package);
407
Assert.IsFalse(installed);
411
public void IsInstalled_PackageIsNotInstalledInSolutionLocalRepository_ActivSolutionUsedToCreateSolutionPackageRepository()
414
FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
416
solution.IsPackageInstalled(package);
418
Solution expectedSolution = fakeProjectService.OpenSolution;
419
Solution solutionUsedToCreateSolutionPackageRepository =
420
fakeSolutionPackageRepositoryFactory.SolutionPassedToCreateSolutionPackageRepository;
422
Assert.AreEqual(expectedSolution, solutionUsedToCreateSolutionPackageRepository);
426
public void GetActiveProject_SolutionOpenButNoProjectSelected_ReturnsNull()
429
fakeProjectService.CurrentProject = null;
431
IPackageManagementProject activeProject = solution.GetActiveProject();
433
Assert.IsNull(activeProject);
437
public void GetActiveProject_RepositoryPassedWhenSolutionOpenButNoProjectSelected_ReturnsNull()
440
fakeProjectService.CurrentProject = null;
442
var repository = new FakePackageRepository();
443
IPackageManagementProject activeProject = solution.GetActiveProject(repository);
445
Assert.IsNull(activeProject);
449
public void GetPackages_OnePackageInSolutionRepository_ReturnsOnePackage()
452
fakeProjectService.CurrentProject = null;
453
FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
454
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(package);
456
IQueryable<IPackage> packages = solution.GetPackages();
458
var expectedPackages = new FakePackage[] {
462
PackageCollectionAssert.AreEqual(expectedPackages, packages);
466
public void GetPackagesInReverseDependencyOrder_TwoPackages_ReturnsPackagesFromSolutionLocalRepositoryInCorrectOrder()
469
FakePackage packageA = AddPackageInReverseDependencyOrderToSolution("A");
470
FakePackage packageB = AddPackageInReverseDependencyOrderToSolution("A");
472
packageB.DependenciesList.Add(new PackageDependency("A"));
474
var expectedPackages = new FakePackage[] {
479
IEnumerable<IPackage> packages = solution.GetPackagesInReverseDependencyOrder();
481
PackageCollectionAssert.AreEqual(expectedPackages, packages);
485
public void GetProjects_SolutionHasOneProject_ReturnsOneProject()
488
AddProjectToOpenProjects("MyProject");
489
var repository = new FakePackageRepository();
490
List<IPackageManagementProject> projects = solution.GetProjects(repository).ToList();
492
Assert.AreEqual(1, projects.Count);
496
public void GetProjects_SolutionHasOneProject_RepositoryUsedToCreateProject()
499
AddProjectToOpenProjects("MyProject");
500
var expectedRepository = new FakePackageRepository();
501
List<IPackageManagementProject> projects = solution.GetProjects(expectedRepository).ToList();
503
IPackageRepository repository = fakeProjectFactory.FirstRepositoryPassedToCreateProject;
505
Assert.AreEqual(expectedRepository, repository);
509
public void GetProjects_SolutionHasOneProject_MSBuildProjectUsedToCreateProject()
512
TestableProject expectedProject = AddProjectToOpenProjects("MyProject");
513
var repository = new FakePackageRepository();
514
List<IPackageManagementProject> projects = solution.GetProjects(repository).ToList();
516
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
518
Assert.AreEqual(expectedProject, project);
522
public void GetProjects_SolutionHasNoProjects_ReturnsNoProjects()
525
var repository = new FakePackageRepository();
526
List<IPackageManagementProject> projects = solution.GetProjects(repository).ToList();
528
Assert.AreEqual(0, projects.Count);
532
public void GetProjects_SolutionHasTwoProjects_ReturnsTwoProjects()
535
AddProjectToOpenProjects("One");
536
AddProjectToOpenProjects("Two");
537
var repository = new FakePackageRepository();
538
List<IPackageManagementProject> projects = solution.GetProjects(repository).ToList();
540
Assert.AreEqual(2, projects.Count);