diff --git a/test/powershell/Sort-Object.Tests.ps1 b/test/powershell/Sort-Object.Tests.ps1 index 9395e957c..4ed3ef43d 100644 --- a/test/powershell/Sort-Object.Tests.ps1 +++ b/test/powershell/Sort-Object.Tests.ps1 @@ -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 + } +} \ No newline at end of file