diff --git a/src/AddIns/Misc/PackageManagement/PackageManagement.sln b/src/AddIns/Misc/PackageManagement/PackageManagement.sln index da789b6ae0..8b2b5afbc5 100644 --- a/src/AddIns/Misc/PackageManagement/PackageManagement.sln +++ b/src/AddIns/Misc/PackageManagement/PackageManagement.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -# SharpDevelop 4.1.0.7222-alpha +# SharpDevelop 4.1.0.7289-alpha Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement", "Project\PackageManagement.csproj", "{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.Tests", "Test\PackageManagement.Tests.csproj", "{56E98A01-8398-4A08-9578-C7337711A52B}" diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index 1c6a2d7b2c..469b367f80 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -75,12 +75,21 @@ + + + + + + + + + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs index 5990b7ddf6..bc3105c862 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs @@ -20,6 +20,8 @@ namespace ICSharpCode.PackageManagement ITaskFactory taskFactory) { this.packageManagementService = packageManagementService; + this.packageManagementService.OutputMessagesView.Clear(); + installedPackagesViewModel = new InstalledPackagesViewModel(packageManagementService, taskFactory); availablePackagesViewModel = new AvailablePackagesViewModel(packageManagementService, taskFactory); packageUpdatesViewModel = new PackageUpdatesViewModel(packageManagementService, taskFactory); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFileSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeFileSystem.cs similarity index 90% rename from src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFileSystem.cs rename to src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeFileSystem.cs index 5115c36798..676701d5ae 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFileSystem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeFileSystem.cs @@ -7,7 +7,7 @@ using System.IO; using System.Text; using NuGet; -namespace PackageManagement.Tests.Helpers +namespace ICSharpCode.PackageManagement.Design { public class FakeFileSystem : IFileSystem { @@ -15,14 +15,7 @@ namespace PackageManagement.Tests.Helpers public string FileToReturnFromOpenFile; public string PathToReturnFromGetFullPath; - public ILogger Logger { - get { - throw new NotImplementedException(); - } - set { - throw new NotImplementedException(); - } - } + public ILogger Logger { get; set; } public string Root { get { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementOutputMessagesView.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementOutputMessagesView.cs new file mode 100644 index 0000000000..710653156a --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementOutputMessagesView.cs @@ -0,0 +1,24 @@ +// 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 NuGet; + +namespace ICSharpCode.PackageManagement.Design +{ + public class FakePackageManagementOutputMessagesView : IPackageManagementOutputMessagesView + { + public bool IsClearCalled; + + public void Clear() + { + IsClearCalled = true; + } + + public void Log(MessageLevel level, string message, params object[] args) + { + + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs index 8a2968bce0..e25532f078 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs @@ -127,5 +127,11 @@ namespace ICSharpCode.PackageManagement.Design } public Exception ActiveProjectManagerExeptionToThrow { get; set; } + + public FakePackageManagementOutputMessagesView FakeOutputMessagesView = new FakePackageManagementOutputMessagesView(); + + public IPackageManagementOutputMessagesView OutputMessagesView { + get { return FakeOutputMessagesView; } + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectManager.cs index e5f69adae2..24a3f4ee07 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectManager.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectManager.cs @@ -43,9 +43,15 @@ namespace ICSharpCode.PackageManagement.Design public IPackageRepository LocalRepository { get; set; } public ILogger Logger { get; set; } - public IProjectSystem Project { get; set; } public IPackageRepository SourceRepository { get; set; } public IPackagePathResolver PathResolver { get; set; } + + public IProjectSystem Project { + get { return FakeProjectSystem; } + set { FakeProjectSystem = value as FakeProjectSystem; } + } + + public FakeProjectSystem FakeProjectSystem = new FakeProjectSystem(); public void AddPackageReference(string packageId, Version version, bool ignoreDependencies) { diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs similarity index 95% rename from src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeProjectSystem.cs rename to src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs index 33ff1d92cf..548dbc9459 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeProjectSystem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs @@ -6,7 +6,7 @@ using System.IO; using System.Runtime.Versioning; using NuGet; -namespace PackageManagement.Tests.Helpers +namespace ICSharpCode.PackageManagement.Design { public class FakeProjectSystem : FakeFileSystem, IProjectSystem { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ICompilerMessageView.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ICompilerMessageView.cs new file mode 100644 index 0000000000..2b2f980a48 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/ICompilerMessageView.cs @@ -0,0 +1,14 @@ +// 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; + +namespace ICSharpCode.PackageManagement +{ + public interface ICompilerMessageView + { + IMessageViewCategory Create(string categoryName, string categoryDisplayName); + + IMessageViewCategory GetExisting(string name); + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IMessageViewCategory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IMessageViewCategory.cs new file mode 100644 index 0000000000..3cb0339f02 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IMessageViewCategory.cs @@ -0,0 +1,13 @@ +// 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; + +namespace ICSharpCode.PackageManagement +{ + public interface IMessageViewCategory + { + void AppendLine(string text); + void Clear(); + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementOutputMessagesView.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementOutputMessagesView.cs new file mode 100644 index 0000000000..1344b88fdb --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementOutputMessagesView.cs @@ -0,0 +1,13 @@ +// 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 interface IPackageManagementOutputMessagesView : ILogger + { + void Clear(); + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs index abb3c28fbc..1afbf89cec 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs @@ -23,5 +23,7 @@ namespace ICSharpCode.PackageManagement bool HasMultiplePackageSources { get; } PackageSource ActivePackageSource { get; set; } + + IPackageManagementOutputMessagesView OutputMessagesView { get; } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementCompilerMessageView.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementCompilerMessageView.cs new file mode 100644 index 0000000000..5d2da7e658 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementCompilerMessageView.cs @@ -0,0 +1,27 @@ +// 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.SharpDevelop.Gui; + +namespace ICSharpCode.PackageManagement +{ + public class PackageManagementCompilerMessageView : ICompilerMessageView + { + public IMessageViewCategory Create(string categoryName, string categoryDisplayName) + { + MessageViewCategory view = null; + MessageViewCategory.Create(ref view, categoryName, categoryDisplayName); + return new PackageManagementMessageViewCategory(view); + } + + public IMessageViewCategory GetExisting(string categoryName) + { + MessageViewCategory view = CompilerMessageView.Instance.GetCategory(categoryName); + if (view != null) { + return new PackageManagementMessageViewCategory(view); + } + return null; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementMessageViewCategory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementMessageViewCategory.cs new file mode 100644 index 0000000000..1d9ef34973 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementMessageViewCategory.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 ICSharpCode.SharpDevelop.Gui; + +namespace ICSharpCode.PackageManagement +{ + public class PackageManagementMessageViewCategory : IMessageViewCategory + { + MessageViewCategory messageViewCategory; + + public PackageManagementMessageViewCategory(MessageViewCategory messageViewCategory) + { + this.messageViewCategory = messageViewCategory; + } + + public void AppendLine(string text) + { + messageViewCategory.AppendLine(text); + } + + public void Clear() + { + messageViewCategory.ClearText(); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOutputMessagesView.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOutputMessagesView.cs new file mode 100644 index 0000000000..87af3c2949 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOutputMessagesView.cs @@ -0,0 +1,49 @@ +// 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 PackageManagementOutputMessagesView : IPackageManagementOutputMessagesView + { + public static readonly string CategoryName = "PackageManagement"; + + IMessageViewCategory messageViewCategory; + + public PackageManagementOutputMessagesView() + : this(new PackageManagementCompilerMessageView()) + { + } + + public PackageManagementOutputMessagesView(ICompilerMessageView compilerMessageView) + { + CreatePackageManagementMessageCategoryIfNoneExists(compilerMessageView); + } + + void CreatePackageManagementMessageCategoryIfNoneExists(ICompilerMessageView compilerMessageView) + { + messageViewCategory = compilerMessageView.GetExisting(CategoryName); + if (messageViewCategory == null) { + CreatePackageManagementMessageCategory(compilerMessageView); + } + } + + void CreatePackageManagementMessageCategory(ICompilerMessageView compilerMessageView) + { + messageViewCategory = compilerMessageView.Create(CategoryName, "Package Management"); + } + + public void Clear() + { + messageViewCategory.Clear(); + } + + public void Log(MessageLevel level, string message, params object[] args) + { + string formattedMessage = String.Format(message, args); + messageViewCategory.AppendLine(formattedMessage); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs index 0fb6fdbad0..f21873eeb1 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs @@ -12,6 +12,7 @@ namespace ICSharpCode.PackageManagement { public class PackageManagementService : IPackageManagementService { + IPackageManagementOutputMessagesView outputMessagesView; PackageManagementOptions options; IPackageRepositoryCache packageRepositoryCache; IPackageManagerFactory packageManagerFactory; @@ -19,25 +20,34 @@ namespace ICSharpCode.PackageManagement IPackageRepository activePackageRepository; PackageSource activePackageSource; - public PackageManagementService(PackageManagementOptions options, + public PackageManagementService( + PackageManagementOptions options, IPackageRepositoryCache packageRepositoryCache, IPackageManagerFactory packageManagerFactory, - IPackageManagementProjectService projectService) + IPackageManagementProjectService projectService, + IPackageManagementOutputMessagesView outputMessagesView) { this.options = options; this.packageRepositoryCache = packageRepositoryCache; this.packageManagerFactory = packageManagerFactory; this.projectService = projectService; + this.outputMessagesView = outputMessagesView; } public PackageManagementService() - : this(new PackageManagementOptions(), + : this( + new PackageManagementOptions(), new PackageRepositoryCache(), new SharpDevelopPackageManagerFactory(), - new PackageManagementProjectService()) + new PackageManagementProjectService(), + new PackageManagementOutputMessagesView()) { } + public IPackageManagementOutputMessagesView OutputMessagesView { + get { return outputMessagesView; } + } + public PackageManagementOptions Options { get { return options; } } @@ -97,7 +107,19 @@ namespace ICSharpCode.PackageManagement ISharpDevelopPackageManager CreatePackageManager(IPackageRepository packageRepository) { MSBuildBasedProject project = projectService.CurrentProject as MSBuildBasedProject; - return packageManagerFactory.CreatePackageManager(packageRepository, project); + ISharpDevelopPackageManager packageManager = packageManagerFactory.CreatePackageManager(packageRepository, project); + ConfigureLogger(packageManager); + return packageManager; + } + + void ConfigureLogger(ISharpDevelopPackageManager packageManager) + { + packageManager.Logger = outputMessagesView; + packageManager.FileSystem.Logger = outputMessagesView; + + IProjectManager projectManager = packageManager.ProjectManager; + projectManager.Logger = outputMessagesView; + projectManager.Project.Logger = outputMessagesView; } public void UninstallPackage(IPackageRepository repository, IPackage package) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs index 4dd80b4ec4..0f9a4f39be 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs @@ -172,6 +172,29 @@ namespace ICSharpCode.PackageManagement } } + void GetPackageOperations() + { + IPackageOperationResolver resolver = CreatePackageOperationResolver(); + packageOperations = resolver.ResolveOperations(package); + } + + IPackageOperationResolver CreatePackageOperationResolver() + { + return CreatePackageOperationResolver(Logger); + } + + ILogger Logger { + get { return packageManagementService.OutputMessagesView; } + } + + protected virtual IPackageOperationResolver CreatePackageOperationResolver(ILogger logger) + { + return new InstallWalker(LocalPackageRepository, + sourcePackageRepository, + logger, + ignoreDependencies: false); + } + bool CanInstallPackage() { IEnumerable packages = GetPackagesRequiringLicenseAcceptance(); @@ -202,20 +225,6 @@ namespace ICSharpCode.PackageManagement } return packages; } - - void GetPackageOperations() - { - IPackageOperationResolver resolver = CreatePackageOperationResolver(); - packageOperations = resolver.ResolveOperations(package); - } - - protected virtual IPackageOperationResolver CreatePackageOperationResolver() - { - return new InstallWalker(LocalPackageRepository, - sourcePackageRepository, - NullLogger.Instance, - ignoreDependencies: false); - } bool PackageRequiresLicenseAcceptance(IPackage package) { diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index b5b6e3a7cc..74cea6cada 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -68,9 +68,10 @@ Properties\GlobalAssemblyInfo.cs + - + @@ -89,7 +90,6 @@ - @@ -111,6 +111,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs index ec598f63cd..9fffa4ac93 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs @@ -90,5 +90,13 @@ namespace PackageManagement.Tests PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageUpdatesViewModel.PackageViewModels); } + + [Test] + public void Constructor_InstanceCreated_OutputMessagesCleared() + { + CreateViewModel(); + + Assert.IsTrue(fakePackageManagementService.FakeOutputMessagesView.IsClearCalled); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeCompilerMessageView.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeCompilerMessageView.cs new file mode 100644 index 0000000000..cc58a586d6 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeCompilerMessageView.cs @@ -0,0 +1,33 @@ +// 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; + +namespace PackageManagement.Tests.Helpers +{ + public class FakeCompilerMessageView : ICompilerMessageView + { + public FakeMessageCategoryView FakeMessageCategoryView = new FakeMessageCategoryView(); + public List MessageViewCategoriesCreated = new List(); + public FakeMessageCategoryView GetExistingReturnValue; + public string CategoryNamePassedToCategoryExists; + + public string FirstMessageViewCategoryCreated { + get { return MessageViewCategoriesCreated[0]; } + } + + public IMessageViewCategory Create(string categoryName, string categoryDisplayName) + { + MessageViewCategoriesCreated.Add(categoryName); + return FakeMessageCategoryView; + } + + public IMessageViewCategory GetExisting(string categoryName) + { + CategoryNamePassedToCategoryExists = categoryName; + return GetExistingReturnValue; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeMessageCategoryView.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeMessageCategoryView.cs new file mode 100644 index 0000000000..d780364540 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeMessageCategoryView.cs @@ -0,0 +1,30 @@ +// 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; + +namespace PackageManagement.Tests.Helpers +{ + public class FakeMessageCategoryView : IMessageViewCategory + { + public bool IsClearCalled; + + public List LinesAppended = new List(); + + public string FirstLineAppended { + get { return LinesAppended[0]; } + } + + public void AppendLine(string text) + { + LinesAppended.Add(text); + } + + public void Clear() + { + IsClearCalled = true; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManager.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManager.cs index 3fa098f162..d4945284a8 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManager.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManager.cs @@ -45,11 +45,18 @@ namespace PackageManagement.Tests.Helpers public event EventHandler PackageUninstalling; #pragma warning restore 67 - public IFileSystem FileSystem { get; set; } + public IFileSystem FileSystem { + get { return FakeFileSystem; } + set { FakeFileSystem = value as FakeFileSystem; } + } + + public FakeFileSystem FakeFileSystem = new FakeFileSystem(); + public IPackageRepository LocalRepository { get; set; } public ILogger Logger { get; set; } public IPackageRepository SourceRepository { get; set; } public ISharpDevelopProjectManager ProjectManager { get; set; } + public ILogger LoggerSetBeforeInstallPackageCalled; public FakePackageManager() { @@ -58,11 +65,15 @@ namespace PackageManagement.Tests.Helpers public void InstallPackage(IPackage package) { + LoggerSetBeforeInstallPackageCalled = Logger; + InstallPackage(package, false); } public void InstallPackage(IPackage package, bool ignoreDependencies) { + LoggerSetBeforeInstallPackageCalled = Logger; + PackagePassedToInstallPackage = package; IgnoreDependenciesPassedToInstallPackage = ignoreDependencies; @@ -106,6 +117,8 @@ namespace PackageManagement.Tests.Helpers public void InstallPackage(IPackage package, IEnumerable operations) { + LoggerSetBeforeInstallPackageCalled = Logger; + PackagePassedToInstallPackage = package; ParametersPassedToInstallPackage = new InstallPackageParameters(); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeProjectSystemFactory.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeProjectSystemFactory.cs index 90244ce7f9..0481f123e1 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeProjectSystemFactory.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeProjectSystemFactory.cs @@ -3,6 +3,7 @@ using System; using ICSharpCode.PackageManagement; +using ICSharpCode.PackageManagement.Design; using ICSharpCode.SharpDevelop.Project; using NuGet; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs index 47e739db18..8fb964fbfc 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs @@ -15,6 +15,7 @@ namespace PackageManagement.Tests.Helpers public FakePackageManagementService FakePackageManagementService; public FakeLicenseAcceptanceService FakeLicenseAcceptanceService; public FakePackage FakePackage; + public ILogger LoggerUsedWhenCreatingPackageResolver; public TestablePackageViewModel() : this( @@ -39,12 +40,13 @@ namespace PackageManagement.Tests.Helpers this.FakeSourcePackageRepository = FakePackageManagementService.FakeActivePackageRepository; } - protected override IPackageOperationResolver CreatePackageOperationResolver() + protected override IPackageOperationResolver CreatePackageOperationResolver(ILogger logger) { + LoggerUsedWhenCreatingPackageResolver = logger; if (FakePackageOperationResolver != null) { return FakePackageOperationResolver; } - return base.CreatePackageOperationResolver(); + return base.CreatePackageOperationResolver(logger); } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/Tests/PackageReferenceRepositoryTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/Tests/PackageReferenceRepositoryTests.cs index 7e57a913cf..71ca8ea092 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/Tests/PackageReferenceRepositoryTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/Tests/PackageReferenceRepositoryTests.cs @@ -3,6 +3,7 @@ using System; using System.IO; +using ICSharpCode.PackageManagement.Design; using NuGet; using NUnit.Framework; using PackageManagement.Tests.Helpers; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOutputMessagesViewTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOutputMessagesViewTests.cs new file mode 100644 index 0000000000..129392abd9 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOutputMessagesViewTests.cs @@ -0,0 +1,104 @@ +// 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 NuGet; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests +{ + [TestFixture] + public class PackageManagementOutputMessagesViewTests + { + PackageManagementOutputMessagesView view; + FakeCompilerMessageView fakeCompilerMessageView; + FakeMessageCategoryView fakeMessageCategoryView; + + void CreateView() + { + CreateCompilerMessageView(); + CreateView(fakeCompilerMessageView); + } + + void CreateCompilerMessageView() + { + fakeCompilerMessageView = new FakeCompilerMessageView(); + fakeMessageCategoryView = fakeCompilerMessageView.FakeMessageCategoryView; + } + + void CreateView(FakeCompilerMessageView fakeCompilerMessageView) + { + view = new PackageManagementOutputMessagesView(fakeCompilerMessageView); + } + + void LogInfoMessage(string message) + { + view.Log(MessageLevel.Info, message); + } + + [Test] + public void Log_InfoMessage_CreatesMessageViewCategoryForPackageManagement() + { + CreateView(); + LogInfoMessage("Test"); + + string expectedCategryName = PackageManagementOutputMessagesView.CategoryName; + string actualCategoryName = fakeCompilerMessageView.FirstMessageViewCategoryCreated; + + Assert.AreEqual(expectedCategryName, actualCategoryName); + } + + [Test] + public void Log_InfoMessage_MessageLoggedToMessageCategoryView() + { + CreateView(); + LogInfoMessage("Test"); + + Assert.AreEqual("Test", fakeMessageCategoryView.FirstLineAppended); + } + + [Test] + public void Clear_AttemptingToClearMessages_MessagesClearedFromMessageViewCategory() + { + CreateView(); + view.Clear(); + + Assert.IsTrue(fakeMessageCategoryView.IsClearCalled); + } + + [Test] + public void Constructor_MessageViewCategoryAlreadyCreated_MessageViewCategoryNotCreatedAgain() + { + CreateCompilerMessageView(); + fakeCompilerMessageView.GetExistingReturnValue = new FakeMessageCategoryView(); + CreateView(fakeCompilerMessageView); + + Assert.AreEqual(0, fakeCompilerMessageView.MessageViewCategoriesCreated.Count); + } + + [Test] + public void Constructor_MessageViewCategoryAlreadyCreated_PackageManagementMessageCategoryNameCheckedToSeeIfItExists() + { + CreateCompilerMessageView(); + fakeCompilerMessageView.GetExistingReturnValue = new FakeMessageCategoryView(); + CreateView(fakeCompilerMessageView); + + string expectedCategryName = PackageManagementOutputMessagesView.CategoryName; + string actualCategoryName = fakeCompilerMessageView.CategoryNamePassedToCategoryExists; + + Assert.AreEqual(expectedCategryName, actualCategoryName); + } + + [Test] + public void Log_InfoMessageUsingFormatStringPassed_FullyFormattedStringAddedToMessageViewCategory() + { + CreateView(); + + view.Log(MessageLevel.Info, "Test {0}", 1); + + Assert.AreEqual("Test 1", fakeMessageCategoryView.FirstLineAppended); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs index 7d5f7d9f25..3f14eea0ff 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs @@ -24,6 +24,7 @@ namespace PackageManagement.Tests FakePackageManagementProjectService fakeProjectService; TestableProject testProject; InstallPackageHelper installPackageHelper; + FakePackageManagementOutputMessagesView fakeOutputMessagesView; void CreatePackageSources() { @@ -42,12 +43,14 @@ namespace PackageManagement.Tests fakePackageRepositoryFactory = new FakePackageRepositoryFactory(); fakePackageManagerFactory = new FakePackageManagerFactory(); fakeProjectService = new FakePackageManagementProjectService(); + fakeOutputMessagesView = new FakePackageManagementOutputMessagesView(); fakeProjectService.CurrentProject = testProject; packageManagementService = new PackageManagementService(options, fakePackageRepositoryFactory, fakePackageManagerFactory, - fakeProjectService); + fakeProjectService, + fakeOutputMessagesView); installPackageHelper = new InstallPackageHelper(packageManagementService); } @@ -397,5 +400,73 @@ namespace PackageManagement.Tests CollectionAssert.AreEqual(installPackageHelper.PackageOperations, actualOperations); } + + [Test] + public void InstallPackage_OnePackageOperation_LoggerUsedByPackageManagerIsOutputMessagesViewLogger() + { + CreatePackageManagementService(); + installPackageHelper.AddPackageInstallOperation(); + installPackageHelper.InstallTestPackage(); + + ILogger expectedLogger = fakeOutputMessagesView; + ILogger actualLogger = fakePackageManagerFactory.FakePackageManager.Logger; + + Assert.AreEqual(expectedLogger, actualLogger); + } + + [Test] + public void InstallPackage_OnePackageOperation_LoggerUsedByPackageManagerIsConfiguredBeforeInstallPackageCalled() + { + CreatePackageManagementService(); + installPackageHelper.AddPackageInstallOperation(); + installPackageHelper.InstallTestPackage(); + + ILogger expectedLogger = fakeOutputMessagesView; + ILogger actualLogger = fakePackageManagerFactory.FakePackageManager.LoggerSetBeforeInstallPackageCalled; + + Assert.AreEqual(expectedLogger, actualLogger); + } + + [Test] + public void InstallPackage_OnePackageOperation_ProjectManagerLoggerIsOutputMessagesViewLogger() + { + CreatePackageManagementService(); + installPackageHelper.AddPackageInstallOperation(); + installPackageHelper.InstallTestPackage(); + + ILogger expectedLogger = fakeOutputMessagesView; + ILogger actualLogger = fakePackageManagerFactory.FakePackageManager.FakeProjectManager.Logger; + + Assert.AreEqual(expectedLogger, actualLogger); + } + + [Test] + public void InstallPackage_OnePackageOperation_ProjectManagerProjectSystemLoggerIsOutputMessagesViewLogger() + { + CreatePackageManagementService(); + var projectSystem = new FakeProjectSystem(); + FakeProjectManager projectManager = fakePackageManagerFactory.FakePackageManager.FakeProjectManager; + projectManager.Project = projectSystem; + installPackageHelper.AddPackageInstallOperation(); + installPackageHelper.InstallTestPackage(); + + ILogger expectedLogger = fakeOutputMessagesView; + ILogger actualLogger = projectSystem.Logger; + + Assert.AreEqual(expectedLogger, actualLogger); + } + + [Test] + public void InstallPackage_OnePackageOperation_PackageManagerFileSystemLoggerIsOutputMessagesViewLogger() + { + CreatePackageManagementService(); + installPackageHelper.AddPackageInstallOperation(); + installPackageHelper.InstallTestPackage(); + + ILogger expectedLogger = fakeOutputMessagesView; + ILogger actualLogger = fakePackageManagerFactory.FakePackageManager.FileSystem.Logger; + + Assert.AreEqual(expectedLogger, actualLogger); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs index 196527f75f..3e4c7ded25 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs @@ -439,5 +439,15 @@ namespace PackageManagement.Tests Assert.IsFalse(licenseAcceptanceService.IsAcceptLicensesCalled); } + + [Test] + public void AddPackage_CheckLoggerUsed_OutputMessagesLoggerUsedWhenResolvingPackageOperations() + { + CreateViewModel(); + viewModel.AddPackage(); + + ILogger expectedLogger = packageManagementService.FakeOutputMessagesView; + Assert.AreEqual(expectedLogger, viewModel.LoggerUsedWhenCreatingPackageResolver); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs index bbe25c0997..7acaf6816c 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs @@ -152,8 +152,6 @@ namespace PackageManagement.Tests return new PackageOperation(package, PackageAction.Install); } - - [Test] public void ProjectManager_InstanceCreated_SourceRepositoryIsSharedRepositoryPassedToPackageManager() {