#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

557 lines
18 KiB

// 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 ICSharpCode.SharpDevelop.Project;
using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class PackageManagementSolutionTests
{
PackageManagementSolution solution;
FakeRegisteredPackageRepositories fakeRegisteredPackageRepositories;
OneRegisteredPackageSourceHelper packageSourcesHelper;
FakePackageManagementProjectService fakeProjectService;
FakePackageManagementProjectFactory fakeProjectFactory;
TestableProject testProject;
FakeSolutionPackageRepositoryFactory fakeSolutionPackageRepositoryFactory;
FakeSolutionPackageRepository fakeSolutionPackageRepository;
void CreatePackageSources()
{
packageSourcesHelper = new OneRegisteredPackageSourceHelper();
}
void CreateSolution()
{
CreatePackageSources();
CreateSolution(packageSourcesHelper.Options);
}
void CreateSolution(PackageManagementOptions options)
{
testProject = ProjectHelper.CreateTestProject();
fakeRegisteredPackageRepositories = new FakeRegisteredPackageRepositories();
fakeProjectFactory = new FakePackageManagementProjectFactory();
fakeProjectService = new FakePackageManagementProjectService();
fakeProjectService.CurrentProject = testProject;
fakeProjectService.OpenSolution = testProject.ParentSolution;
fakeSolutionPackageRepositoryFactory = new FakeSolutionPackageRepositoryFactory();
fakeSolutionPackageRepository = fakeSolutionPackageRepositoryFactory.FakeSolutionPackageRepository;
solution =
new PackageManagementSolution(
fakeRegisteredPackageRepositories,
fakeProjectService,
fakeProjectFactory,
fakeSolutionPackageRepositoryFactory);
}
TestableProject AddProjectToOpenProjects(string projectName)
{
TestableProject project = ProjectHelper.CreateTestProject(projectName);
fakeProjectService.FakeOpenProjects.Add(project);
return project;
}
FakePackage AddPackageInReverseDependencyOrderToSolution(string packageId)
{
var package = new FakePackage(packageId);
fakeSolutionPackageRepository.FakePackagesByReverseDependencyOrder.Add(package);
return package;
}
[Test]
public void GetActiveProject_ProjectIsSelected_CreatesProjectUsingCurrentProjectSelectedInSharpDevelop()
{
CreateSolution();
IPackageManagementProject activeProject = solution.GetActiveProject();
IProject actualProject = fakeProjectFactory.FirstProjectPassedToCreateProject;
Assert.AreEqual(testProject, actualProject);
}
[Test]
public void GetActiveProject_ProjectIsSelected_CreatesProjectUsingCurrentActiveRepository()
{
CreateSolution();
IPackageManagementProject activeProject = solution.GetActiveProject();
IPackageRepository repository = fakeProjectFactory.FirstRepositoryPassedToCreateProject;
IPackageRepository expectedRepository = fakeRegisteredPackageRepositories.ActiveRepository;
Assert.AreEqual(expectedRepository, repository);
}
[Test]
public void GetActiveProject_ProjectIsSelected_ReturnsProjectCreatedByFactory()
{
CreateSolution();
IPackageManagementProject activeProject = solution.GetActiveProject();
IPackageManagementProject expectedProject = fakeProjectFactory.FirstFakeProjectCreated;
Assert.AreEqual(expectedProject, activeProject);
}
[Test]
public void GetActiveProject_RepositoryPassed_CreatesProjectUsingRepository()
{
CreateSolution();
var expectedRepository = new FakePackageRepository();
solution.GetActiveProject(expectedRepository);
IPackageRepository repository = fakeProjectFactory.FirstRepositoryPassedToCreateProject;
Assert.AreEqual(expectedRepository, repository);
}
[Test]
public void GetActiveProject_RepositoryPassed_CreatesProjectUsingCurrentActiveProject()
{
CreateSolution();
var expectedRepository = new FakePackageRepository();
TestableProject expectedProject = ProjectHelper.CreateTestProject();
fakeProjectService.CurrentProject = expectedProject;
solution.GetActiveProject(expectedRepository);
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void GetActiveProject_RepositoryPassed_ReturnsProjectFromProjectFactory()
{
CreateSolution();
var expectedRepository = new FakePackageRepository();
IPackageManagementProject project = solution.GetActiveProject(expectedRepository);
FakePackageManagementProject expectedProject = fakeProjectFactory.FirstFakeProjectCreated;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void GetProject_PackagesSourceAndProjectNamePassed_CreatesProjectUsingFoundProjectMatchingName()
{
CreateSolution();
TestableProject expectedProject = AddProjectToOpenProjects("Test");
var source = new PackageSource("http://sharpdevelop.net");
solution.GetProject(source, "Test");
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void GetProject_PackagesSourceAndProjectNameWithDifferentCasePassed_CreatesProjectUsingFoundProjectMatchingName()
{
CreateSolution();
TestableProject expectedProject = AddProjectToOpenProjects("Test");
var source = new PackageSource("http://sharpdevelop.net");
solution.GetProject(source, "TEST");
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void GetProject_PackagesSourceAndProjectPassed_ReturnsProjectFromProjectFactory()
{
CreateSolution();
AddProjectToOpenProjects("Test");
var source = new PackageSource("http://sharpdevelop.net");
IPackageManagementProject project = solution.GetProject(source, "Test");
FakePackageManagementProject expectedProject = fakeProjectFactory.FirstFakeProjectCreated;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void GetProject_PackagesSourceAndProjectPassed_PackageSourceUsedToCreateRepository()
{
CreateSolution();
AddProjectToOpenProjects("Test");
var expectedSource = new PackageSource("http://sharpdevelop.net");
IPackageManagementProject project = solution.GetProject(expectedSource, "Test");
PackageSource actualSource = fakeRegisteredPackageRepositories.PackageSourcePassedToCreateRepository;
Assert.AreEqual(expectedSource, actualSource);
}
[Test]
public void GetProject_PackagesRepositoryAndProjectNamePassed_CreatesProjectUsingFoundProjectMatchingName()
{
CreateSolution();
TestableProject expectedProject = AddProjectToOpenProjects("Test");
var repository = new FakePackageRepository();
solution.GetProject(repository, "Test");
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void GetProject_PackagesRepositoryAndProjectPassed_CreatesProjectUsingProjectPassed()
{
CreateSolution();
TestableProject expectedProject = AddProjectToOpenProjects("Test");
var repository = new FakePackageRepository();
solution.GetProject(repository, expectedProject);
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void GetProject_PackagesRepositoryAndProjectPassed_ReturnsProjectCreatedFromProjectFactory()
{
CreateSolution();
TestableProject msbuildProject = AddProjectToOpenProjects("Test");
var repository = new FakePackageRepository();
IPackageManagementProject project = solution.GetProject(repository, msbuildProject);
FakePackageManagementProject expectedProject = fakeProjectFactory.FirstFakeProjectCreated;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void GetProject_PackagesRepositoryAndProjectPassed_CreatesProjectUsingRepository()
{
CreateSolution();
TestableProject expectedProject = AddProjectToOpenProjects("Test");
var expectedRepository = new FakePackageRepository();
solution.GetProject(expectedRepository, expectedProject);
IPackageRepository repository = fakeProjectFactory.FirstRepositoryPassedToCreateProject;
Assert.AreEqual(expectedRepository, repository);
}
[Test]
public void GetProject_RepositoryAndProjectNameWithDifferentCasePassed_CreatesProjectUsingFoundProjectMatchingName()
{
CreateSolution();
TestableProject expectedProject = AddProjectToOpenProjects("Test");
var repository = new FakePackageRepository();
solution.GetProject(repository, "TEST");
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void GetProject_RepositoryAndProjectNamePassed_ReturnsProject()
{
CreateSolution();
AddProjectToOpenProjects("Test");
var repository = new FakePackageRepository();
IPackageManagementProject project = solution.GetProject(repository, "Test");
FakePackageManagementProject expectedProject = fakeProjectFactory.FirstFakeProjectCreated;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void GetProject_RepositoryAndProjectNamePassed_RepositoryUsedToCreateProject()
{
CreateSolution();
AddProjectToOpenProjects("Test");
var expectedRepository = new FakePackageRepository();
solution.GetProject(expectedRepository, "Test");
IPackageRepository actualRepository = fakeProjectFactory.FirstRepositoryPassedToCreateProject;
Assert.AreEqual(expectedRepository, actualRepository);
}
[Test]
public void GetMSBuildProjects_TwoProjectsInOpenSolution_ReturnsTwoProjects()
{
CreateSolution();
AddProjectToOpenProjects("A");
AddProjectToOpenProjects("B");
IEnumerable<IProject> projects = solution.GetMSBuildProjects();
List<IProject> expectedProjects = fakeProjectService.FakeOpenProjects;
CollectionAssert.AreEqual(expectedProjects, projects);
}
[Test]
public void IsOpen_NoSolutionOpen_ReturnsFalse()
{
CreateSolution();
fakeProjectService.OpenSolution = null;
bool open = solution.IsOpen;
Assert.IsFalse(open);
}
[Test]
public void IsOpen_SolutionIsOpen_ReturnsTrue()
{
CreateSolution();
fakeProjectService.OpenSolution = new Solution(new MockProjectChangeWatcher());
bool open = solution.IsOpen;
Assert.IsTrue(open);
}
[Test]
public void GetActiveMSBuildProject_CurrentProjectIsSetInProjectService_ReturnsProjectCurrentlySelected()
{
CreateSolution();
fakeProjectService.CurrentProject = testProject;
IProject activeProject = solution.GetActiveMSBuildProject();
Assert.AreEqual(testProject, activeProject);
}
[Test]
public void HasMultipleProjects_OneProjectInSolution_ReturnsFalse()
{
CreateSolution();
TestableProject project = ProjectHelper.CreateTestProject();
fakeProjectService.AddFakeProject(project);
bool hasMultipleProjects = solution.HasMultipleProjects();
Assert.IsFalse(hasMultipleProjects);
}
[Test]
public void HasMultipleProjects_TwoProjectsInSolution_ReturnsTrue()
{
CreateSolution();
TestableProject project1 = ProjectHelper.CreateTestProject();
fakeProjectService.AddFakeProject(project1);
TestableProject project2 = ProjectHelper.CreateTestProject();
fakeProjectService.AddFakeProject(project2);
bool hasMultipleProjects = solution.HasMultipleProjects();
Assert.IsTrue(hasMultipleProjects);
}
[Test]
public void FileName_SolutionHasFileName_ReturnsSolutionFileName()
{
CreateSolution();
var solution = new Solution(new MockProjectChangeWatcher());
string expectedFileName = @"d:\projects\myproject\Project.sln";
solution.FileName = expectedFileName;
fakeProjectService.OpenSolution = solution;
string fileName = solution.FileName;
Assert.AreEqual(expectedFileName, fileName);
}
[Test]
public void IsInstalled_PackageIsInstalledInSolutionLocalRepository_ReturnsTrue()
{
CreateSolution();
FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(package);
bool installed = solution.IsPackageInstalled(package);
Assert.IsTrue(installed);
}
[Test]
public void IsInstalled_PackageIsNotInstalledInSolutionLocalRepository_ReturnsFalse()
{
CreateSolution();
FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
bool installed = solution.IsPackageInstalled(package);
Assert.IsFalse(installed);
}
[Test]
public void IsInstalled_PackageIsNotInstalledInSolutionLocalRepository_ActivSolutionUsedToCreateSolutionPackageRepository()
{
CreateSolution();
FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
solution.IsPackageInstalled(package);
ISolution expectedSolution = fakeProjectService.OpenSolution;
ISolution solutionUsedToCreateSolutionPackageRepository =
fakeSolutionPackageRepositoryFactory.SolutionPassedToCreateSolutionPackageRepository;
Assert.AreEqual(expectedSolution, solutionUsedToCreateSolutionPackageRepository);
}
[Test]
public void GetActiveProject_SolutionOpenButNoProjectSelected_ReturnsNull()
{
CreateSolution();
fakeProjectService.CurrentProject = null;
IPackageManagementProject activeProject = solution.GetActiveProject();
Assert.IsNull(activeProject);
}
[Test]
public void GetActiveProject_RepositoryPassedWhenSolutionOpenButNoProjectSelected_ReturnsNull()
{
CreateSolution();
fakeProjectService.CurrentProject = null;
var repository = new FakePackageRepository();
IPackageManagementProject activeProject = solution.GetActiveProject(repository);
Assert.IsNull(activeProject);
}
[Test]
public void GetPackages_OnePackageInSolutionRepository_ReturnsOnePackage()
{
CreateSolution();
fakeProjectService.CurrentProject = null;
FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(package);
IQueryable<IPackage> packages = solution.GetPackages();
var expectedPackages = new FakePackage[] {
package
};
PackageCollectionAssert.AreEqual(expectedPackages, packages);
}
[Test]
public void GetPackagesInReverseDependencyOrder_TwoPackages_ReturnsPackagesFromSolutionLocalRepositoryInCorrectOrder()
{
CreateSolution();
FakePackage packageA = AddPackageInReverseDependencyOrderToSolution("A");
FakePackage packageB = AddPackageInReverseDependencyOrderToSolution("A");
packageB.DependenciesList.Add(new PackageDependency("A"));
var expectedPackages = new FakePackage[] {
packageB,
packageA
};
IEnumerable<IPackage> packages = solution.GetPackagesInReverseDependencyOrder();
PackageCollectionAssert.AreEqual(expectedPackages, packages);
}
[Test]
public void GetProjects_SolutionHasOneProject_ReturnsOneProject()
{
CreateSolution();
AddProjectToOpenProjects("MyProject");
var repository = new FakePackageRepository();
List<IPackageManagementProject> projects = solution.GetProjects(repository).ToList();
Assert.AreEqual(1, projects.Count);
}
[Test]
public void GetProjects_SolutionHasOneProject_RepositoryUsedToCreateProject()
{
CreateSolution();
AddProjectToOpenProjects("MyProject");
var expectedRepository = new FakePackageRepository();
List<IPackageManagementProject> projects = solution.GetProjects(expectedRepository).ToList();
IPackageRepository repository = fakeProjectFactory.FirstRepositoryPassedToCreateProject;
Assert.AreEqual(expectedRepository, repository);
}
[Test]
public void GetProjects_SolutionHasOneProject_MSBuildProjectUsedToCreateProject()
{
CreateSolution();
TestableProject expectedProject = AddProjectToOpenProjects("MyProject");
var repository = new FakePackageRepository();
List<IPackageManagementProject> projects = solution.GetProjects(repository).ToList();
MSBuildBasedProject project = fakeProjectFactory.FirstProjectPassedToCreateProject;
Assert.AreEqual(expectedProject, project);
}
[Test]
public void GetProjects_SolutionHasNoProjects_ReturnsNoProjects()
{
CreateSolution();
var repository = new FakePackageRepository();
List<IPackageManagementProject> projects = solution.GetProjects(repository).ToList();
Assert.AreEqual(0, projects.Count);
}
[Test]
public void GetProjects_SolutionHasTwoProjects_ReturnsTwoProjects()
{
CreateSolution();
AddProjectToOpenProjects("One");
AddProjectToOpenProjects("Two");
var repository = new FakePackageRepository();
List<IPackageManagementProject> projects = solution.GetProjects(repository).ToList();
Assert.AreEqual(2, projects.Count);
}
[Test]
public void GetInstallPath_OnePackageInSolutionRepository_ReturnsPackageInstallPath()
{
CreateSolution();
FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
string expectedInstallPath = @"d:\projects\MyProject\packages\TestPackage";
fakeSolutionPackageRepository.InstallPathToReturn = expectedInstallPath;
string installPath = solution.GetInstallPath(package);
Assert.AreEqual(expectedInstallPath, installPath);
Assert.AreEqual(package, fakeSolutionPackageRepository.PackagePassedToGetInstallPath);
}
}
}