diff --git a/src/AddIns/Misc/PackageManagement/Packages/NuGet.exe b/src/AddIns/Misc/PackageManagement/Packages/NuGet.exe index 8b165b5898..dabb7ca654 100644 Binary files a/src/AddIns/Misc/PackageManagement/Packages/NuGet.exe and b/src/AddIns/Misc/PackageManagement/Packages/NuGet.exe differ diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index 71c1f27a92..086350f4fb 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -55,7 +55,6 @@ - @@ -187,6 +186,8 @@ + + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs index 21d5310426..6b46777cb5 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs @@ -127,5 +127,12 @@ namespace ICSharpCode.PackageManagement.Design { DependenciesList.Add(new PackageDependency(id)); } + + List frameworkAssemblies = + new List(); + + public IEnumerable FrameworkAssemblies { + get { return frameworkAssemblies; } + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageAssemblyReference.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageAssemblyReference.cs index 1e04f918e1..87746c5476 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageAssemblyReference.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageAssemblyReference.cs @@ -2,8 +2,10 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.Collections.Generic; using System.IO; using System.Runtime.Versioning; + using NuGet; namespace ICSharpCode.PackageManagement.Design @@ -28,5 +30,11 @@ namespace ICSharpCode.PackageManagement.Design { throw new NotImplementedException(); } + + public IEnumerable SupportedFrameworks { + get { + throw new NotImplementedException(); + } + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs index 4074856839..5390bc69b1 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs @@ -237,5 +237,16 @@ namespace ICSharpCode.PackageManagement.Design ForceRemovePassedToUninstallPackage = forceRemove; RemoveDependenciesPassedToUninstallPackage = removeDependencies; } + + public IPackageRepository RepositoryPassedToUpdatePackage; + public IPackage PackagePassedToUpdatePackage; + public IEnumerable PackageOperationsPassedToUpdatePackage; + + public void UpdatePackage(IPackageRepository repository, IPackage package, IEnumerable operations) + { + RepositoryPassedToUpdatePackage = repository; + PackagePassedToUpdatePackage = package; + PackageOperationsPassedToUpdatePackage = operations; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs index a701aa76b0..40688c328a 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs @@ -131,5 +131,14 @@ namespace ICSharpCode.PackageManagement.Design IgnoreDependenciesPassedToGetInstallPackageOperations = ignoreDependencies; return PackageOperationsToReturnFromGetInstallPackageOperations; } + + public IPackage PackagePassedToUpdatePackage; + public IEnumerable PackageOperationsPassedToUpdatePackage; + + public void UpdatePackage(IPackage package, IEnumerable operations) + { + PackagePassedToUpdatePackage = package; + PackageOperationsPassedToUpdatePackage = operations; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs index 548dbc9459..a9aab268ec 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs @@ -17,9 +17,7 @@ namespace ICSharpCode.PackageManagement.Design } public string ProjectName { - get { - throw new NotImplementedException(); - } + get { return String.Empty; } } public dynamic GetPropertyValue(string propertyName) @@ -46,5 +44,10 @@ namespace ICSharpCode.PackageManagement.Design { throw new NotImplementedException(); } + + public void AddFrameworkReference(string name) + { + throw new NotImplementedException(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs index 09d2987698..a9c7634ab3 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs @@ -39,6 +39,8 @@ namespace ICSharpCode.PackageManagement bool forceRemove, bool removeDependencies); + void UpdatePackage(IPackageRepository repository, IPackage package, IEnumerable operations); + MSBuildBasedProject GetProject(string name); PackageManagementOptions Options { get; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs index 27b63b66ac..1be28f5693 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs @@ -13,6 +13,8 @@ namespace ICSharpCode.PackageManagement void InstallPackage(IPackage package, IEnumerable operations, bool ignoreDependencies); void UninstallPackage(IPackage package); + void UpdatePackage(IPackage package, IEnumerable operations); + IEnumerable GetInstallPackageOperations(IPackage package, bool ignoreDependencies); } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs index 8a14744703..8a00fe9f18 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs @@ -284,5 +284,17 @@ namespace ICSharpCode.PackageManagement { return String.Equals(a, b, StringComparison.InvariantCultureIgnoreCase); } + + public void UpdatePackage( + IPackageRepository repository, + IPackage package, + IEnumerable operations) + { + ISharpDevelopPackageManager packageManager = CreatePackageManager(repository); + packageManager.UpdatePackage(package, operations); + projectService.RefreshProjectBrowser(); + RecentPackageRepository.AddPackage(package); + OnPackageInstalled(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs index de3561709b..9d4900913e 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs @@ -272,10 +272,18 @@ namespace ICSharpCode.PackageManagement void InstallPackage() { - packageManagementService.InstallPackage(sourcePackageRepository, package, packageOperations); + InstallPackage(sourcePackageRepository, package, packageOperations); OnPropertyChanged(model => model.IsAdded); } + protected virtual void InstallPackage( + IPackageRepository sourcePackageRepository, + IPackage package, + IEnumerable packageOperations) + { + packageManagementService.InstallPackage(sourcePackageRepository, package, packageOperations); + } + void ReportError(Exception ex) { messageReporter.ShowErrorMessage(ex.Message); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs index 09eede7aec..83709a2141 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs @@ -8,27 +8,27 @@ namespace ICSharpCode.PackageManagement { public class PackageViewModelFactory : IPackageViewModelFactory { - IPackageManagementService packageManagementService; - ILicenseAcceptanceService licenseAcceptanceService; - IMessageReporter messageReporter; - public PackageViewModelFactory( IPackageManagementService packageManagementService, ILicenseAcceptanceService licenseAcceptanceService, - IMessageReporter messageReport) + IMessageReporter messageReporter) { - this.packageManagementService = packageManagementService; - this.licenseAcceptanceService = licenseAcceptanceService; - this.messageReporter = messageReport; + this.PackageManagementService = packageManagementService; + this.LicenseAcceptanceService = licenseAcceptanceService; + this.MessageReporter = messageReporter; } - public PackageViewModel CreatePackageViewModel(IPackage package) + public virtual PackageViewModel CreatePackageViewModel(IPackage package) { return new PackageViewModel( package, - packageManagementService, - licenseAcceptanceService, - messageReporter); + PackageManagementService, + LicenseAcceptanceService, + MessageReporter); } + + protected IPackageManagementService PackageManagementService { get; private set; } + protected ILicenseAcceptanceService LicenseAcceptanceService { get; private set; } + protected IMessageReporter MessageReporter { get; private set; } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs index c9c3923ac6..5891e7ada9 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs @@ -103,5 +103,24 @@ namespace ICSharpCode.PackageManagement Logger, ignoreDependencies); } + + public void UpdatePackage(IPackage package, IEnumerable operations) + { + foreach (PackageOperation operation in operations) { + Execute(operation); + } + UpdatePackageReference(package); + } + + void UpdatePackageReference(IPackage package) + { + bool updateDependencies = true; + UpdatePackageReference(package, updateDependencies); + } + + void UpdatePackageReference(IPackage package, bool updateDependencies) + { + ProjectManager.UpdatePackageReference(package.Id, package.Version, updateDependencies); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs index c41fd548a2..f227277599 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs @@ -64,9 +64,7 @@ namespace ICSharpCode.PackageManagement public void AddReference(string referencePath, Stream stream) { ReferenceProjectItem assemblyReference = CreateReference(referencePath); - projectService.AddProjectItem(project, assemblyReference); - projectService.Save(project); - LogAddedReferenceToProject(assemblyReference); + AddReferenceToProject(assemblyReference); } ReferenceProjectItem CreateReference(string referencePath) @@ -77,6 +75,13 @@ namespace ICSharpCode.PackageManagement return assemblyReference; } + void AddReferenceToProject(ReferenceProjectItem assemblyReference) + { + projectService.AddProjectItem(project, assemblyReference); + projectService.Save(project); + LogAddedReferenceToProject(assemblyReference); + } + void LogAddedReferenceToProject(ReferenceProjectItem referenceProjectItem) { LogAddedReferenceToProject(referenceProjectItem.Include, ProjectName); @@ -245,5 +250,18 @@ namespace ICSharpCode.PackageManagement { DebugLogFormat("Removed file '{0}' from folder '{1}'.", fileName, directory); } + + public void AddFrameworkReference(string name) + { + ReferenceProjectItem assemblyReference = CreateGacReference(name); + AddReferenceToProject(assemblyReference); + } + + ReferenceProjectItem CreateGacReference(string name) + { + var assemblyReference = new ReferenceProjectItem(project); + assemblyReference.Include = name; + return assemblyReference; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs new file mode 100644 index 0000000000..d5e99bf7db --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs @@ -0,0 +1,32 @@ +// 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 UpdatedPackageViewModel : PackageViewModel + { + IPackageManagementService packageManagementService; + + public UpdatedPackageViewModel( + IPackage package, + IPackageManagementService packageManagementService, + ILicenseAcceptanceService licenseAcceptanceService, + IMessageReporter messageReporter) + : base(package, packageManagementService, licenseAcceptanceService, messageReporter) + { + this.packageManagementService = packageManagementService; + } + + protected override void InstallPackage( + IPackageRepository sourcePackageRepository, + IPackage package, + IEnumerable packageOperations) + { + packageManagementService.UpdatePackage(sourcePackageRepository, package, packageOperations); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs new file mode 100644 index 0000000000..524711d7b5 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs @@ -0,0 +1,28 @@ +// 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 NuGet; + +namespace ICSharpCode.PackageManagement +{ + public class UpdatedPackageViewModelFactory : PackageViewModelFactory + { + public UpdatedPackageViewModelFactory( + IPackageManagementService packageManagementService, + ILicenseAcceptanceService licenseAcceptanceService, + IMessageReporter messageReporter) + : base(packageManagementService, licenseAcceptanceService, messageReporter) + { + } + + public override PackageViewModel CreatePackageViewModel(IPackage package) + { + return new UpdatedPackageViewModel( + package, + PackageManagementService, + LicenseAcceptanceService, + MessageReporter); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs index d01bb3bb6a..f8a2a0a9c1 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs @@ -19,7 +19,23 @@ namespace ICSharpCode.PackageManagement IPackageManagementService packageManagementService, IMessageReporter messageReporter, ITaskFactory taskFactory) - : base(packageManagementService, messageReporter, taskFactory) + : this( + packageManagementService, + messageReporter, + new LicenseAcceptanceService(), + taskFactory) + { + } + + public UpdatedPackagesViewModel( + IPackageManagementService packageManagementService, + IMessageReporter messageReporter, + ILicenseAcceptanceService licenseAcceptanceService, + ITaskFactory taskFactory) + : base( + packageManagementService, + new UpdatedPackageViewModelFactory(packageManagementService, licenseAcceptanceService, messageReporter), + taskFactory) { this.packageManagementService = packageManagementService; } diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll index aadac4d76b..66170008cf 100644 Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll differ diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 711e3684a3..e14c393c17 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -114,6 +114,7 @@ + @@ -122,6 +123,7 @@ + @@ -148,6 +150,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackagePathResolver.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackagePathResolver.cs index a0d860979a..087d977bb5 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackagePathResolver.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackagePathResolver.cs @@ -22,5 +22,15 @@ namespace PackageManagement.Tests.Helpers { throw new NotImplementedException(); } + + public string GetPackageDirectory(string packageId, Version version) + { + throw new NotImplementedException(); + } + + public string GetPackageFileName(string packageId, Version version) + { + throw new NotImplementedException(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProjectManager.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProjectManager.cs index a9d4591c1e..9901ce686a 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProjectManager.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProjectManager.cs @@ -17,6 +17,9 @@ namespace PackageManagement.Tests.Helpers public bool ForcePassedToRemovePackageReference; public bool RemoveDependenciesPassedToRemovePackageReference; + public IPackage PackagePassedToUpdatePackageReference; + public bool UpdateDependenciesPassedToUpdatePackageReference; + public FakePackageRepository FakeLocalRepository { get { return LocalRepository as FakePackageRepository; } } @@ -50,5 +53,15 @@ namespace PackageManagement.Tests.Helpers ForcePassedToRemovePackageReference = force; RemoveDependenciesPassedToRemovePackageReference = removeDependencies; } + + public override void UpdatePackageReference(string packageId, Version version, bool updateDependencies) + { + var package = new FakePackage(); + package.Id = packageId; + package.Version = version; + + PackagePassedToUpdatePackageReference = package; + UpdateDependenciesPassedToUpdatePackageReference = updateDependencies; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs new file mode 100644 index 0000000000..f3a55df2d8 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs @@ -0,0 +1,63 @@ +// 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 ICSharpCode.PackageManagement.Design; +using NuGet; + +namespace PackageManagement.Tests.Helpers +{ + public class TestableUpdatedPackageViewModel : UpdatedPackageViewModel + { + public FakePackageOperationResolver FakePackageOperationResolver = new FakePackageOperationResolver(); + public FakePackageRepository FakeSourcePackageRepository; + public FakePackageManagementService FakePackageManagementService; + public FakeLicenseAcceptanceService FakeLicenseAcceptanceService; + public FakeMessageReporter FakeMessageReporter; + public FakePackage FakePackage; + public ILogger LoggerUsedWhenCreatingPackageResolver; + public string PackageViewModelAddingPackageMessageFormat = String.Empty; + public string PackageViewModelRemovingPackageMessageFormat = String.Empty; + + public TestableUpdatedPackageViewModel() + : this(new FakePackageManagementService()) + { + } + + public TestableUpdatedPackageViewModel(FakePackageManagementService packageManagementService) + : this( + new FakePackage(), + packageManagementService, + new FakeLicenseAcceptanceService(), + new FakeMessageReporter()) + { + } + + public TestableUpdatedPackageViewModel( + FakePackage package, + FakePackageManagementService packageManagementService, + FakeLicenseAcceptanceService licenseAcceptanceService, + FakeMessageReporter messageReporter) + : base( + package, + packageManagementService, + licenseAcceptanceService, + messageReporter) + { + this.FakePackage = package; + this.FakePackageManagementService = packageManagementService; + this.FakeLicenseAcceptanceService = licenseAcceptanceService; + this.FakeMessageReporter = messageReporter; + this.FakeSourcePackageRepository = FakePackageManagementService.FakeActivePackageRepository; + } + + protected override string AddingPackageMessageFormat { + get { return PackageViewModelAddingPackageMessageFormat; } + } + + protected override string RemovingPackageMessageFormat { + get { return PackageViewModelRemovingPackageMessageFormat; } + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/UpdatePackageHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/UpdatePackageHelper.cs new file mode 100644 index 0000000000..455dddfc7a --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/UpdatePackageHelper.cs @@ -0,0 +1,41 @@ +// 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.PackageManagement.Design; +using NuGet; + +namespace PackageManagement.Tests.Helpers +{ + public class UpdatePackageHelper + { + PackageManagementService packageManagementService; + + public FakePackage TestPackage = new FakePackage() { + Id = "Test" + }; + + public FakePackageRepository PackageRepository = new FakePackageRepository(); + public List PackageOperations = new List(); + + public UpdatePackageHelper(PackageManagementService packageManagementService) + { + this.packageManagementService = packageManagementService; + } + + public void UpdateTestPackage() + { + packageManagementService.UpdatePackage(PackageRepository, TestPackage, PackageOperations); + } + + public FakePackage AddPackageInstallOperation() + { + var package = new FakePackage("Package to install"); + var operation = new PackageOperation(package, PackageAction.Install); + PackageOperations.Add(operation); + return package; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs index 0434c90f7a..156ee7d68b 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs @@ -25,6 +25,7 @@ namespace PackageManagement.Tests TestableProject testProject; InstallPackageHelper installPackageHelper; UninstallPackageHelper uninstallPackageHelper; + UpdatePackageHelper updatePackageHelper; FakePackageManagementOutputMessagesView fakeOutputMessagesView; void CreatePackageSources() @@ -55,6 +56,7 @@ namespace PackageManagement.Tests installPackageHelper = new InstallPackageHelper(packageManagementService); uninstallPackageHelper = new UninstallPackageHelper(packageManagementService); + updatePackageHelper = new UpdatePackageHelper(packageManagementService); } FakePackage AddOneFakePackageToPackageRepositoryFactoryRepository(string id) @@ -938,5 +940,82 @@ namespace PackageManagement.Tests Assert.AreEqual(expectedProject, actualProject); } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_PackageInstalled() + { + CreatePackageManagementService(); + updatePackageHelper.UpdateTestPackage(); + + var expectedPackage = updatePackageHelper.TestPackage; + var actualPackage = fakePackageManagerFactory.FakePackageManager.PackagePassedToUpdatePackage; + + Assert.AreEqual(expectedPackage, actualPackage); + } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_RepositoryUsedToCreatePackageManager() + { + CreatePackageManagementService(); + updatePackageHelper.UpdateTestPackage(); + + var expectedRepository = updatePackageHelper.PackageRepository; + var actualRepository = fakePackageManagerFactory.PackageRepositoryPassedToCreatePackageManager; + + Assert.AreEqual(expectedRepository, actualRepository); + } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_PackageOperationsUsedToUpdatePackage() + { + CreatePackageManagementService(); + updatePackageHelper.UpdateTestPackage(); + + var expectedOperations = updatePackageHelper.PackageOperations; + var actualOperations = fakePackageManagerFactory.FakePackageManager.PackageOperationsPassedToUpdatePackage; + + Assert.AreEqual(expectedOperations, actualOperations); + } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_ProjectBrowserIsRefreshed() + { + CreatePackageManagementService(); + updatePackageHelper.UpdateTestPackage(); + + bool refreshed = fakeProjectService.IsRefreshProjectBrowserCalled; + + Assert.IsTrue(refreshed); + } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_PackageUpdateIsAddedToRecentPackagesRepository() + { + CreatePackageManagementService(); + updatePackageHelper.UpdateTestPackage(); + + var recentPackages = packageManagementService.RecentPackageRepository.GetPackages(); + + var expectedPackages = new FakePackage[] { + updatePackageHelper.TestPackage + }; + + PackageCollectionAssert.AreEqual(expectedPackages, recentPackages); + } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_PackageInstalledEventIsFired() + { + CreatePackageManagementService(); + + IPackage package = null; + packageManagementService.PackageInstalled += (sender, e) => { + package = fakePackageManagerFactory.FakePackageManager.PackagePassedToUpdatePackage; + }; + updatePackageHelper.UpdateTestPackage(); + + Assert.AreEqual(installPackageHelper.TestPackage, package); + + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs index 2ca3a3d463..dbf3ae8985 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs @@ -106,7 +106,7 @@ namespace PackageManagement.Tests return package; } - FakePackage InstallPackageWithOnePackageOperation(PackageOperation operation) + FakePackage InstallPackageWithPackageOperations(PackageOperation operation) { var operations = new PackageOperation[] { operation @@ -181,6 +181,24 @@ namespace PackageManagement.Tests return packageManager.GetInstallPackageOperations(package, true); } + FakePackage UpdatePackageWithNoPackageOperations() + { + FakePackage package = CreateFakePackage(); + var operations = new List(); + packageManager.UpdatePackage(package, operations); + return package; + } + + FakePackage UpdatePackageWithPackageOperations(PackageOperation operation) + { + var operations = new PackageOperation[] { + operation + }; + FakePackage package = CreateFakePackage(); + packageManager.UpdatePackage(package, operations); + return package; + } + [Test] public void ProjectManager_InstanceCreated_SourceRepositoryIsSharedRepositoryPassedToPackageManager() { @@ -276,8 +294,8 @@ namespace PackageManagement.Tests CreateTestableProjectManager(); PackageOperation operation = CreateOneInstallPackageOperation(); - InstallPackageWithOnePackageOperation(operation); - + InstallPackageWithPackageOperations(operation); + Assert.AreEqual(operation.Package, fakeSolutionSharedRepository.FirstPackageAdded); } @@ -480,6 +498,37 @@ namespace PackageManagement.Tests bool result = fakePackageOperationResolverFactory.IgnoreDependenciesPassedToCreateInstallPackageOperationResolver; Assert.IsTrue(result); + } + + public void UpdatePackage_PackageInstanceAndNoPackageOperationsPassed_UpdatesReferenceInProject() + { + CreatePackageManager(); + CreateTestableProjectManager(); + var package = UpdatePackageWithNoPackageOperations(); + + Assert.AreEqual(package, testableProjectManager.PackagePassedToUpdatePackageReference); + } + + [Test] + public void UpdatePackage_PackageInstanceAndNoPackageOperationsPassed_UpdatesDependenciesInProject() + { + CreatePackageManager(); + CreateTestableProjectManager(); + var package = UpdatePackageWithNoPackageOperations(); + + Assert.IsTrue(testableProjectManager.UpdateDependenciesPassedToUpdatePackageReference); + } + + [Test] + public void UpdatePackage_PackageInstanceAndOneInstallPackageOperationPassed_PackageDefinedInOperationIsInstalledInLocalRepository() + { + CreatePackageManager(); + CreateTestableProjectManager(); + + PackageOperation operation = CreateOneInstallPackageOperation(); + UpdatePackageWithPackageOperations(operation); + + Assert.AreEqual(operation.Package, fakeSolutionSharedRepository.FirstPackageAdded); } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs index adb654f167..09671d255e 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs @@ -623,5 +623,51 @@ namespace PackageManagement.Tests Assert.AreEqual("test", projectSystem.DirectoryPassedToLogDeletedDirectory); } + + [Test] + public void AddFrameworkReference_SystemXmlToBeAdded_ReferenceAddedToProject() + { + CreateTestProject(); + CreateProjectSystem(project); + + projectSystem.AddFrameworkReference("System.Xml"); + + ReferenceProjectItem referenceItem = ProjectHelper.GetReference(project, "System.Xml"); + + ReferenceProjectItem expectedReferenceItem = new ReferenceProjectItem(project); + expectedReferenceItem.Include = "System.Xml"; + + ReferenceProjectItemAssert.AreEqual(expectedReferenceItem, referenceItem); + } + + [Test] + public void AddFrameworkReference_SystemXmlToBeAdded_ProjectIsSaved() + { + CreateTestProject(); + CreateProjectSystem(project); + + projectSystem.AddFrameworkReference("System.Xml"); + + bool saved = project.IsSaved; + + Assert.IsTrue(saved); + } + + [Test] + public void AddFrameworkReference_SystemXmlToBeAdded_AddedReferenceIsLogged() + { + CreateTestProject(); + CreateProjectSystem(project); + project.Name = "MyTestProject"; + + projectSystem.AddFrameworkReference("System.Xml"); + + var expectedReferenceAndProjectName = new ReferenceAndProjectName() { + Reference = "System.Xml", + Project = "MyTestProject" + }; + + Assert.AreEqual(expectedReferenceAndProjectName, projectSystem.ReferenceAndProjectNamePassedToLogAddedReferenceToProject); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs new file mode 100644 index 0000000000..68b0489b41 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs @@ -0,0 +1,58 @@ +// 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.Design; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests +{ + [TestFixture] + public class UpdatedPackageViewModelTests + { + TestableUpdatedPackageViewModel viewModel; + FakePackageManagementService fakePackageManagementService; + FakePackageRepository sourcePackageRepository; + + void CreateViewModel() + { + viewModel = new TestableUpdatedPackageViewModel(); + fakePackageManagementService = viewModel.FakePackageManagementService; + sourcePackageRepository = viewModel.FakeSourcePackageRepository; + } + + [Test] + public void AddPackage_PackageAddedSuccessfully_PackageUpdatedUsingSourcePackageRepository() + { + CreateViewModel(); + viewModel.AddPackage(); + + Assert.AreEqual(sourcePackageRepository, fakePackageManagementService.RepositoryPassedToUpdatePackage); + } + + [Test] + public void AddPackage_PackageAddedSuccessfully_PackageUpdated() + { + CreateViewModel(); + viewModel.AddPackage(); + + var expectedPackage = viewModel.FakePackage; + var actualPackage = fakePackageManagementService.PackagePassedToUpdatePackage; + + Assert.AreEqual(expectedPackage, actualPackage); + } + + [Test] + public void AddPackage_PackageAddedSuccessfully_PackageUpdatedUsingPackageOperations() + { + CreateViewModel(); + viewModel.AddPackage(); + + var expectedOperations = viewModel.FakePackageOperationResolver.PackageOperations; + var actualOperations = fakePackageManagementService.PackageOperationsPassedToUpdatePackage; + + Assert.AreEqual(expectedOperations, actualOperations); + } + } +}