233 строки
6.4 KiB
PowerShell
233 строки
6.4 KiB
PowerShell
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
Function Test-StringArrays
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Uses Pester assertions to test two string arrays for equality.
|
|
|
|
.NOTES
|
|
Pester does not have array assertions =(
|
|
#>
|
|
Param
|
|
(
|
|
[Parameter(Position=0)]
|
|
[AllowNull()]
|
|
[string[]] $Expected,
|
|
|
|
[Parameter(Position=1)]
|
|
[AllowNull()]
|
|
[string[]] $Actual
|
|
)
|
|
|
|
if ($null -eq $Actual)
|
|
{
|
|
$Expected | Should -Be $null
|
|
return
|
|
}
|
|
|
|
# Actual is not null
|
|
if ($null -eq $Expected)
|
|
{
|
|
throw "Expected string[] is null and Actual is not null"
|
|
}
|
|
|
|
if ($Actual.Count -ne $Expected.Count)
|
|
{
|
|
Write-Host " Actual: $Actual" -ForegroundColor Red
|
|
Write-Host "Expected: $Expected" -ForegroundColor Red
|
|
}
|
|
|
|
$Actual.Count | Should -Be $Expected.Count
|
|
|
|
for ($i = 0; $i -lt $Actual.Count; $i++)
|
|
{
|
|
$Actual[$i] | Should -Be $Expected[$i]
|
|
}
|
|
}
|
|
|
|
Function Test-ObjectArrays
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Uses Pester assertions to test two string arrays for equality.
|
|
|
|
.NOTES
|
|
Pester does not have array assertions =(
|
|
#>
|
|
Param
|
|
(
|
|
[Parameter(Position=0)]
|
|
[AllowNull()]
|
|
[Array] $Expected,
|
|
|
|
[Parameter(Position=1)]
|
|
[AllowNull()]
|
|
[Array] $Actual
|
|
)
|
|
|
|
if ($Actual -eq $null)
|
|
{
|
|
$Expected | Should -Be $null
|
|
return
|
|
}
|
|
|
|
# Actual is not null
|
|
if ($Expected -eq $null)
|
|
{
|
|
throw "Expected Array is null and Actual is not null"
|
|
}
|
|
|
|
if ($Actual.Count -ne $Expected.Count)
|
|
{
|
|
Write-Host " Actual: $Actual" -ForegroundColor Red
|
|
Write-Host "Expected: $Expected" -ForegroundColor Red
|
|
}
|
|
|
|
$Actual.Count | Should -Be $Expected.Count
|
|
|
|
for ($i = 0; $i -lt $Actual.Count; $i++)
|
|
{
|
|
Test-Hashtables $Expected[$i] $Actual[$i]
|
|
}
|
|
}
|
|
|
|
Function Test-Hashtables
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Uses Pester assertions to test two hashtables for equality.
|
|
|
|
.NOTES
|
|
Pester does not have hashtable assertions =(
|
|
#>
|
|
Param
|
|
(
|
|
[Parameter(Position=0)]
|
|
[AllowNull()]
|
|
[Hashtable] $Expected,
|
|
|
|
[Parameter(Position=1)]
|
|
[AllowNull()]
|
|
[Hashtable] $Actual
|
|
)
|
|
|
|
if ($Expected -eq $null)
|
|
{
|
|
$Actual | Should -Be $null
|
|
return
|
|
}
|
|
|
|
if ($Actual -eq $null)
|
|
{
|
|
$Expected | Should -Be $null
|
|
return
|
|
}
|
|
|
|
if ($Actual.Count -eq 0 -and $Expected.Count -eq 0)
|
|
{
|
|
# Redundant, but tells Pester we tested something
|
|
# If the counts don't match, continue with the comparison so we contain
|
|
# find out what's missing in the test error log
|
|
$Actual.Count | Should -Be $Expected.Count
|
|
return
|
|
}
|
|
|
|
foreach ($actualProperty in $Actual.GetEnumerator())
|
|
{
|
|
if ($Expected.Contains($actualProperty.Name))
|
|
{
|
|
$expectedValue = $Expected[$actualProperty.Name]
|
|
|
|
if ($null -eq $actualProperty.Value)
|
|
{
|
|
$actualProperty.Value | Should -Be $expectedValue
|
|
}
|
|
else
|
|
{
|
|
$actualProperty.Value.GetType() | Should -Be $expectedValue.GetType()
|
|
|
|
if ($expectedValue.GetType().FullName -eq 'System.Collections.Hashtable')
|
|
{
|
|
Test-Hashtables -Actual $actualProperty.Value -Expected $expectedValue
|
|
}
|
|
elseif ($actualProperty.Value.GetType() -imatch ".*Array$|.*\[\]$")
|
|
{
|
|
if ($actualProperty.Value[0].GetType().FullName -ieq 'System.String')
|
|
{
|
|
Test-StringArrays $expectedProperty.Value $actualValue
|
|
}
|
|
elseif ($actualProperty.Value[0].GetType().FullName -ieq 'System.Collections.Hashtable')
|
|
{
|
|
Test-ObjectArrays -Actual $actualValue -Expected $expectedProperty.Value
|
|
}
|
|
else
|
|
{
|
|
# Just assert their lengths for now
|
|
$actualProperty.Value.Count | Should -Be $expectedValue.Count
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$actualProperty.Value | Should -Be $expectedValue
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw "Expected did not contain an actual value:`nKey = $($actualProperty.Name)`nValue = $($actualProperty.Value)"
|
|
}
|
|
}
|
|
|
|
foreach ($expectedProperty in $Expected.GetEnumerator())
|
|
{
|
|
if ($Actual.Contains($expectedProperty.Name))
|
|
{
|
|
$actualValue = $Actual[$expectedProperty.Name]
|
|
|
|
if ($null -eq $expectedProperty.Value)
|
|
{
|
|
$actualValue | Should -Be $expectedProperty.Value
|
|
}
|
|
else
|
|
{
|
|
$actualValue.GetType() | Should -Be $expectedProperty.Value.GetType()
|
|
|
|
if ($expectedProperty.Value.GetType().FullName -eq 'System.Collections.Hashtable')
|
|
{
|
|
Test-Hashtables -Actual $actualValue -Expected $expectedProperty.Value
|
|
}
|
|
elseif ($expectedProperty.Value.GetType() -imatch ".*Array$|.*\[\]$")
|
|
{
|
|
if ($expectedProperty.Value[0].GetType().FullName -imatch 'System.String')
|
|
{
|
|
Test-StringArrays $expectedProperty.Value $actualValue
|
|
}
|
|
elseif ($expectedProperty.Value[0].GetType().FullName -imatch 'System.Collections.Hashtable')
|
|
{
|
|
Test-ObjectArrays -Actual $actualValue -Expected $expectedProperty.Value
|
|
}
|
|
else
|
|
{
|
|
# Just assert their lengths for now
|
|
$actualValue.Count | Should -Be $expectedProperty.Value.Count
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$actualValue | Should -Be $expectedProperty.Value
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw "Actual did not contain an expected value:`nKey = $($expectedProperty.Name)`nValue = $($expectedProperty.Value)"
|
|
}
|
|
}
|
|
}
|
|
|
|
Export-ModuleMember `
|
|
-Function @(
|
|
'Test-StringArrays',
|
|
'Test-Hashtables'
|
|
) |