diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs index bd37f41fb1..6a6839b22f 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs @@ -59,7 +59,7 @@ namespace Microsoft.PowerShell.Commands Object inpObj = InputObject.BaseObject; var markdownInfo = inpObj as MarkdownInfo; - if (markdownInfo != null) + if (markdownInfo == null) { var errorRecord = new ErrorRecord( new ArgumentException(), @@ -83,6 +83,12 @@ namespace Microsoft.PowerShell.Commands writer.Write(html); } + if(OutputBypassTestHook) + { + WriteObject(html); + return; + } + ProcessStartInfo startInfo = new ProcessStartInfo(); #if UNIX @@ -112,6 +118,12 @@ namespace Microsoft.PowerShell.Commands if(!String.IsNullOrEmpty(vt100String)) { + if(OutputBypassTestHook) + { + WriteObject(vt100String); + return; + } + if(stepPipe != null) { stepPipe.Process(vt100String); @@ -132,6 +144,7 @@ namespace Microsoft.PowerShell.Commands } /// + /// Override EndProcessing. /// protected override void EndProcessing() { @@ -140,5 +153,16 @@ namespace Microsoft.PowerShell.Commands stepPipe.End(); } } + + private static bool OutputBypassTestHook = false; + + /// + /// Test hook to enable or disable launching of browser. + /// When set, the converted output is returned. + /// + public static void SetOutputBypassTestHook(bool value) + { + OutputBypassTestHook = value; + } } } diff --git a/test/powershell/Modules/Microsoft.PowerShell.Utility/MarkdownCmdlets.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Utility/MarkdownCmdlets.Tests.ps1 index 6877136b09..551eb5bf94 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Utility/MarkdownCmdlets.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Utility/MarkdownCmdlets.Tests.ps1 @@ -259,20 +259,21 @@ bool function()`n{`n} $newOptions = Get-MarkdownOption - $options.Header1 | Should -BeExactly "$esc[4;1m[4;1m$esc[0m" - $options.Header2 | Should -BeExactly "$esc[93m[93m$esc[0m" - $options.Header3 | Should -BeExactly "$esc[94m[94m$esc[0m" - $options.Header4 | Should -BeExactly "$esc[95m[95m$esc[0m" - $options.Header5 | Should -BeExactly "$esc[96m[96m$esc[0m" - $options.Header6 | Should -BeExactly "$esc[97m[97m$esc[0m" + $newOptions.Header1 | Should -BeExactly "$esc[4;1m[4;1m$esc[0m" + $newOptions.Header2 | Should -BeExactly "$esc[93m[93m$esc[0m" + $newOptions.Header3 | Should -BeExactly "$esc[94m[94m$esc[0m" + $newOptions.Header4 | Should -BeExactly "$esc[95m[95m$esc[0m" + $newOptions.Header5 | Should -BeExactly "$esc[96m[96m$esc[0m" + $newOptions.Header6 | Should -BeExactly "$esc[97m[97m$esc[0m" #$options.Code | Should -BeExactly "$esc[48;2;155;155;155;38;2;30;30;30m[48;2;155;155;155;38;2;30;30;30m$esc[0m" - $options.Link | Should -BeExactly "$esc[4;38;5;88m[4;38;5;88m$esc[0m" - $options.Image | Should -BeExactly "$esc[34m[34m$esc[0m" - $options.EmphasisBold | Should -BeExactly "$esc[32m[32m$esc[0m" - $options.EmphasisItalics | Should -BeExactly "$esc[35m[35m$esc[0m" + $newOptions.Link | Should -BeExactly "$esc[4;38;5;88m[4;38;5;88m$esc[0m" + $newOptions.Image | Should -BeExactly "$esc[34m[34m$esc[0m" + $newOptions.EmphasisBold | Should -BeExactly "$esc[32m[32m$esc[0m" + $newOptions.EmphasisItalics | Should -BeExactly "$esc[35m[35m$esc[0m" } It "Verify defaults for light theme" { + Set-MarkdownOption -Theme Light $options = Get-MarkdownOption $options.Header1 | Should -BeExactly "$esc[7m[7m$esc[0m" @@ -289,4 +290,31 @@ bool function()`n{`n} } } + Context "Show-Markdown tests" { + BeforeEach { + [Microsoft.PowerShell.Commands.ShowMarkdownCommand]::SetOutputBypassTestHook($true) + } + + AfterEach { + [Microsoft.PowerShell.Commands.ShowMarkdownCommand]::SetOutputBypassTestHook($false) + } + + It "can show VT100 converted from markdown" { + $text = "Bold" + $mdText = "**$text**" + $expectedString = GetExpectedString -ElementType 'Bold' -Text $text + + $result = $mdText | ConvertFrom-Markdown -AsVT100EncodedString | Show-Markdown + $result | Should -BeExactly $expectedString + } + + It "can show HTML converted from markdown" { + $text = "Bold" + $mdText = "**$text**" + $expectedString = GetExpectedHTML -ElementType 'Bold' -Text $text + + $result = $mdText | ConvertFrom-Markdown | Show-Markdown -UseBrowser + $result | Should -BeExactly $expectedString + } + } }