diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs index d2d460169..34a58a96c 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs +++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs @@ -8,6 +8,7 @@ using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Management.Automation; +using System.Management.Automation.Internal; using Microsoft.PowerShell.MarkdownRender; namespace Microsoft.PowerShell.Commands @@ -61,8 +62,9 @@ namespace Microsoft.PowerShell.Commands if (markdownInfo == null) { + string errorMessage = StringUtil.Format(ConvertMarkdownStrings.InvalidInputObjectType, inpObj.GetType()); var errorRecord = new ErrorRecord( - new ArgumentException(), + new ArgumentException(errorMessage), "InvalidInputObject", ErrorCategory.InvalidArgument, InputObject); @@ -90,21 +92,15 @@ namespace Microsoft.PowerShell.Commands } ProcessStartInfo startInfo = new ProcessStartInfo(); - -#if UNIX - startInfo.FileName = Platform.IsLinux ? "xdg-open" : /* macOS */ "open"; - startInfo.Arguments = tmpFilePath; -#else startInfo.FileName = tmpFilePath; startInfo.UseShellExecute = true; -#endif - Process.Start(startInfo); } else { + string errorMessage = StringUtil.Format(ConvertMarkdownStrings.MarkdownInfoInvalid, "Html"); var errorRecord = new ErrorRecord( - new InvalidDataException(), + new InvalidDataException(errorMessage), "HtmlIsNullOrEmpty", ErrorCategory.InvalidData, html); @@ -131,8 +127,9 @@ namespace Microsoft.PowerShell.Commands } else { + string errorMessage = StringUtil.Format(ConvertMarkdownStrings.MarkdownInfoInvalid, "VT100EncodedString"); var errorRecord = new ErrorRecord( - new InvalidDataException(), + new InvalidDataException(errorMessage), "VT100EncodedStringIsNullOrEmpty", ErrorCategory.InvalidData, vt100String); diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertMarkdownStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertMarkdownStrings.resx index f9aacc5d6..3b17b564f 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertMarkdownStrings.resx +++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertMarkdownStrings.resx @@ -126,4 +126,7 @@ Only FileSystem Provider paths are supported. The given path '{0}' is not supported. + + The property {0} of the given object is null or empty. + diff --git a/test/powershell/Modules/Microsoft.PowerShell.Utility/MarkdownCmdlets.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Utility/MarkdownCmdlets.Tests.ps1 index 551eb5bf9..8764b340d 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Utility/MarkdownCmdlets.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Utility/MarkdownCmdlets.Tests.ps1 @@ -316,5 +316,20 @@ bool function()`n{`n} $result = $mdText | ConvertFrom-Markdown | Show-Markdown -UseBrowser $result | Should -BeExactly $expectedString } + + It "Gets an error if the input object is missing the property." -TestCases @(@{propertyname = 'Html'}, @{propertyname = 'VT100EncodedString'}) { + param($propertyname) + + $markdownInfo = [Microsoft.PowerShell.MarkdownRender.MarkdownInfo]::new() + + if($propertyname -eq 'VT100EncodedString') + { + { Show-Markdown -InputObject $markdownInfo -ErrorAction Stop } | Should -Throw -ErrorId 'VT100EncodedStringIsNullOrEmpty,Microsoft.PowerShell.Commands.ShowMarkdownCommand' + } + else + { + { Show-Markdown -UseBrowser -InputObject $markdownInfo -ErrorAction Stop } | Should -Throw -ErrorId 'HtmlIsNullOrEmpty,Microsoft.PowerShell.Commands.ShowMarkdownCommand' + } + } } }