// 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 ICSharpCode.PackageManagement; using ICSharpCode.SharpDevelop.Project; using NuGet; using NUnit.Framework; using PackageManagement.Tests.Helpers; namespace PackageManagement.Tests { [TestFixture] public class PackageReferencesForProjectTests { PackageReferencesForProject packageReferencesForProject; FakePackageReferenceFileFactory fakePackageReferenceFileFactory; FakePackageReferenceFile fakePackageReferenceFile; FakePackageReferenceInstaller fakePackageReferenceInstaller; TestableProject CreateProject() { return ProjectHelper.CreateTestProject(); } void CreatePackageReferencesForProject(MSBuildBasedProject project) { fakePackageReferenceFileFactory = new FakePackageReferenceFileFactory(); fakePackageReferenceFile = fakePackageReferenceFileFactory.FakePackageReferenceFile; fakePackageReferenceInstaller = new FakePackageReferenceInstaller(); packageReferencesForProject = new PackageReferencesForProject( project, fakePackageReferenceInstaller, fakePackageReferenceFileFactory); } void AddPackageReference(string packageId, string version) { fakePackageReferenceFile.AddFakePackageReference(packageId, version); } void PackageReferenceCollectionAssertAreEqual(IEnumerable expected, IEnumerable actual) { IEnumerable expectedAsStrings = ConvertToStrings(expected); IEnumerable actualAsStrings = ConvertToStrings(actual); CollectionAssert.AreEqual(expectedAsStrings, actualAsStrings); } List ConvertToStrings(IEnumerable packageReferences) { var converted = new List(); foreach (PackageReference packageReference in packageReferences) { string convertedPackageReference = ConvertToString(packageReference); converted.Add(convertedPackageReference); } return converted; } string ConvertToString(PackageReference packageReference) { return String.Format( "Id: {0}, Version: {1}", packageReference.Id, packageReference.Version); } [Test] public void InstallPackages_OnePackageReferenceInPackageConfigFile_OpensPackageConfigFileInProjectDirectory() { TestableProject project = CreateProject(); project.FileName = @"d:\projects\myproject\myproject.csproj"; CreatePackageReferencesForProject(project); AddPackageReference("PackageId", "1.0.3.2"); packageReferencesForProject.InstallPackages(); string fileName = fakePackageReferenceFileFactory.FileNamePassedToCreatePackageReferenceFile; string expectedFileName = @"d:\projects\myproject\packages.config"; Assert.AreEqual(expectedFileName, fileName); } [Test] public void InstallPackages_OnePackageReferenceInPackageConfigFile_OnePackageInstalled() { TestableProject project = CreateProject(); CreatePackageReferencesForProject(project); AddPackageReference("PackageId", "1.0.3.2"); packageReferencesForProject.InstallPackages(); IEnumerable packageReferencesInstalled = fakePackageReferenceInstaller.PackageReferencesPassedToInstallPackages; List expectedPackageReferences = fakePackageReferenceFile.FakePackageReferences; CollectionAssert.AreEqual(expectedPackageReferences, packageReferencesInstalled); } [Test] public void InstallPackages_OnePackageReferenceInPackageConfigFile_ProjectPassedToInstaller() { TestableProject expectedProject = CreateProject(); CreatePackageReferencesForProject(expectedProject); AddPackageReference("PackageId", "1.0.3.2"); packageReferencesForProject.InstallPackages(); MSBuildBasedProject project = fakePackageReferenceInstaller.ProjectPassedToInstallPackages; Assert.AreEqual(expectedProject, project); } [Test] public void RemovePackageReferences_TwoPackageReferencesInPackageConfigFile_RemovesPackageReferenceFromFile() { TestableProject project = CreateProject(); CreatePackageReferencesForProject(project); AddPackageReference("One", "1.0.3.2"); AddPackageReference("Two", "2.0.44"); packageReferencesForProject.RemovePackageReferences(); List packageReferencesRemoved = fakePackageReferenceFile.EntriesDeleted; var expectedPackageReferences = new List(); expectedPackageReferences.Add(new PackageReference("One", new Version("1.0.3.2"))); expectedPackageReferences.Add(new PackageReference("Two", new Version("2.0.44"))); PackageReferenceCollectionAssertAreEqual(expectedPackageReferences, packageReferencesRemoved); } } }