Tests/sthInvokeUsingCulture.tests.ps1
Remove-Module -Name sthInvokeUsingCulture -Force -ErrorAction 'SilentlyContinue' Import-Module "$PSScriptRoot\..\sthInvokeUsingCulture.psd1" Describe "sthInvokeUsingCulture" { BeforeAll { $en = [System.Globalization.CultureInfo]'en-US' $en_name = 'en-US' $en_id = 1033 $de = [System.Globalization.CultureInfo]'de-DE' $de_name = 'de-DE' $de_id = 1031 $ru = [System.Globalization.CultureInfo]'ru-RU' $ru_name = 'ru-RU' $ru_id = 1049 $ScriptBlock = {"{0:c}" -f 15} $data = Get-Content -Path "$PSScriptRoot\sthInvokeUsingCulture.tests.data.psd1" -Raw -Encoding utf8 $result = ConvertFrom-StringData -StringData $data } Context "Invoke-sthUsingCulture" { Context "Using CultureInfo objects" { $testCases = @( @{Culture = $en; Result = $result.en} @{Culture = $de; Result = $result.de} @{Culture = $ru; Result = $result.ru} ) It "Should use culture <Culture>" -TestCases $testCases { Param ($Culture, $Result) Invoke-sthUsingCulture -Culture $Culture -ScriptBlock $ScriptBlock | Should -BeExactly $Result } } Context "Using culture names" { $testCases = @( @{Culture = $en_name; Result = $result.en} @{Culture = $de_name; Result = $result.de} @{Culture = $ru_name; Result = $result.ru} ) It "Should use culture <Culture>" -TestCases $testCases { Param ($Culture, $Result) Invoke-sthUsingCulture -Culture $Culture -ScriptBlock $ScriptBlock | Should -BeExactly $Result } } Context "Using culture IDs" { $testCases = @( @{Culture = $en_id; Result = $result.en} @{Culture = $de_id; Result = $result.de} @{Culture = $ru_id; Result = $result.ru} ) It "Should use culture <Culture>" -TestCases $testCases { Param ($Culture, $Result) Invoke-sthUsingCulture -Culture $Culture -ScriptBlock $ScriptBlock | Should -BeExactly $Result } } Context "Getting help using culture" { It "Should get help for Enter-sthCulture in en-US" { Invoke-sthUsingCulture -Culture 'en-US' -ScriptBlock {Get-Help Enter-sthCulture} | Out-String -Stream | Select-Object -Index 5 | Should -BeExactly " $($result.helpline_en)" } Import-Module "$PSScriptRoot\..\sthInvokeUsingCulture.psd1" It "Should get help for Enter-sthCulture in ru-RU" { Invoke-sthUsingCulture -Culture 'ru-RU' -ScriptBlock {Get-Help Enter-sthCulture} | Out-String -Stream | Select-Object -Index 5 | Should -BeExactly " $($result.helpline_ru)" } } } Context "Enter-sthCulture" { $HostScriptBlockString = @" `$Script:Host = [PSCustomObject]@{Name = 'Host'} `$Script:Host | Add-Member -MemberType ScriptMethod -Name EnterNestedPrompt -Value {$ScriptBlock} "@ $HostScriptBlock = [ScriptBlock]::Create($HostScriptBlockString).GetNewClosure() InModuleScope -ModuleName sthInvokeUsingCulture -ScriptBlock $HostScriptBlock Context "Using CultureInfo objects" { $testCases = @( @{Culture = $en; Result = $result.en} @{Culture = $de; Result = $result.de} @{Culture = $ru; Result = $result.ru} ) It "Should use culture <Culture>" -TestCases $testCases { Param ($Culture, $Result) Enter-sthCulture -Culture $Culture | Should -BeExactly $Result } } Context "Using culture names" { $testCases = @( @{Culture = $en_name; Result = $result.en} @{Culture = $de_name; Result = $result.de} @{Culture = $ru_name; Result = $result.ru} ) It "Should use culture <Culture>" -TestCases $testCases { Param ($Culture, $Result) Enter-sthCulture -Culture $Culture | Should -BeExactly $Result } } Context "Using culture IDs" { $testCases = @( @{Culture = $en_id; Result = $result.en} @{Culture = $de_id; Result = $result.de} @{Culture = $ru_id; Result = $result.ru} ) It "Should use culture <Culture>" -TestCases $testCases { Param ($Culture, $Result) Enter-sthCulture -Culture $Culture | Should -BeExactly $Result } } } Context "Set-sthCulture" { $OriginalCulture = Get-Culture $OriginalUICulture = Get-UICulture $OriginalResult = & $ScriptBlock Context "Using CultureInfo objects" { $testCases = @( @{Culture = $en; Result = $result.en} @{Culture = $de; Result = $result.de} @{Culture = $ru; Result = $result.ru} ) It "Should use culture <Culture>" -TestCases $testCases { Param ($Culture, $Result) Set-sthCulture -Culture $Culture & $ScriptBlock | Should -BeExactly $Result } It "Should revert to original culture '$OriginalCulture'" { Reset-sthCulture Get-Culture | Should -Be $OriginalCulture Get-UICulture | Should -Be $OriginalUICulture & $ScriptBlock | Should -BeExactly $OriginalResult } } Context "Using culture names" { $testCases = @( @{Culture = $en_name; Result = $result.en} @{Culture = $de_name; Result = $result.de} @{Culture = $ru_name; Result = $result.ru} ) It "Should use culture <Culture>" -TestCases $testCases { Param ($Culture, $Result) Set-sthCulture -Culture $Culture & $ScriptBlock | Should -BeExactly $Result } It "Should revert to original culture '$OriginalCulture'" { Reset-sthCulture Get-Culture | Should -Be $OriginalCulture Get-UICulture | Should -Be $OriginalUICulture & $ScriptBlock | Should -BeExactly $OriginalResult } } Context "Using culture IDs" { $testCases = @( @{Culture = $en_id; Result = $result.en} @{Culture = $de_id; Result = $result.de} @{Culture = $ru_id; Result = $result.ru} ) It "Should use culture <Culture>" -TestCases $testCases { Param ($Culture, $Result) Set-sthCulture -Culture $Culture & $ScriptBlock | Should -BeExactly $Result } It "Should revert to original culture '$OriginalCulture'" { Reset-sthCulture Get-Culture | Should -Be $OriginalCulture Get-UICulture | Should -Be $OriginalUICulture & $ScriptBlock | Should -BeExactly $OriginalResult } } } } |