diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index 0a80b8c981..c0ec29838e 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -67,9 +67,13 @@ + + + + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceCommand.cs b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceCommand.cs index fa7005bf00..63c7a44667 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceCommand.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceCommand.cs @@ -10,14 +10,32 @@ namespace ICSharpCode.PackageManagement { public class AddPackageReferenceCommand : AbstractMenuCommand { + IPackageManagementOutputMessagesView outputMessagesView; + + public AddPackageReferenceCommand() + : this(PackageManagementServices.OutputMessagesView) + { + } + + public AddPackageReferenceCommand(IPackageManagementOutputMessagesView outputMessagesView) + { + this.outputMessagesView = outputMessagesView; + } + public override void Run() { - var view = new AddPackageReferenceView(); - view.Owner = WorkbenchSingleton.MainWindow; - view.ShowDialog(); + outputMessagesView.Clear(); - var viewModel = view.MainPanel.DataContext as AddPackageReferenceViewModel; - viewModel.Dispose(); + using (IAddPackageReferenceView view = CreateAddPackageReferenceView()) { + view.ShowDialog(); + } + } + + protected virtual IAddPackageReferenceView CreateAddPackageReferenceView() + { + return new AddPackageReferenceView() { + Owner = WorkbenchSingleton.MainWindow + }; } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml.cs b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml.cs index 2d13ca4f8b..2a7fba3128 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml.cs @@ -6,11 +6,17 @@ using System.Windows; namespace ICSharpCode.PackageManagement { - public partial class AddPackageReferenceView : Window + public partial class AddPackageReferenceView : Window, IAddPackageReferenceView { public AddPackageReferenceView() { InitializeComponent(); } + + public void Dispose() + { + var viewModel = MainPanel.DataContext as AddPackageReferenceViewModel; + viewModel.Dispose(); + } } } \ No newline at end of file diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs index 2f94bf12cd..064ea1879c 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs @@ -24,7 +24,6 @@ namespace ICSharpCode.PackageManagement ITaskFactory taskFactory) { this.packageManagementService = packageManagementService; - this.packageManagementService.OutputMessagesView.Clear(); this.packageManagementEvents = packageManagementEvents; this.licenseAcceptanceService = licenseAcceptanceService; diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs index fffe31d38d..778197c1f1 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs @@ -46,10 +46,6 @@ namespace ICSharpCode.PackageManagement.Design public FakePackageManagementOutputMessagesView FakeOutputMessagesView = new FakePackageManagementOutputMessagesView(); - public IPackageManagementOutputMessagesView OutputMessagesView { - get { return FakeOutputMessagesView; } - } - public FakeProjectManager FakeProjectManagerToReturnFromCreateProjectManager = new FakeProjectManager(); public IPackageRepository PackageRepositoryPassedToCreateProjectManager; public MSBuildBasedProject ProjectPassedToCreateProjectManager; diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IAddPackageReferenceView.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IAddPackageReferenceView.cs new file mode 100644 index 0000000000..091a983805 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IAddPackageReferenceView.cs @@ -0,0 +1,12 @@ +// 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 IAddPackageReferenceView : IDisposable + { + bool? ShowDialog(); + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementEvents.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementEvents.cs index fcd419fe51..68a27bb131 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementEvents.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementEvents.cs @@ -14,11 +14,13 @@ namespace ICSharpCode.PackageManagement event EventHandler PackageOperationError; event EventHandler ParentPackageInstalled; event EventHandler ParentPackageUninstalled; + event EventHandler PackageOperationMessageLogged; void OnPackageOperationsStarting(); void OnPackageOperationError(Exception ex); bool OnAcceptLicenses(IEnumerable packages); void OnParentPackageInstalled(IPackage package); void OnParentPackageUninstalled(IPackage package); + void OnPackageOperationMessageLogged(MessageLevel level, string message, params object[] args); } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs index 284e27d31c..5c9f106996 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs @@ -20,7 +20,5 @@ namespace ICSharpCode.PackageManagement InstallPackageAction CreateInstallPackageAction(); UninstallPackageAction CreateUninstallPackageAction(); UpdatePackageAction CreateUpdatePackageAction(); - - IPackageManagementOutputMessagesView OutputMessagesView { get; } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementEvents.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementEvents.cs index 1ced349331..1ba936883d 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementEvents.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementEvents.cs @@ -56,5 +56,15 @@ namespace ICSharpCode.PackageManagement ParentPackageUninstalled(this, new ParentPackageOperationEventArgs(package)); } } + + public event EventHandler PackageOperationMessageLogged; + + public void OnPackageOperationMessageLogged(MessageLevel level, string message, params object[] args) + { + if (PackageOperationMessageLogged != null) { + var eventArgs = new PackageOperationMessageLoggedEventArgs(level, message, args); + PackageOperationMessageLogged(this, eventArgs); + } + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementLogger.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementLogger.cs new file mode 100644 index 0000000000..b9e050832d --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementLogger.cs @@ -0,0 +1,23 @@ +// 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 PackageManagementLogger : ILogger + { + IPackageManagementEvents packageManagementEvents; + + public PackageManagementLogger(IPackageManagementEvents packageManagementEvents) + { + this.packageManagementEvents = packageManagementEvents; + } + + public void Log(MessageLevel level, string message, params object[] args) + { + packageManagementEvents.OnPackageOperationMessageLogged(level, message, args); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOutputMessagesView.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOutputMessagesView.cs index 7c1ddd0841..94cbfcf538 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOutputMessagesView.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOutputMessagesView.cs @@ -12,14 +12,17 @@ namespace ICSharpCode.PackageManagement IMessageViewCategory messageViewCategory; - public PackageManagementOutputMessagesView() - : this(new PackageManagementCompilerMessageView()) + public PackageManagementOutputMessagesView(IPackageManagementEvents packageManagementEvents) + : this(new PackageManagementCompilerMessageView(), packageManagementEvents) { } - public PackageManagementOutputMessagesView(ICompilerMessageView compilerMessageView) + public PackageManagementOutputMessagesView( + ICompilerMessageView compilerMessageView, + IPackageManagementEvents packageManagementEvents) { CreatePackageManagementMessageCategoryIfNoneExists(compilerMessageView); + packageManagementEvents.PackageOperationMessageLogged += PackageOperationMessageLogged; } void CreatePackageManagementMessageCategoryIfNoneExists(ICompilerMessageView compilerMessageView) @@ -35,6 +38,12 @@ namespace ICSharpCode.PackageManagement messageViewCategory = compilerMessageView.Create(CategoryName, "Packages"); } + void PackageOperationMessageLogged(object sender, PackageOperationMessageLoggedEventArgs e) + { + string formattedMessage = e.Message.ToString(); + messageViewCategory.AppendLine(formattedMessage); + } + public void Clear() { messageViewCategory.Clear(); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs index 0fda395567..20b182c803 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs @@ -12,7 +12,6 @@ namespace ICSharpCode.PackageManagement { public class PackageManagementService : IPackageManagementService { - IPackageManagementOutputMessagesView outputMessagesView; IRegisteredPackageRepositories registeredPackageRepositories; IPackageManagerFactory packageManagerFactory; IPackageManagementProjectService projectService; @@ -23,26 +22,24 @@ namespace ICSharpCode.PackageManagement IPackageRepositoryCache packageRepositoryCache, IPackageManagerFactory packageManagerFactory, IPackageManagementEvents packageManagementEvents, - IPackageManagementProjectService projectService, - IPackageManagementOutputMessagesView outputMessagesView) + IPackageManagementProjectService projectService) : this( new RegisteredPackageRepositories(packageRepositoryCache, options), packageManagerFactory, packageManagementEvents, - projectService, - outputMessagesView) + projectService) { } public PackageManagementService( IRegisteredPackageRepositories registeredPackageRepositories, - IPackageManagementEvents packageManagementEvents) + IPackageManagementEvents packageManagementEvents, + IPackageManagementOutputMessagesView outputMessagesView) : this( registeredPackageRepositories, new SharpDevelopPackageManagerFactory(), packageManagementEvents, - new PackageManagementProjectService(), - new PackageManagementOutputMessagesView()) + new PackageManagementProjectService()) { } @@ -50,18 +47,12 @@ namespace ICSharpCode.PackageManagement IRegisteredPackageRepositories registeredPackageRepositories, IPackageManagerFactory packageManagerFactory, IPackageManagementEvents packageManagementEvents, - IPackageManagementProjectService projectService, - IPackageManagementOutputMessagesView outputMessagesView) + IPackageManagementProjectService projectService) { this.registeredPackageRepositories = registeredPackageRepositories; this.packageManagementEvents = packageManagementEvents; this.packageManagerFactory = packageManagerFactory; this.projectService = projectService; - this.outputMessagesView = outputMessagesView; - } - - public IPackageManagementOutputMessagesView OutputMessagesView { - get { return outputMessagesView; } } IPackageRepository ActivePackageRepository { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs index 17339fb2e0..50785b0c0c 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs @@ -15,12 +15,14 @@ namespace ICSharpCode.PackageManagement static readonly PackageManagementEvents packageManagementEvents = new PackageManagementEvents(); static readonly PackageManagementProjectService projectService = new PackageManagementProjectService(); static readonly ProjectBrowserRefresher projectBrowserRefresher; + static readonly PackageManagementOutputMessagesView outputMessagesView; static PackageManagementServices() { options = new PackageManagementOptions(); registeredPackageRepositories = new RegisteredPackageRepositories(options); - packageManagementService = new PackageManagementService(registeredPackageRepositories, packageManagementEvents); + outputMessagesView = new PackageManagementOutputMessagesView(packageManagementEvents); + packageManagementService = new PackageManagementService(registeredPackageRepositories, packageManagementEvents, outputMessagesView); projectBrowserRefresher = new ProjectBrowserRefresher(projectService, packageManagementEvents); } @@ -43,5 +45,9 @@ namespace ICSharpCode.PackageManagement public static IPackageManagementEvents PackageManagementEvents { get { return packageManagementEvents; } } + + public static IPackageManagementOutputMessagesView OutputMessagesView { + get { return outputMessagesView; } + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationMessage.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationMessage.cs new file mode 100644 index 0000000000..db3f787395 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationMessage.cs @@ -0,0 +1,31 @@ +// 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 PackageOperationMessage + { + string message; + object[] args; + + public PackageOperationMessage( + MessageLevel level, + string message, + params object[] args) + { + this.Level = level; + this.message = message; + this.args = args; + } + + public MessageLevel Level { get; private set; } + + public override string ToString() + { + return String.Format(message, args); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationMessageLoggedEventArgs.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationMessageLoggedEventArgs.cs new file mode 100644 index 0000000000..2193116306 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationMessageLoggedEventArgs.cs @@ -0,0 +1,21 @@ +// 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 PackageOperationMessageLoggedEventArgs : EventArgs + { + public PackageOperationMessageLoggedEventArgs( + MessageLevel level, + string message, + params object[] args) + { + this.Message = new PackageOperationMessage(level, message, args); + } + + public PackageOperationMessage Message { get; private set; } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs index df7578fa06..92f6833a93 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs @@ -20,17 +20,20 @@ namespace ICSharpCode.PackageManagement IEnumerable packageOperations = new PackageOperation[0]; IPackageRepository sourceRepository; bool? hasDependencies; + ILogger logger; public PackageViewModel( IPackage package, IPackageRepository sourceRepository, IPackageManagementService packageManagementService, - IPackageManagementEvents packageManagementEvents) + IPackageManagementEvents packageManagementEvents, + ILogger logger) { this.package = package; this.sourceRepository = sourceRepository; this.packageManagementService = packageManagementService; this.packageManagementEvents = packageManagementEvents; + this.logger = logger; CreateCommands(); } @@ -167,7 +170,7 @@ namespace ICSharpCode.PackageManagement void Log(string message) { - Logger.Log(MessageLevel.Info, message); + logger.Log(MessageLevel.Info, message); } string GetFormattedStartPackageOperationMessage(string format) @@ -181,10 +184,6 @@ namespace ICSharpCode.PackageManagement return String.Format("------- {0} -------", message); } - ILogger Logger { - get { return packageManagementService.OutputMessagesView; } - } - protected virtual string AddingPackageMessageFormat { get { return "Installing...{0}"; } } @@ -215,7 +214,7 @@ namespace ICSharpCode.PackageManagement ISharpDevelopPackageManager CreatePackageManagerForActiveProject() { ISharpDevelopPackageManager packageManager = packageManagementService.CreatePackageManagerForActiveProject(); - packageManager.Logger = Logger; + packageManager.Logger = logger; return packageManager; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs index be6c51248b..5bd96a59ac 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs @@ -24,6 +24,7 @@ namespace ICSharpCode.PackageManagement this.RegisteredPackageRepositories = registeredPackageRepositories; this.PackageManagementService = packageManagementService; this.PackageManagementEvents = packageManagementEvents; + this.Logger = new PackageManagementLogger(packageManagementEvents); } public virtual PackageViewModel CreatePackageViewModel(IPackage package) @@ -32,11 +33,13 @@ namespace ICSharpCode.PackageManagement package, RegisteredPackageRepositories.ActiveRepository, PackageManagementService, - PackageManagementEvents); + PackageManagementEvents, + Logger); } public IRegisteredPackageRepositories RegisteredPackageRepositories { get; private set; } public IPackageManagementService PackageManagementService { get; private set; } public IPackageManagementEvents PackageManagementEvents { get; private set; } + public ILogger Logger { get; private set; } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs index b81f25d4c7..8af6b05726 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs @@ -60,7 +60,7 @@ namespace ICSharpCode.PackageManagement void GetLoggerIfMissing() { if (Logger == null) { - Logger = packageManagementService.OutputMessagesView; + Logger = new PackageManagementLogger(packageManagementEvents); } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs index 4c28b30331..2959d0e49a 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs @@ -15,8 +15,9 @@ namespace ICSharpCode.PackageManagement IPackage package, IPackageRepository sourceRepository, IPackageManagementService packageManagementService, - IPackageManagementEvents packageManagementEvents) - : base(package, sourceRepository, packageManagementService, packageManagementEvents) + IPackageManagementEvents packageManagementEvents, + ILogger logger) + : base(package, sourceRepository, packageManagementService, packageManagementEvents, logger) { this.packageManagementService = packageManagementService; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs index 3235e397be..471c16de83 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs @@ -19,7 +19,8 @@ namespace ICSharpCode.PackageManagement package, RegisteredPackageRepositories.ActiveRepository, PackageManagementService, - PackageManagementEvents); + PackageManagementEvents, + Logger); } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 0800f21c1c..38c9aa59b5 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -69,10 +69,15 @@ Properties\GlobalAssemblyInfo.cs + + + + + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceCommandTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceCommandTests.cs new file mode 100644 index 0000000000..22f016e06a --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceCommandTests.cs @@ -0,0 +1,51 @@ +// 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 NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests +{ + [TestFixture] + public class AddPackageReferenceCommandTests + { + TestableAddPackageReferenceCommand command; + FakeAddPackageReferenceView view; + + void CreateCommand() + { + command = new TestableAddPackageReferenceCommand(); + view = command.FakeAddPackageReferenceView; + } + + [Test] + public void Run_CommandExecuted_AddPackageReferenceViewIsDisplayed() + { + CreateCommand(); + command.Run(); + + Assert.IsTrue(view.IsShowDialogCalled); + } + + [Test] + public void Run_CommandExecuted_AddPackageReferenceViewIsDisposed() + { + CreateCommand(); + command.Run(); + + Assert.IsTrue(view.IsDisposeCalled); + } + + [Test] + public void Run_CommandExecuted_OutputMessagesViewIsCleared() + { + CreateCommand(); + command.Run(); + + bool result = command.FakeOutputMessagesView.IsClearCalled; + + Assert.IsTrue(result); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs index 6ef1fb0384..35ec785e8e 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs @@ -142,14 +142,6 @@ namespace PackageManagement.Tests PackageCollectionAssert.AreEqual(expectedPackages, viewModel.UpdatedPackagesViewModel.PackageViewModels); } - [Test] - public void Constructor_InstanceCreated_OutputMessagesCleared() - { - CreateViewModel(); - - Assert.IsTrue(fakePackageManagementService.FakeOutputMessagesView.IsClearCalled); - } - [Test] public void RecentPackagesViewModel_RecentRepositoryHasOnePackage_HasOnePackageViewModel() { diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeAddPackageReferenceView.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeAddPackageReferenceView.cs new file mode 100644 index 0000000000..bb89278216 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeAddPackageReferenceView.cs @@ -0,0 +1,26 @@ +// 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; + +namespace PackageManagement.Tests.Helpers +{ + public class FakeAddPackageReferenceView : IAddPackageReferenceView + { + public bool IsShowDialogCalled; + + public bool? ShowDialog() + { + IsShowDialogCalled = true; + return true; + } + + public bool IsDisposeCalled; + + public void Dispose() + { + IsDisposeCalled = true; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementEvents.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementEvents.cs index 34bf87eddd..b0244949aa 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementEvents.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementEvents.cs @@ -16,6 +16,7 @@ namespace PackageManagement.Tests.Helpers public event EventHandler PackageOperationError; public event EventHandler ParentPackageInstalled; public event EventHandler ParentPackageUninstalled; + public event EventHandler PackageOperationMessageLogged; #pragma warning restore 0067 public bool IsOnPackageOperationsStartingCalled; @@ -56,5 +57,14 @@ namespace PackageManagement.Tests.Helpers { PackagePassedToOnParentPackageUninstalled = package; } + + public MessageLevel MessageLevelPassedToOnPackageOperationMessageLogged; + public string FormattedStringPassedToOnPackageOperationMessageLogged; + + public void OnPackageOperationMessageLogged(MessageLevel level, string message, params object[] args) + { + MessageLevelPassedToOnPackageOperationMessageLogged = level; + FormattedStringPassedToOnPackageOperationMessageLogged = String.Format(message, args); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageViewModelFactory.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageViewModelFactory.cs index 9ecfce4986..93810fb9d1 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageViewModelFactory.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageViewModelFactory.cs @@ -20,7 +20,8 @@ namespace PackageManagement.Tests.Helpers package, FakeRegisteredPackageRepositories.FakeActiveRepository, FakePackageManagementService, - FakePackageManagementEvents); + FakePackageManagementEvents, + FakePackageManagementService.FakeOutputMessagesView); } public IRegisteredPackageRepositories RegisteredPackageRepositories { diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableAddPackageReferenceCommand.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableAddPackageReferenceCommand.cs new file mode 100644 index 0000000000..515ac0261f --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableAddPackageReferenceCommand.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.Windows; +using ICSharpCode.PackageManagement; +using ICSharpCode.PackageManagement.Design; + +namespace PackageManagement.Tests.Helpers +{ + public class TestableAddPackageReferenceCommand : AddPackageReferenceCommand + { + public FakePackageManagementOutputMessagesView FakeOutputMessagesView; + public FakeAddPackageReferenceView FakeAddPackageReferenceView = new FakeAddPackageReferenceView(); + + public TestableAddPackageReferenceCommand() + : this(new FakePackageManagementOutputMessagesView()) + { + } + + public TestableAddPackageReferenceCommand(FakePackageManagementOutputMessagesView view) + : base(view) + { + this.FakeOutputMessagesView = view; + } + + protected override IAddPackageReferenceView CreateAddPackageReferenceView() + { + return FakeAddPackageReferenceView; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs index 352872a760..68ad8b85cc 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs @@ -22,7 +22,8 @@ namespace PackageManagement.Tests.Helpers new FakePackage(), new FakePackageRepository(), packageManagementService, - new FakePackageManagementEvents()) + new FakePackageManagementEvents(), + packageManagementService.FakeOutputMessagesView) { } @@ -30,12 +31,14 @@ namespace PackageManagement.Tests.Helpers FakePackage package, FakePackageRepository sourceRepository, FakePackageManagementService packageManagementService, - FakePackageManagementEvents packageManagementEvents) + FakePackageManagementEvents packageManagementEvents, + FakePackageManagementOutputMessagesView logger) : base( package, sourceRepository, packageManagementService, - packageManagementEvents) + packageManagementEvents, + logger) { this.FakePackage = package; this.FakePackageManagementService = packageManagementService; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs index 93177cce89..eef49273e1 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs @@ -42,7 +42,8 @@ namespace PackageManagement.Tests.Helpers package, sourceRepository, packageManagementService, - packageManagementEvents) + packageManagementEvents, + packageManagementService.FakeOutputMessagesView) { this.FakePackage = package; this.FakePackageManagementService = packageManagementService; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementEventsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementEventsTests.cs index 28573639ea..7a6b77252b 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementEventsTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementEventsTests.cs @@ -216,5 +216,52 @@ namespace PackageManagement.Tests var package = new FakePackage("Test"); Assert.DoesNotThrow(() => events.OnParentPackageUninstalled(package)); } + + [Test] + public void OnPackageOperationMessageLogged_OneEventSubscriber_SenderIsPackageManagementEvents() + { + CreateEvents(); + object eventSender = null; + events.PackageOperationMessageLogged += (sender, e) => eventSender = sender; + + events.OnPackageOperationMessageLogged(MessageLevel.Info, "Test"); + + Assert.AreEqual(events, eventSender); + } + + [Test] + public void OnPackageOperationMessageLogged_NoEventSubscribers_NullReferenceExceptionIsNotThrown() + { + CreateEvents(); + Assert.DoesNotThrow(() => events.OnPackageOperationMessageLogged(MessageLevel.Info, "Test")); + } + + [Test] + public void OnPackageOperationMessageLogged_InfoMessageLoggedWithOneEventSubscriber_EventArgsHasInfoMessageLevel() + { + CreateEvents(); + PackageOperationMessageLoggedEventArgs eventArgs = null; + events.PackageOperationMessageLogged += (sender, e) => eventArgs = e; + + events.OnPackageOperationMessageLogged(MessageLevel.Info, "Test"); + + Assert.AreEqual(MessageLevel.Info, eventArgs.Message.Level); + } + + [Test] + public void OnPackageOperationMessageLogged_FormattedInfoMessageLoggedWithOneEventSubscriber_EventArgsHasFormattedMessage() + { + CreateEvents(); + PackageOperationMessageLoggedEventArgs eventArgs = null; + events.PackageOperationMessageLogged += (sender, e) => eventArgs = e; + + string format = "Test {0}"; + events.OnPackageOperationMessageLogged(MessageLevel.Info, format, "B"); + + string message = eventArgs.Message.ToString(); + + string expectedMessage = "Test B"; + Assert.AreEqual(expectedMessage, message); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementLoggerTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementLoggerTests.cs new file mode 100644 index 0000000000..74f33af0b0 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementLoggerTests.cs @@ -0,0 +1,47 @@ +// 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 PackageManagementLoggerTests + { + FakePackageManagementEvents fakePackageManagementEvents; + PackageManagementLogger logger; + + void CreateLogger() + { + fakePackageManagementEvents = new FakePackageManagementEvents(); + logger = new PackageManagementLogger(fakePackageManagementEvents); + } + + [Test] + public void Log_WarningMessageLogged_RaisesMessageLoggedEventWithWarningMessageLevel() + { + CreateLogger(); + + logger.Log(MessageLevel.Warning, "test"); + + Assert.AreEqual(MessageLevel.Warning, fakePackageManagementEvents.MessageLevelPassedToOnPackageOperationMessageLogged); + } + + [Test] + public void Log_FormattedInfoMessageLogged_RaisesMessageLoggedEventWithFormattedMessage() + { + CreateLogger(); + + string format = "Test {0}"; + logger.Log(MessageLevel.Info, format, "C"); + + string message = fakePackageManagementEvents.FormattedStringPassedToOnPackageOperationMessageLogged; + + Assert.AreEqual("Test C", message); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOutputMessagesViewTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOutputMessagesViewTests.cs index 129392abd9..068b4fbfb4 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOutputMessagesViewTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOutputMessagesViewTests.cs @@ -15,6 +15,7 @@ namespace PackageManagement.Tests PackageManagementOutputMessagesView view; FakeCompilerMessageView fakeCompilerMessageView; FakeMessageCategoryView fakeMessageCategoryView; + PackageManagementEvents packageManagementEvents; void CreateView() { @@ -30,7 +31,8 @@ namespace PackageManagement.Tests void CreateView(FakeCompilerMessageView fakeCompilerMessageView) { - view = new PackageManagementOutputMessagesView(fakeCompilerMessageView); + packageManagementEvents = new PackageManagementEvents(); + view = new PackageManagementOutputMessagesView(fakeCompilerMessageView, packageManagementEvents); } void LogInfoMessage(string message) @@ -100,5 +102,15 @@ namespace PackageManagement.Tests Assert.AreEqual("Test 1", fakeMessageCategoryView.FirstLineAppended); } + + [Test] + public void OnPackageOperationMessageLogged_InfoMessageUsingFormatStringPassed_FullyFormattedStringAddedToMessageViewCategory() + { + CreateView(); + + packageManagementEvents.OnPackageOperationMessageLogged(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 b0b899e01d..e01dccea05 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs @@ -23,7 +23,6 @@ namespace PackageManagement.Tests FakePackageManagerFactory fakePackageManagerFactory; FakePackageManagementProjectService fakeProjectService; TestableProject testProject; - FakePackageManagementOutputMessagesView fakeOutputMessagesView; void CreatePackageSources() { @@ -42,7 +41,6 @@ namespace PackageManagement.Tests fakeRegisteredPackageRepositories = new FakeRegisteredPackageRepositories(); fakePackageManagerFactory = new FakePackageManagerFactory(); fakeProjectService = new FakePackageManagementProjectService(); - fakeOutputMessagesView = new FakePackageManagementOutputMessagesView(); var packageManagementEvents = new FakePackageManagementEvents(); fakeProjectService.CurrentProject = testProject; @@ -51,8 +49,7 @@ namespace PackageManagement.Tests fakeRegisteredPackageRepositories, fakePackageManagerFactory, packageManagementEvents, - fakeProjectService, - fakeOutputMessagesView); + fakeProjectService); } FakePackage AddOneFakePackageToPackageRepositoryFactoryRepository(string id) diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageOperationMessageTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageOperationMessageTests.cs new file mode 100644 index 0000000000..b98bb0b89b --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageOperationMessageTests.cs @@ -0,0 +1,50 @@ +// 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; + +namespace PackageManagement.Tests +{ + [TestFixture] + public class PackageOperationMessageTests + { + [Test] + public void Level_CreateInfoMessage_CreatesMessageWithMessageLevelSetToInfo() + { + var message = new PackageOperationMessage(MessageLevel.Info, "test"); + + Assert.AreEqual(MessageLevel.Info, message.Level); + } + + [Test] + public void Level_CreateWarningMessage_CreatesMessageWithMessageLevelSetToWarning() + { + var message = new PackageOperationMessage(MessageLevel.Warning, "test"); + + Assert.AreEqual(MessageLevel.Warning, message.Level); + } + + [Test] + public void ToString_CreateWarningMessage_ReturnsMessage() + { + var message = new PackageOperationMessage(MessageLevel.Warning, "test"); + var text = message.ToString(); + + Assert.AreEqual("test", text); + } + + [Test] + public void ToString_CreateFormattedWarningMessage_ReturnsFormattedMessage() + { + string format = "Test '{0}'."; + var message = new PackageOperationMessage(MessageLevel.Warning, format, "A"); + var text = message.ToString(); + + var expectedText = "Test 'A'."; + Assert.AreEqual(expectedText, text); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs index 9410b209ae..983ba42b40 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs @@ -21,6 +21,7 @@ namespace PackageManagement.Tests ExceptionThrowingPackageManagementService exceptionThrowingPackageManagementService; FakeInstallPackageAction fakeInstallPackageTask; FakeUninstallPackageAction fakeUninstallPackageAction; + FakePackageManagementOutputMessagesView fakeLogger; void CreateViewModel() { @@ -41,6 +42,7 @@ namespace PackageManagement.Tests this.packageManagementService = packageManagementService; sourcePackageRepository = viewModel.FakeSourcePackageRepository; packageManagementEvents = viewModel.FakePackageManagementEvents; + fakeLogger = packageManagementService.FakeOutputMessagesView; fakeInstallPackageTask = packageManagementService.ActionToReturnFromCreateInstallPackageAction; fakeUninstallPackageAction = packageManagementService.ActionToReturnFromCreateUninstallPackageAction; } @@ -363,7 +365,7 @@ namespace PackageManagement.Tests viewModel.AddOneFakeInstallPackageOperationForViewModelPackage(); viewModel.AddPackage(); - ILogger expectedLogger = packageManagementService.FakeOutputMessagesView; + ILogger expectedLogger = fakeLogger; ILogger actualLogger = packageManagementService .FakePackageManagerToReturnFromCreatePackageManager .Logger; @@ -381,7 +383,7 @@ namespace PackageManagement.Tests viewModel.AddPackage(); string expectedMessage = "------- Updating...Test.Package 1.2.0.55 -------"; - string actualMessage = packageManagementService.FakeOutputMessagesView.FirstFormattedMessageLogged; + string actualMessage = fakeLogger.FirstFormattedMessageLogged; Assert.AreEqual(expectedMessage, actualMessage); } @@ -394,7 +396,7 @@ namespace PackageManagement.Tests viewModel.AddPackage(); string expectedMessage = "=============================="; - string actualMessage = packageManagementService.FakeOutputMessagesView.NextToLastFormattedMessageLogged; + string actualMessage = fakeLogger.NextToLastFormattedMessageLogged; Assert.AreEqual(expectedMessage, actualMessage); } @@ -407,7 +409,7 @@ namespace PackageManagement.Tests viewModel.AddPackage(); string expectedMessage = String.Empty; - string actualMessage = packageManagementService.FakeOutputMessagesView.LastFormattedMessageLogged; + string actualMessage = fakeLogger.LastFormattedMessageLogged; Assert.AreEqual(expectedMessage, actualMessage); } @@ -423,7 +425,7 @@ namespace PackageManagement.Tests viewModel.RemovePackage(); string expectedMessage = "------- Removing...Test.Package 1.2.0.55 -------"; - string actualMessage = packageManagementService.FakeOutputMessagesView.FirstFormattedMessageLogged; + string actualMessage = fakeLogger.FirstFormattedMessageLogged; Assert.AreEqual(expectedMessage, actualMessage); } @@ -436,7 +438,7 @@ namespace PackageManagement.Tests viewModel.RemovePackage(); string expectedMessage = "=============================="; - string actualMessage = packageManagementService.FakeOutputMessagesView.NextToLastFormattedMessageLogged; + string actualMessage = fakeLogger.NextToLastFormattedMessageLogged; Assert.AreEqual(expectedMessage, actualMessage); } @@ -448,7 +450,7 @@ namespace PackageManagement.Tests viewModel.RemovePackage(); string expectedMessage = String.Empty; - string actualMessage = packageManagementService.FakeOutputMessagesView.LastFormattedMessageLogged; + string actualMessage = fakeLogger.LastFormattedMessageLogged; Assert.AreEqual(expectedMessage, actualMessage); } @@ -484,7 +486,7 @@ namespace PackageManagement.Tests exceptionThrowingPackageManagementService.ExeptionToThrowWhenCreateInstallPackageTaskCalled = ex; viewModel.AddPackage(); - string actualMessage = packageManagementService.FakeOutputMessagesView.SecondFormattedMessageLogged; + string actualMessage = fakeLogger.SecondFormattedMessageLogged; bool containsExceptionErrorMessage = actualMessage.Contains("Exception error message"); Assert.IsTrue(containsExceptionErrorMessage, actualMessage); @@ -518,7 +520,7 @@ namespace PackageManagement.Tests exceptionThrowingPackageManagementService.ExeptionToThrowWhenCreateUninstallPackageActionCalled = ex; viewModel.RemovePackage(); - string actualMessage = packageManagementService.FakeOutputMessagesView.SecondFormattedMessageLogged; + string actualMessage = fakeLogger.SecondFormattedMessageLogged; bool containsExceptionErrorMessage = actualMessage.Contains("Exception error message"); Assert.IsTrue(containsExceptionErrorMessage, actualMessage); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs index 0bca294535..e75492eef7 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs @@ -2,6 +2,7 @@ // 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; using NUnit.Framework; @@ -33,15 +34,15 @@ namespace PackageManagement.Tests } [Test] - public void Execute_LoggerIsNull_LoggerUsedByPackageManagerIsOutputMessagesViewLogger() + public void Execute_LoggerIsNull_LoggerUsedByPackageManagerIsPackageManagementLogger() { CreateAction(); action.Execute(); - ILogger expectedLogger = fakeOutputMessagesView; ILogger actualLogger = fakePackageManager.Logger; + Type expectedType = typeof(PackageManagementLogger); - Assert.AreEqual(expectedLogger, actualLogger); + Assert.IsInstanceOf(expectedType, actualLogger); } [Test]