Merge pull request #981 from PowerShell/SortObjectPesterTest

Add Sort-Object Pester Unit Test
This commit is contained in:
Andy Schwartzmeyer 2016-06-16 20:51:55 -07:00 committed by GitHub
commit 9a63ee7841

View file

@ -20,3 +20,205 @@
}
}
Describe "Sort-Object DRT Unit Tests" -Tags DRT{
It "Sort-Object with object array should work"{
$employee1 = [pscustomobject]@{"FirstName"="Eight"; "LastName"="Eight"; "YearsInMS"=8}
$employee2 = [pscustomobject]@{"FirstName"="Eight"; "YearsInMS"=$null}
$employee3 = [pscustomobject]@{"FirstName"="Minus"; "LastName"="Two"; "YearsInMS"=-2}
$employee4 = [pscustomobject]@{"FirstName"="One"; "LastName"="One"; "YearsInMS"=1}
$employees = @($employee1,$employee2,$employee3,$employee4)
$results = $employees | Sort-Object -Property YearsInMS
$results[0].FirstName | Should Be "Minus"
$results[0].LastName | Should Be "Two"
$results[0].YearsInMS | Should Be -2
$results[1].FirstName | Should Be "Eight"
$results[1].YearsInMS | Should BeNullOrEmpty
$results[2].FirstName | Should Be "One"
$results[2].LastName | Should Be "One"
$results[2].YearsInMS | Should Be 1
$results[3].FirstName | Should Be "Eight"
$results[3].LastName | Should Be "Eight"
$results[3].YearsInMS | Should Be 8
}
It "Sort-Object with Non Conflicting Order Entry Keys should work"{
$employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5}
$employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15}
$employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2}
$employees = @($employee1,$employee2,$employee3)
$ht = @{"e"="YearsInMS"; "descending"=$false; "ascending"=$true}
$results = $employees | Sort-Object -Property $ht -Descending
$results[0] | Should Be $employees[2]
$results[1] | Should Be $employees[0]
$results[2] | Should Be $employees[1]
}
It "Sort-Object with Conflicting Order Entry Keys should work"{
$employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5}
$employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15}
$employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2}
$employees = @($employee1,$employee2,$employee3)
$ht = @{"e"="YearsInMS"; "descending"=$false; "ascending"=$false}
$results = $employees | Sort-Object -Property $ht -Descending
$results[0] | Should Be $employees[1]
$results[1] | Should Be $employees[0]
$results[2] | Should Be $employees[2]
}
It "Sort-Object with One Order Entry Key should work"{
$employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5}
$employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15}
$employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2}
$employees = @($employee1,$employee2,$employee3)
$ht = @{"e"="YearsInMS"; "descending"=$false}
$results = $employees | Sort-Object -Property $ht -Descending
$results[0] | Should Be $employees[2]
$results[1] | Should Be $employees[0]
$results[2] | Should Be $employees[1]
}
It "Sort-Object with HistoryInfo object should work"{
Add-Type -TypeDefinition "public enum PipelineState{NotStarted,Running,Stopping,Stopped,Completed,Failed,Disconnected}"
$historyInfo1 = [pscustomobject]@{"PipelineId"=1; "Cmdline"="cmd3"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);}
$historyInfo2 = [pscustomobject]@{"PipelineId"=2; "Cmdline"="cmd1"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);}
$historyInfo3 = [pscustomobject]@{"PipelineId"=3; "Cmdline"="cmd2"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);}
$historyInfos = @($historyInfo1,$historyInfo2,$historyInfo3)
$results = $historyInfos | Sort-Object
$results[0] | Should Be $historyInfos[0]
$results[1] | Should Be $historyInfos[1]
$results[2] | Should Be $historyInfos[2]
}
It "Sort-Object with Non Existing And Null Script Property should work"{
$n = new-object microsoft.powershell.commands.newobjectcommand
$d = new-object microsoft.powershell.commands.newobjectcommand
$d.TypeName = 'Deetype'
$b = new-object microsoft.powershell.commands.newobjectcommand
$b.TypeName = 'btype'
$a = new-object microsoft.powershell.commands.newobjectcommand
$a.TypeName = 'atype'
$results = $n, $d, $b, 'b', $a | Sort-Object -proper {$_.TypeName}
$results.Count | Should Be 5
$results[2] | Should Be $a
$results[3] | Should Be $b
$results[4] | Should Be $d
#results[0] and [1] can be any order
}
It "Sort-Object with Non Existing And Null Property should work"{
$n = new-object microsoft.powershell.commands.newobjectcommand
$n.TypeName = $null
$d = new-object microsoft.powershell.commands.newobjectcommand
$d.TypeName = 'Deetype'
$b = new-object microsoft.powershell.commands.newobjectcommand
$b.TypeName = 'btype'
$a = new-object microsoft.powershell.commands.newobjectcommand
$a.TypeName = 'atype'
$results = $n, $d, $b, 'b', $a | Sort-Object -prop TypeName
$results.Count | Should Be 5
$results[0] | Should Be $n
$results[1] | Should Be $a
$results[2] | Should Be $b
$results[3] | Should Be $d
$results[4] | Should Be 'b'
}
It "Sort-Object with Non Case-Sensitive Unique should work"{
$employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5}
$employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15}
$employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12}
$employees = @($employee1,$employee2,$employee3)
$results = $employees | Sort-Object -Property "LastName" -Descending -Unique
$results[0] | Should Be $employees[2]
$results[1] | Should Be $employees[1]
$results[2] | Should BeNullOrEmpty
}
It "Sort-Object with Case-Sensitive Unique should work"{
$employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5}
$employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15}
$employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12}
$employees = @($employee1,$employee2,$employee3)
$results = $employees | Sort-Object -Property "LastName","FirstName" -Descending -Unique -CaseSensitive
$results[0] | Should Be $employees[2]
$results[1] | Should Be $employees[0]
$results[2] | Should Be $employees[1]
}
It "Sort-Object with Two Order Entry Keys should work"{
$employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5}
$employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15}
$employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2}
$employees = @($employee1,$employee2,$employee3)
$ht1 = @{"expression"="LastName"; "ascending"=$false}
$ht2 = @{"expression"="FirstName"; "ascending"=$true}
$results = $employees | Sort-Object -Property @($ht1,$ht2) -Descending
$results[0] | Should Be $employees[2]
$results[1] | Should Be $employees[1]
$results[2] | Should Be $employees[0]
}
It "Sort-Object with -Descending:$false and Two Order Entry Keys should work"{
$employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5}
$employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15}
$employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12}
$employees = @($employee1,$employee2,$employee3)
$results = $employees | Sort-Object -Property "LastName","FirstName" -Descending:$false
$results[0] | Should Be $employees[1]
$results[1] | Should Be $employees[0]
$results[2] | Should Be $employees[2]
}
It "Sort-Object with -Descending and Two Order Entry Keys should work"{
$employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5}
$employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15}
$employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12}
$employees = @($employee1,$employee2,$employee3)
$results = $employees | Sort-Object -Property "LastName","FirstName" -Descending
$results[0] | Should Be $employees[2]
$results[1] | Should Be $employees[0]
$results[2] | Should Be $employees[1]
}
It "Sort-Object with Two Order Entry Keys with asc=true should work"{
$employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5}
$employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15}
$employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12}
$employees = @($employee1,$employee2,$employee3)
$ht1 = @{"e"="FirstName"; "asc"=$true}
$ht2 = @{"e"="LastName";}
$results = $employees | Sort-Object -Property @($ht1,$ht2) -Descending
$results[0] | Should Be $employees[1]
$results[1] | Should Be $employees[2]
$results[2] | Should Be $employees[0]
}
It "Sort-Object with Descending No Property should work"{
$employee1 = 1
$employee2 = 2
$employee3 = 3
$employees = @($employee1,$employee2,$employee3)
$results = $employees | Sort-Object -Descending
$results[0] | Should Be 3
$results[1] | Should Be 2
$results[2] | Should Be 1
}
}