Respect explicit false for CSV UseCulture#27514
Conversation
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds coverage and fixes delimiter selection so that specifying -UseCulture:$false behaves the same as omitting -UseCulture (i.e., uses the default CSV delimiter rather than the culture list separator).
Changes:
- Add Pester tests validating default delimiter behavior when
-UseCultureis explicitly set to$falseacrossImport-Csv,Export-Csv,ConvertTo-Csv, andConvertFrom-Csv - Update
SetDelimiterto explicitly pick either the culture list separator (whenuseCultureis true) or the default CSV delimiter (when false)
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| test/powershell/Modules/Microsoft.PowerShell.Utility/Import-Csv.Tests.ps1 | Adds test for Import-Csv -UseCulture:$false |
| test/powershell/Modules/Microsoft.PowerShell.Utility/Export-Csv.Tests.ps1 | Adds test asserting comma delimiter when -UseCulture:$false |
| test/powershell/Modules/Microsoft.PowerShell.Utility/ConvertTo-Csv.Tests.ps1 | Adds test asserting comma delimiter output when -UseCulture:$false |
| test/powershell/Modules/Microsoft.PowerShell.Utility/ConvertFrom-Csv.Tests.ps1 | Adds test asserting comma delimiter parsing when -UseCulture:$false |
| src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs | Fixes delimiter selection logic for -UseCulture:$false in UseCulture-related parameter sets |
| $P1 | Export-Csv -Path $testCsv -UseCulture:$false | ||
| $results = Get-Content -Path $testCsv | ||
|
|
||
| $results[0] | Should -BeExactly '"P1"' | ||
| $results[1] | Should -BeExactly '"first"' | ||
|
|
||
| [pscustomobject]@{ H1 = 'V1'; H2 = 'V2' } | Export-Csv -Path $testCsv -UseCulture:$false | ||
| $results = Get-Content -Path $testCsv | ||
|
|
||
| $results[0] | Should -BeExactly '"H1","H2"' | ||
| $results[1] | Should -BeExactly '"V1","V2"' |
There was a problem hiding this comment.
Addressed in f3acfebf6: the CSV tests now set a non-comma culture (de-DE) inside a try block and restore the original culture in finally, so the default-delimiter assertions exercise the intended branch on comma-culture systems too.
| $returnObject.Second | Should -Be 2 | ||
| } | ||
|
|
||
| It "Test import-csv with UseCulture explicitly false" { |
There was a problem hiding this comment.
Addressed in f3acfebf6: the Import-Csv test name now uses the same Uses the default delimiter when -UseCulture is explicitly false wording as the related CSV tests.
| $returnObject[2] | Should -BeExactly "`"1`"$($delimiter)`"2`"" | ||
| } | ||
|
|
||
| It "Test convertto-csv with UseCulture explicitly false" { |
There was a problem hiding this comment.
Addressed in f3acfebf6: the ConvertTo-Csv test name now uses proper cmdlet casing and matches the shared default-delimiter wording.
PR Summary
Makes CSV commands treat
-UseCulture:$falsethe same as omitting-UseCulture, so the default comma delimiter is used.PR Context
Fix #26513.
ImportExportCSVHelper.SetDelimiter()previously left the delimiter as the defaultcharvalue when the active parameter set was a culture parameter set but theUseCultureswitch value was explicitly false. This affected multiple CSV commands that share the helper. The helper now falls back to the default CSV delimiter whenUseCultureis false, while preserving the culture-specific delimiter when it is true.Regression tests cover:
ConvertTo-Csv -UseCulture:$falseExport-Csv -UseCulture:$falseImport-Csv -UseCulture:$falseConvertFrom-Csv -UseCulture:$falsePR Checklist
.h,.cpp,.cs,.ps1and.psm1files have the correct copyright headerValidation
Start-PSBuild -PSModuleRestore -UseNuGetOrgStart-PSPester -Path test/powershell/Modules/Microsoft.PowerShell.Utility/ConvertTo-Csv.Tests.ps1,test/powershell/Modules/Microsoft.PowerShell.Utility/Export-Csv.Tests.ps1,test/powershell/Modules/Microsoft.PowerShell.Utility/Import-Csv.Tests.ps1,test/powershell/Modules/Microsoft.PowerShell.Utility/ConvertFrom-Csv.Tests.ps1 -UseNuGetOrg -ThrowOnFailure -Terse -SkipTestToolBuildResult: CSV command tests passed: 92 passed, 0 failed.