Add BooleanParameterDCR and Eventing Pester Test (#2031)

* Add BooleanParameterDCR and Eventing Pester Test

* Correct describe for Eventing Pester Test

* Add ProviderIntrinsics and Serialization Pester Test
This commit is contained in:
Jumping Yang[Wicresoft] 2016-08-30 01:01:03 +08:00 committed by Andrew Schwartzmeyer
parent d57530812e
commit d59b322032
4 changed files with 208 additions and 0 deletions

View file

@ -0,0 +1,52 @@
Describe "BooleanParameterDCR Tests" -tags "CI" {
BeforeAll {
Function ParserTestSwitchCmdlet
{
[CmdletBinding()]
param([switch]$switchParam)
return $switchParam
}
Function ParserTestBoolCmdlet2
{
[CmdletBinding()]
param([bool]$First=$false)
return $First
}
}
$tests = @(
@{ inputTest = 0; expected = $false },
@{ inputTest = 000; expected = $false },
@{ inputTest = 0x00; expected = $false },
@{ inputTest = 0.00; expected = $false }
)
It "Test that passing zero works as the value for a Switch parameter, inputTest:<inputTest>,expect:<expected>" -TestCases $tests {
param ( $inputTest, $expected )
[bool]$switchTestParam = $inputTest
$result = ParserTestSwitchCmdlet -switchParam:$switchTestParam
$result | should be $expected
}
$tests = @(
@{ inputTest = $(1 -eq 1); expected = $true },
@{ inputTest = $true; expected = $true },
@{ inputTest = $TRUE; expected = $true }
)
It "Test that $true is accepted as a true value for Switch parameters, inputTest:<inputTest>,expect:<expected>" -TestCases $tests {
param ( $inputTest, $expected )
[bool]$switchTestParam = $inputTest
$result = ParserTestSwitchCmdlet -switchParam:$switchTestParam
$result | should be $expected
}
It "Test that a nullable boolean is accepted for a boolean parameter." {
[System.Nullable[System.Int32]] $nullBoolVar = $false
$result = ParserTestBoolCmdlet2 $nullBoolVar
$result | should be $false
$result = ParserTestBoolCmdlet2 -First:$nullBoolVar
$result | should be $false
$result = ParserTestBoolCmdlet2 -First $nullBoolVar
$result | should be $false
}
}

View file

@ -0,0 +1,36 @@
Describe "Event Subscriber Tests" -tags "CI" {
BeforeEach {
Get-EventSubscriber | Unregister-Event
}
AfterEach {
Get-EventSubscriber | Unregister-Event
}
# can't let this case to work
It "Register an event with no action, trigger it and wait for it to be raised." -Pending:$true{
Get-EventSubscriber | should BeNullOrEmpty
$messageData = new-object psobject
$job = Start-Job { Start-Sleep -Seconds 5; 1..5 }
$eventtest = Register-ObjectEvent $job -EventName StateChanged -SourceIdentifier EventSIDTest -Action {} -MessageData $messageData
new-event EventSIDTest
wait-event EventSIDTest
$eventdata = get-event EventSIDTest
$eventdata.MessageData | should Be $messageData
remove-event EventSIDTest
Unregister-Event EventSIDTest
Get-EventSubscriber | should BeNullOrEmpty
}
It "Access a global variable from an event action." {
Get-EventSubscriber | should BeNullOrEmpty
set-variable incomingGlobal -scope global -value globVarValue
$eventtest = register-engineevent -SourceIdentifier foo -Action {set-variable -scope global -name aglobalvariable -value $incomingGlobal}
new-event foo
$getvar = get-variable aglobalvariable -scope global
$getvar.Name | should Be aglobalvariable
$getvar.Value | should Be globVarValue
Unregister-Event foo
Get-EventSubscriber | should BeNullOrEmpty
}
}

View file

@ -0,0 +1,21 @@
Describe "ProviderIntrinsics Tests" -tags "CI" {
BeforeAll {
setup -d TestDir
}
It 'If a childitem exists, HasChild method returns $true' {
$ExecutionContext.InvokeProvider.ChildItem.HasChild("$TESTDRIVE") | Should be $true
}
It 'If a childitem does not exist, HasChild method returns $false' {
$ExecutionContext.InvokeProvider.ChildItem.HasChild("$TESTDRIVE/TestDir") | Should be $false
}
It 'If the path does not exist, HasChild throws an exception' {
try {
$ExecutionContext.InvokeProvider.ChildItem.HasChild("TESTDRIVE/ThisDirectoryDoesNotExist")
throw "Execution OK"
}
catch {
$_.fullyqualifiederrorid | should be "ItemNotFoundException"
}
}
}

View file

@ -0,0 +1,99 @@
Describe "Serialization Tests" -tags "CI" {
BeforeAll {
$testfileName="SerializationTest.txt"
$testPath = Join-Path $TestDrive $testfileName
$testfile = New-Item $testPath -Force
function SerializeAndDeserialize([PSObject]$inputObject)
{
$xmlSerializer = New-Object System.Xml.Serialization.XmlSerializer($inputObject.GetType())
$stream = [System.IO.StreamWriter]$testPath
$xmlWriter = [System.Xml.XmlWriter]::Create($stream)
$xmlSerializer.Serialize($xmlWriter,$inputObject)
$stream.Close()
$stream = [System.IO.StreamReader]$testPath
$xmlReader = [System.Xml.XmlReader]::Create($stream)
$outputObject = $xmlSerializer.Deserialize($xmlReader)
$stream.Close()
$xmlReader.Dispose()
return $outputObject;
}
enum MyColorFlag
{
RED
BLUE
}
}
AfterAll {
Remove-Item $testPath -Force -ErrorAction SilentlyContinue
}
It 'Test DateTimeUtc serialize and deserialize work as expected.' {
$inputObject = [System.DateTime]::UtcNow;
SerializeAndDeserialize($inputObject) | Should be $inputObject
}
It 'Test DateTime stamps serialize and deserialize work as expected.' {
$objs = [System.DateTime]::MaxValue, [System.DateTime]::MinValue, [System.DateTime]::Today, (new-object System.DateTime), (new-object System.DateTime 123456789)
foreach($inputObject in $objs)
{
SerializeAndDeserialize($inputObject) | Should be $inputObject
}
}
#pending because of "System.Uri cannot be serialized because it does not have a parameterless constructor."
It 'Test system Uri objects serialize and deserialize work as expected.' -Pending:$true {
$uristrings = "http://www.microsoft.com","http://www.microsoft.com:8000","http://www.microsoft.com/index.html","http://www.microsoft.com/default.asp","http://www.microsoft.com/Hello%20World.htm"
foreach($uristring in $uristrings)
{
$inputObject = new-object System.Uri $uristring
SerializeAndDeserialize($inputObject) | Should be $inputObject
}
}
It 'Test a byte array serialize and deserialize work as expected.' {
$objs1 = [byte]0, [byte]1, [byte]2, [byte]3, [byte]255
$objs2 = @()
$objs3 = [byte]128
$objs4 = @()
for($i=0;$i -lt 256;$i++)
{
$objs4 += [byte]$i
}
$objsArray = New-Object System.Collections.ArrayList
$objsArray.Add($objs1)
$objsArray.Add($objs2)
$objsArray.Add($objs3)
$objsArray.Add($objs4)
foreach($inputObject in $objsArray )
{
$outputs = SerializeAndDeserialize($inputObject);
for($i=0;$i -lt $inputObject.Length;$i++)
{
$outputs[$i] | Should be $inputObject[$i]
}
}
}
It 'Test Enum serialize and deserialize work as expected.' {
$inputObject = [MyColorFlag]::RED
SerializeAndDeserialize($inputObject).ToString() | Should be $inputObject.ToString()
}
It 'Test SecureString serialize and deserialize work as expected.' {
$inputObject = Convertto-Securestring -String "PowerShellRocks!" -AsPlainText -Force
SerializeAndDeserialize($inputObject).Length | Should be $inputObject.Length
}
It 'Test ScriptProperty object serialize and deserialize work as expected.' {
$versionObject = New-Object PSObject
$versionObject | Add-Member -MemberType NoteProperty -Name TestNote -Value "TestNote"
$versionObject | Add-Member -MemberType ScriptProperty -Name TestScriptProperty -Value { ($this.TestNote) }
SerializeAndDeserialize($versionObject).TestScriptProperty | Should be $versionObject.TestScriptProperty
}
}