From 2ce1a82a475d55545a7ec23ec7e4b820da5ab941 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Wed, 11 Jun 2014 22:55:10 +0100 Subject: [PATCH] Log messages in Package Management Console. The Package Management Console now shows messages logged during the execution of the install, uninstall or update cmdlets. The messages logged are the same ones that Visual Studio shows in its console. --- .../Project/Src/InstallPackageCmdlet.cs | 4 +- .../Project/Src/PackageManagementCmdlet.cs | 7 +- .../Project/Src/UninstallPackageCmdlet.cs | 4 +- .../Project/Src/UpdatePackageCmdlet.cs | 4 +- .../Test/Src/InstallPackageCmdletTests.cs | 14 +++ .../Test/Src/UninstallPackageCmdletTests.cs | 16 +++- .../Test/Src/UpdatePackageCmdletTests.cs | 14 +++ .../Project/PackageManagement.csproj | 3 + .../Project/Src/Scripting/ICmdletLogger.cs | 31 +++++++ .../IPackageManagementConsoleHost.cs | 1 + .../Scripting/PackageManagementConsoleHost.cs | 5 ++ .../PackageManagementConsoleHostLogger.cs | 75 ++++++++++++++++ .../Scripting/PowerShellMissingConsoleHost.cs | 5 ++ .../Test/PackageManagement.Tests.csproj | 2 + .../Test/Src/Helpers/FakeCmdletLogger.cs | 55 ++++++++++++ .../FakePackageManagementConsoleHost.cs | 16 ++++ ...PackageManagementConsoleHostLoggerTests.cs | 85 +++++++++++++++++++ 17 files changed, 336 insertions(+), 5 deletions(-) create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ICmdletLogger.cs create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHostLogger.cs create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeCmdletLogger.cs create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostLoggerTests.cs diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs index ac57cae245..93dab21b5e 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs @@ -66,7 +66,9 @@ namespace ICSharpCode.PackageManagement.Cmdlets { ThrowErrorIfProjectNotOpen(); using (IConsoleHostFileConflictResolver resolver = CreateFileConflictResolver()) { - InstallPackage(); + using (IDisposable logger = ConsoleHost.CreateLogger(this)) { + InstallPackage(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/PackageManagementCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/PackageManagementCmdlet.cs index 8681445d15..32eba1779e 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/PackageManagementCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/PackageManagementCmdlet.cs @@ -25,7 +25,7 @@ using NuGet; namespace ICSharpCode.PackageManagement.Cmdlets { - public abstract class PackageManagementCmdlet : PSCmdlet, ITerminatingCmdlet, IPackageScriptSession, IPackageScriptRunner + public abstract class PackageManagementCmdlet : PSCmdlet, ITerminatingCmdlet, IPackageScriptSession, IPackageScriptRunner, ICmdletLogger { IPackageManagementConsoleHost consoleHost; ICmdletTerminatingError terminatingError; @@ -114,5 +114,10 @@ namespace ICSharpCode.PackageManagement.Cmdlets script.Run(this); } } + + void ICmdletLogger.WriteLine(string message) + { + Host.UI.WriteLine(message); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UninstallPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UninstallPackageCmdlet.cs index 513cfc8be7..1584992b0e 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UninstallPackageCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UninstallPackageCmdlet.cs @@ -59,7 +59,9 @@ namespace ICSharpCode.PackageManagement.Cmdlets protected override void ProcessRecord() { ThrowErrorIfProjectNotOpen(); - UninstallPackage(); + using (IDisposable logger = ConsoleHost.CreateLogger(this)) { + UninstallPackage(); + } } void UninstallPackage() diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs index 91aeb5abc6..4c920e79ef 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs @@ -73,7 +73,9 @@ namespace ICSharpCode.PackageManagement.Cmdlets { ThrowErrorIfProjectNotOpen(); using (IConsoleHostFileConflictResolver resolver = CreateFileConflictResolver()) { - RunUpdate(); + using (IDisposable logger = ConsoleHost.CreateLogger(this)) { + RunUpdate(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs index dfacfdab29..8dbbe66d67 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs @@ -321,5 +321,19 @@ namespace PackageManagement.Cmdlets.Tests operationAwareRepository.AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Install, "Test"); } + + [Test] + public void ProcessRecord_PackageIdSpecified_ConsoleHostLoggerIsDisposed() + { + CreateCmdletWithoutActiveProject(); + AddDefaultProjectToConsoleHost(); + AddPackageSourceToConsoleHost(); + SetIdParameter("Test"); + + RunCmdlet(); + + fakeConsoleHost.AssertLoggerIsDisposed(); + Assert.AreEqual(cmdlet, fakeConsoleHost.CmdletLoggerUsedToCreateLogger); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UninstallPackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UninstallPackageCmdletTests.cs index 840d132397..2ff8092318 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UninstallPackageCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UninstallPackageCmdletTests.cs @@ -237,8 +237,22 @@ namespace PackageManagement.Cmdlets.Tests RunCmdlet(); IPackageScriptRunner scriptRunner = uninstallPackageAction.PackageScriptRunner; - + Assert.AreEqual(cmdlet, scriptRunner); } + + [Test] + public void ProcessRecord_PackageIdSpecified_ConsoleHostLoggerIsDisposed() + { + CreateCmdletWithoutActiveProject(); + AddDefaultProjectToConsoleHost(); + AddPackageSourceToConsoleHost(); + SetIdParameter("Test"); + + RunCmdlet(); + + fakeConsoleHost.AssertLoggerIsDisposed(); + Assert.AreEqual(cmdlet, fakeConsoleHost.CmdletLoggerUsedToCreateLogger); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs index 59cdc7d7fc..e683100c35 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs @@ -832,5 +832,19 @@ namespace PackageManagement.Cmdlets.Tests operationAwareRepository.AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Update, "Test2"); } + + [Test] + public void ProcessRecord_PackageIdSpecified_ConsoleHostLoggerIsDisposed() + { + CreateCmdletWithoutActiveProject(); + AddDefaultProjectToConsoleHost(); + AddPackageSourceToConsoleHost(); + SetIdParameter("Test"); + + RunCmdlet(); + + fakeConsoleHost.AssertLoggerIsDisposed(); + Assert.AreEqual(cmdlet, fakeConsoleHost.CmdletLoggerUsedToCreateLogger); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index cdb4f112ec..7875954521 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -58,6 +58,7 @@ 3.5 + 4.0 @@ -243,6 +244,7 @@ + @@ -250,6 +252,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ICmdletLogger.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ICmdletLogger.cs new file mode 100644 index 0000000000..f557d7c7be --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ICmdletLogger.cs @@ -0,0 +1,31 @@ +// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using System.Management.Automation; + +namespace ICSharpCode.PackageManagement.Scripting +{ + public interface ICmdletLogger + { + void WriteError(ErrorRecord error); + void WriteLine(string message); + void WriteVerbose(string message); + void WriteWarning(string message); + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs index 0695932eeb..d4d4c3f7ca 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs @@ -42,6 +42,7 @@ namespace ICSharpCode.PackageManagement.Scripting void SetDefaultRunspace(); IConsoleHostFileConflictResolver CreateFileConflictResolver(FileConflictAction fileConflictAction); + IDisposable CreateLogger(ICmdletLogger logger); IPackageManagementProject GetProject(string packageSource, string projectName); IPackageManagementProject GetProject(IPackageRepository sourceRepository, string projectName); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs index 6fec26b929..5742c26bf7 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs @@ -295,5 +295,10 @@ namespace ICSharpCode.PackageManagement.Scripting { return new ConsoleHostFileConflictResolver(packageEvents, fileConflictAction); } + + public IDisposable CreateLogger(ICmdletLogger logger) + { + return new PackageManagementConsoleHostLogger(logger, packageEvents); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHostLogger.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHostLogger.cs new file mode 100644 index 0000000000..dc07b3357b --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHostLogger.cs @@ -0,0 +1,75 @@ +// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using System.Management.Automation; +using NuGet; + +namespace ICSharpCode.PackageManagement.Scripting +{ + public class PackageManagementConsoleHostLogger : IDisposable + { + ICmdletLogger logger; + IPackageManagementEvents packageEvents; + + public PackageManagementConsoleHostLogger(ICmdletLogger logger, IPackageManagementEvents packageEvents) + { + this.logger = logger; + this.packageEvents = packageEvents; + + packageEvents.PackageOperationMessageLogged += PackageOperationMessageLogged; + } + + void PackageOperationMessageLogged(object sender, PackageOperationMessageLoggedEventArgs e) + { + Log(e.Message.Level, e.Message.ToString()); + } + + void Log(MessageLevel level, string message) + { + switch (level) { + case MessageLevel.Debug: + logger.WriteVerbose(message); + break; + case MessageLevel.Warning: + logger.WriteWarning(message); + break; + case MessageLevel.Error: + logger.WriteError(CreateErrorRecord(message)); + break; + default: + logger.WriteLine(message); + break; + } + } + + ErrorRecord CreateErrorRecord(string message) + { + return new ErrorRecord( + new ApplicationException(message), + "PackageManagementError", + ErrorCategory.NotSpecified, + null); + } + + public void Dispose() + { + packageEvents.PackageOperationMessageLogged -= PackageOperationMessageLogged; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs index 45beafca8d..050dca3086 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs @@ -100,5 +100,10 @@ namespace ICSharpCode.PackageManagement.Scripting { return null; } + + public IDisposable CreateLogger(ICmdletLogger logger) + { + return null; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index fb3cc11e72..0a2c80e407 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -108,6 +108,7 @@ + @@ -194,6 +195,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeCmdletLogger.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeCmdletLogger.cs new file mode 100644 index 0000000000..bf87c211c9 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeCmdletLogger.cs @@ -0,0 +1,55 @@ +// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using System.Management.Automation; +using ICSharpCode.PackageManagement.Scripting; + +namespace PackageManagement.Tests.Helpers +{ + public class FakeCmdletLogger : ICmdletLogger + { + public ErrorRecord ErrorRecordLogged; + + public void WriteError(ErrorRecord error) + { + ErrorRecordLogged = error; + } + + public string LineLogged; + + public void WriteLine(string message) + { + LineLogged = message; + } + + public string VerboseMessageLogged; + + public void WriteVerbose(string message) + { + VerboseMessageLogged = message; + } + + public string WarningMessageLogged; + + public void WriteWarning(string message) + { + WarningMessageLogged = message; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs index caad95b80b..db0f583351 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs @@ -169,5 +169,21 @@ namespace PackageManagement.Tests.Helpers { FakeFileConflictResolver.AssertWasCalled(resolver => resolver.Dispose()); } + + public IDisposable FakeConsoleHostLogger = + MockRepository.GenerateStub(); + + public void AssertLoggerIsDisposed() + { + FakeConsoleHostLogger.AssertWasCalled(logger => logger.Dispose()); + } + + public ICmdletLogger CmdletLoggerUsedToCreateLogger; + + public IDisposable CreateLogger(ICmdletLogger logger) + { + CmdletLoggerUsedToCreateLogger = logger; + return FakeConsoleHostLogger; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostLoggerTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostLoggerTests.cs new file mode 100644 index 0000000000..d1e6ad884f --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostLoggerTests.cs @@ -0,0 +1,85 @@ +// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using System.Management.Automation; +using ICSharpCode.PackageManagement; +using ICSharpCode.PackageManagement.Scripting; +using NuGet; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests.Scripting +{ + [TestFixture] + public class PackageManagementConsoleHostLoggerTests + { + FakeCmdletLogger cmdletLogger; + PackageManagementConsoleHostLogger consoleHostLogger; + PackageManagementEvents packageEvents; + + void CreateConsoleHostLogger() + { + cmdletLogger = new FakeCmdletLogger(); + packageEvents = new PackageManagementEvents(); + consoleHostLogger = new PackageManagementConsoleHostLogger(cmdletLogger, packageEvents); + } + + [Test] + public void OnPackageOperationMessageLogged_DebugMessage_WrittenAsVerboseMessageToCmdlet() + { + CreateConsoleHostLogger(); + + packageEvents.OnPackageOperationMessageLogged(MessageLevel.Debug, "test"); + + Assert.AreEqual("test", cmdletLogger.VerboseMessageLogged); + } + + [Test] + public void OnPackageOperationMessageLogged_WarningMessage_WrittenAsWarningMessageToCmdlet() + { + CreateConsoleHostLogger(); + + packageEvents.OnPackageOperationMessageLogged(MessageLevel.Warning, "test"); + + Assert.AreEqual("test", cmdletLogger.WarningMessageLogged); + } + + [Test] + public void OnPackageOperationMessageLogged_InfoMessage_WrittenAsLineToCmdlet() + { + CreateConsoleHostLogger(); + + packageEvents.OnPackageOperationMessageLogged(MessageLevel.Info, "test"); + + Assert.AreEqual("test", cmdletLogger.LineLogged); + } + + [Test] + public void OnPackageOperationMessageLogged_ErrorMessage_WrittenAsErrorRecordCmdlet() + { + CreateConsoleHostLogger(); + + packageEvents.OnPackageOperationMessageLogged(MessageLevel.Error, "test"); + + Assert.IsNotNull(cmdletLogger.ErrorRecordLogged); + Assert.AreEqual("test", cmdletLogger.ErrorRecordLogged.Exception.Message); + Assert.AreEqual(ErrorCategory.NotSpecified, cmdletLogger.ErrorRecordLogged.CategoryInfo.Category); + } + } +}