PowerShell/test/powershell/Language/Scripting/I18n.Tests.ps1
Ilya 409ab7443f Fix GetType() bad pattern and related issues in tests (#3134)
* Fix GetType() bad pattern and related issues in tests

$var.GetType() can raise an exception in tests so we should check $var
before make the call. A large part of the tests does not make this
check.
I start with searching ".GetType()" but discovered many related issues
in tests (reduntant and unneeded tests, "throw" bad pattens, bugs,
formattings (sorry!) and so on) - I had to fix them too.

* Fix after code review
* Second wave of migration GetType() -> BeOfType
Removed 'GetType().Name' patterns.
2017-02-15 16:40:51 -08:00

182 lines
5.6 KiB
PowerShell

Describe 'Testing of script internationalization' -Tags "CI" {
BeforeAll {
$dir=$PSScriptRoot
$defaultParamValues = $PSDefaultParameterValues.Clone()
#This works only for en-US or fr-FR
if ($PSUICulture -ne 'en-US' -and $PSUICulture -ne 'fr-FR')
{
$PSDefaultParameterValues["It:Skip"] = $true
}
}
AfterAll {
$global:PSDefaultParameterValues = $defaultParamValues
}
It 'convertFromString-Data should work with data statement.' {
data mydata
{
ConvertFrom-StringData @'
string1=string1
string2=string2
'@
}
$mydata.string1 | Should Be 'string1'
$mydata.string2 | Should Be 'string2'
}
It 'Import default culture is done correctly' {
import-localizedData mydata;
$mydata.string1 | Should Be 'string1 for en-US'
$mydata.string2 | Should be 'string2 for en-US'
}
It 'Import specific culture(en-US)' {
import-localizedData mydata -uiculture en-US
$mydata.string1 | Should Be 'string1 for en-US'
$mydata.string2 | Should Be 'string2 for en-US'
import-localizedData mydata -uiculture fr-FR
$mydata.string1 | Should Be 'string1 for fr-FR'
$mydata.string2 | Should Be 'string2 for fr-FR'
}
It 'Import non existing culture is done correctly' {
import-localizedData mydata -uiculture nl-NL -ea SilentlyContinue -ev ev
$ev | Should Not BeNullOrEmpty
$ev[0].Exception | Should BeOfType "System.Management.Automation.PSInvalidOperationException"
}
It 'Import different file name is done correctly' {
import-localizedData mydata -filename foo
$mydata.string1 | Should Be 'string1 from foo in en-US'
$mydata.string2 | Should Be 'string2 from foo in en-US'
import-localizedData mydata -filename foo -uiculture fr-FR
$mydata.string1 | Should Be 'string1 from foo in fr-FR'
$mydata.string2 | Should Be 'string2 from foo in fr-FR'
}
It 'Import different file base is done correctly' {
import-localizedData mydata -basedirectory "${dir}\newbase"
$mydata.string1 | Should Be 'string1 for en-US under newbase'
$mydata.string2 | Should Be 'string2 for en-US under newbase'
import-localizedData mydata -basedirectory "${dir}\newbase" -uiculture fr-FR
$mydata.string1 | Should Be 'string1 for fr-FR under newbase'
$mydata.string2 | Should Be 'string2 for fr-FR under newbase'
}
It 'Import different file base and file name' {
import-localizedData mydata -basedirectory "${dir}\newbase" -filename foo
$mydata.string1 | Should Be 'string1 for en-US from foo under newbase'
$mydata.string2 | Should Be 'string2 for en-US from foo under newbase'
import-localizedData mydata -basedirectory "${dir}\newbase" -filename foo -uiculture fr-FR
$mydata.string1 | Should Be 'string1 for fr-FR from foo under newbase'
$mydata.string2 | Should Be 'string2 for fr-FR from foo under newbase'
}
It "Import variable that doesn't exist" {
import-localizedData mydata2
$mydata2.string1 | Should Be 'string1 for en-US'
$mydata2.string2 | Should Be 'string2 for en-US'
}
It 'Import bad psd1 file - tests the use of disallowed variables' {
$script:exception = $null
& {
trap {$script:exception = $_ ; continue }
import-localizedData mydata -filename bad
}
$script:exception.exception | Should Not BeNullOrEmpty
$script:exception.exception | Should BeOfType System.management.automation.psinvalidoperationexception
}
It 'Import if psd1 file is done correctly' {
import-localizedData mydata -filename if
if ($psculture -eq 'en-US')
{
$mydata.string1 | Should Be 'string1 for en-US in if'
$mydata.string2 | Should Be 'string2 for en-US in if'
}
else
{
$mydata | Should Be $null
}
}
$testData = @(
@{cmd = 'data d { @{ x=$(get-command)} }';Expected='get-command'},
@{cmd = 'data d { if ($(get-command)) {} }';Expected='get-command'},
@{cmd = 'data d { @(get-command) }';Expected='get-command'}
)
It 'Allowed cmdlets checked properly' -TestCase:$testData {
param ($cmd, $Expected)
$script:exception = $null
& {
trap {$script:exception = $_.Exception ; continue }
invoke-expression $cmd
}
$exception | Should Match $Expected
}
it 'Check alternate syntax that also supports complex variable names' {
& {
$script:mydata = data { 123 }
}
$mydata | Should Be 123
$mydata = data { 456 }
& {
# This import should not clobber the one at script scope
import-localizedData mydata -uiculture en-US
}
$mydata | Should Be 456
& {
# This import should clobber the one at script scope
import-localizedData script:mydata -uiculture en-US
}
$script:mydata.string1 | Should Be 'string1 for en-US'
}
It 'Check fallback to current directory plus -SupportedCommand parameter is done correctly' {
new-alias MyConvertFrom-StringData ConvertFrom-StringData
import-localizeddata local:mydata -uiculture fr-ca -filename I18n.Tests_fallback.psd1 -SupportedCommand MyConvertFrom-StringData
$mydata[0].string1 | Should Be 'fallback string1 for en-US'
$mydata[1] | Should Be 42
}
}