52 lines
2 KiB
PowerShell
52 lines
2 KiB
PowerShell
# Copyright (c) Microsoft Corporation.
|
|
# Licensed under the MIT License.
|
|
|
|
Describe 'Tests for lossless rehydration of serialized types.' -Tags 'CI' {
|
|
BeforeAll {
|
|
$cmdBp = Set-PSBreakpoint -Command Get-Process
|
|
$varBp = Set-PSBreakpoint -Variable ?
|
|
$lineBp = Set-PSBreakpoint -Script $PSScriptRoot/PSSerializer.Tests.ps1 -Line 1
|
|
|
|
function ShouldRehydrateLosslessly {
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory, ValueFromPipeline)]
|
|
[ValidateNotNull()]
|
|
[System.Management.Automation.Breakpoint]
|
|
$Breakpoint
|
|
)
|
|
$dehydratedBp = [System.Management.Automation.PSSerializer]::Serialize($Breakpoint)
|
|
$rehydratedBp = [System.Management.Automation.PSSerializer]::Deserialize($dehydratedBp)
|
|
foreach ($property in $Breakpoint.PSObject.Properties) {
|
|
$bpValue = $Breakpoint.$($property.Name)
|
|
$rehydratedBpValue = $rehydratedBp.$($property.Name)
|
|
$propertyType = $property.TypeNameOfValue -as [System.Type]
|
|
if ($null -eq $bpValue) {
|
|
$rehydratedBpValue | Should -Be $null
|
|
} elseif ($propertyType.IsValueType) {
|
|
$bpValue | Should -Be $rehydratedBpValue
|
|
} elseif ($propertyType -eq [string]) {
|
|
$bpValue | Should -BeExactly $rehydratedBpValue
|
|
} else {
|
|
$bpValue.ToString() | Should -BeExactly $rehydratedBpValue.ToString()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
AfterAll {
|
|
Remove-PSBreakpoint -Breakpoint $cmdBp,$varBp,$lineBp
|
|
}
|
|
|
|
It 'Losslessly rehydrates command breakpoints' {
|
|
$cmdBp | ShouldRehydrateLosslessly
|
|
}
|
|
|
|
It 'Losslessly rehydrates variable breakpoints' {
|
|
$varBp | ShouldRehydrateLosslessly
|
|
}
|
|
|
|
It 'Losslessly rehydrates line breakpoints' {
|
|
$lineBp | ShouldRehydrateLosslessly
|
|
}
|
|
}
|