Update Concise ErrorView to not show line information for errors from script module functions (#14912)

This commit is contained in:
Steve Lee 2021-03-08 10:37:11 -08:00 committed by GitHub
parent c517f7e087
commit 597bfc9696
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 1 deletions

View file

@ -1105,7 +1105,8 @@ namespace System.Management.Automation.Runspaces
$message = ''
$prefix = ''
if ($myinv -and $myinv.ScriptName -or $myinv.ScriptLineNumber -gt 1 -or $err.CategoryInfo.Category -eq 'ParserError') {
# Don't show line information if script module
if (($myinv -and $myinv.ScriptName -or $myinv.ScriptLineNumber -gt 1 -or $err.CategoryInfo.Category -eq 'ParserError') -and !($myinv.ScriptName.EndsWith('.psm1', [System.StringComparison]::OrdinalIgnoreCase))) {
$useTargetObject = $false
# Handle case where there is a TargetObject and we can show the error at the target rather than the script source

View file

@ -21,6 +21,7 @@ Describe 'Tests for $ErrorView' -Tag CI {
Context 'ConciseView tests' {
BeforeEach {
$testScriptPath = Join-Path -Path $TestDrive -ChildPath 'test.ps1'
$testModulePath = Join-Path -Path $TestDrive -ChildPath 'test.psm1'
}
AfterEach {
@ -136,6 +137,19 @@ Describe 'Tests for $ErrorView' -Tag CI {
$e = & "$PSHOME/pwsh" -noprofile -file $testScriptPath 2>&1 | Out-String
$e.Split("o${newline}t").Count | Should -Be 1 -Because "Error message should not contain newline"
}
It "Script module error should not show line information" {
$testModule = @'
function Invoke-Error() {
throw 'oops'
}
'@
Set-Content -Path $testModulePath -Value $testModule
$e = & "$PSHOME/pwsh" -noprofile -command "Import-Module '$testModulePath'; Invoke-Error" 2>&1 | Out-String
$e | Should -Not -BeNullOrEmpty
$e | Should -Not -BeLike "*Line*"
}
}
Context 'NormalView tests' {