Use OrdinalIgnoreCase to lookup script breakpoints (#20046)

This commit is contained in:
Frode Flaten
2023-07-31 17:45:49 -07:00
committed by GitHub
parent 85795c32ec
commit ced79cd1a1
2 changed files with 18 additions and 1 deletions
@@ -982,7 +982,7 @@ namespace System.Management.Automation
_inBreakpoint = false;
_idToBreakpoint = new ConcurrentDictionary<int, Breakpoint>();
// The string key is function context file path. The int key is sequencePoint index.
_pendingBreakpoints = new ConcurrentDictionary<string, ConcurrentDictionary<int, LineBreakpoint>>();
_pendingBreakpoints = new ConcurrentDictionary<string, ConcurrentDictionary<int, LineBreakpoint>>(StringComparer.OrdinalIgnoreCase);
_boundBreakpoints = new ConcurrentDictionary<string, Tuple<WeakReference, ConcurrentDictionary<int, LineBreakpoint>>>(StringComparer.OrdinalIgnoreCase);
_commandBreakpoints = new ConcurrentDictionary<int, CommandBreakpoint>();
_variableBreakpoints = new ConcurrentDictionary<string, ConcurrentDictionary<int, VariableBreakpoint>>(StringComparer.OrdinalIgnoreCase);
@@ -643,3 +643,20 @@ Describe "Sometimes line breakpoints are ignored" -Tags "CI" {
if (Test-Path -Path $tempFileName2) { Remove-Item $tempFileName2 -Force }
}
}
Describe 'Breakpoints use case-insensitive match for script paths' -Tags 'CI' {
# https://github.com/PowerShell/PowerShell/issues/20044
# Running on Windows only as Set-PSBreakpoint does case sensitive check on provided path on Unix
It 'Hits breakpoint' -Skip:(!$IsWindows) {
$filePath = Join-Path -Path $TestDrive -ChildPath 'demoIssue20044.ps1'
Set-Content -Path $filePath -Value "'Hello World'"
$bp = Set-PSBreakpoint -Script $filePath.ToUpper() -Line 1 -Action { continue }
& $filePath
$bp.HitCount | Should -Be 1
if ($null -ne $bp) { Remove-PSBreakpoint $bp }
}
}