mirror of
https://github.com/PowerShell/PowerShell
synced 2026-06-08 12:12:50 +00:00
* Fix GetType() bad pattern and related issues in tests $var.GetType() can raise an exception in tests so we should check $var before make the call. A large part of the tests does not make this check. I start with searching ".GetType()" but discovered many related issues in tests (reduntant and unneeded tests, "throw" bad pattens, bugs, formattings (sorry!) and so on) - I had to fix them too. * Fix after code review * Second wave of migration GetType() -> BeOfType Removed 'GetType().Name' patterns.
101 lines
4.9 KiB
PowerShell
101 lines
4.9 KiB
PowerShell
Describe "Object cmdlets" -Tags "CI" {
|
|
Context "Group-Object" {
|
|
It "AsHashtable returns a hashtable" {
|
|
$result = Get-Process | Group-Object -Property ProcessName -AsHashTable
|
|
$result["powershell"].Count | Should BeGreaterThan 0
|
|
}
|
|
|
|
It "AsString returns a string" {
|
|
$processes = Get-Process | Group-Object -Property ProcessName -AsHashTable -AsString
|
|
$result = $processes.Keys | ForEach-Object {$_.GetType()}
|
|
$result[0].Name | Should Be "String"
|
|
}
|
|
}
|
|
|
|
Context "Tee-Object" {
|
|
It "with literal path" {
|
|
$path = "TestDrive:\[TeeObjectLiteralPathShouldWorkForSpecialFilename].txt"
|
|
Write-Output "Test" | Tee-Object -LiteralPath $path | Tee-Object -Variable TeeObjectLiteralPathShouldWorkForSpecialFilename
|
|
$TeeObjectLiteralPathShouldWorkForSpecialFilename | Should Be (Get-Content -LiteralPath $path)
|
|
}
|
|
}
|
|
}
|
|
|
|
Describe "Object cmdlets" -Tags "CI" {
|
|
Context "Measure-Object" {
|
|
BeforeAll {
|
|
## Powershell language prefers , as an array separator without "".
|
|
## If a number has comma in them it considers it to be the 1000 separator like "1,000".
|
|
## In de-DE language the comma is used as decimal point, but powershell still uses it as a 1000 separator.
|
|
## In case the number has a comma, it is ignored. So, "99,1" becomes 991.
|
|
## To work around that behavior, we use ToString() on the expected answer and . for decimal in the input.
|
|
|
|
$firstValue = "9995788.71"
|
|
$expectedFirstValue = $null
|
|
$null = [System.Management.Automation.LanguagePrimitives]::TryConvertTo($firstValue, [double], [cultureinfo]::InvariantCulture, [ref] $expectedFirstValue)
|
|
$firstObject = new-object psobject
|
|
$firstObject | Add-Member -NotePropertyName Header -NotePropertyValue $firstValue
|
|
|
|
$secondValue = "15847577.7"
|
|
$expectedSecondValue = $null
|
|
$null = [System.Management.Automation.LanguagePrimitives]::TryConvertTo($secondValue, [double], [cultureinfo]::InvariantCulture, [ref] $expectedSecondValue)
|
|
$secondObject = new-object psobject
|
|
$secondObject | Add-Member -NotePropertyName Header -NotePropertyValue $secondValue
|
|
|
|
$testCases = @(
|
|
@{ data = @("abc","ABC","Def"); min = "abc"; max = "Def"},
|
|
@{ data = @([datetime]::Today, [datetime]::Today.AddDays(-1)); min = ([datetime]::Today.AddDays(-1)).ToString() ; max = [datetime]::Today.ToString() }
|
|
@{ data = @(1,2,3,"ABC"); min = 1; max = "ABC"},
|
|
@{ data = @(4,2,3,"ABC",1); min = 1; max = "ABC"},
|
|
@{ data = @(4,2,3,"ABC",1,"DEF"); min = 1; max = "DEF"},
|
|
@{ data = @("111 Test","19"); min = "111 Test"; max = "19"},
|
|
@{ data = @("19", "111 Test"); min = "111 Test"; max = "19"},
|
|
@{ data = @("111 Test",19); min = "111 Test"; max = 19},
|
|
@{ data = @(19, "111 Test"); min = "111 Test"; max = 19},
|
|
@{ data = @(100,2,3, "A", 1); min = 1; max = "A"},
|
|
@{ data = @(4,2,3, "ABC", 1, "DEF"); min = 1; max = "DEF"},
|
|
@{ data = @("abc",[Datetime]::Today,"def"); min = [Datetime]::Today.ToString(); max = "def"}
|
|
)
|
|
}
|
|
|
|
It "can compare string representation for minimum" {
|
|
$minResult = $firstObject, $secondObject | Measure-Object Header -Minimum
|
|
$minResult.Minimum.ToString() | Should Be $expectedFirstValue.ToString()
|
|
}
|
|
|
|
It "can compare string representation for maximum" {
|
|
$maxResult = $firstObject, $secondObject | Measure-Object Header -Maximum
|
|
$maxResult.Maximum.ToString() | Should Be $expectedSecondValue.ToString()
|
|
}
|
|
|
|
It 'correctly find minimum of (<data>)' -TestCases $testCases {
|
|
param($data, $min, $max)
|
|
|
|
$output = $data | Measure-Object -Minimum
|
|
$output.Minimum.ToString() | Should Be $min
|
|
}
|
|
|
|
It 'correctly find maximum of (<data>)' -TestCases $testCases {
|
|
param($data, $min, $max)
|
|
|
|
$output = $data | Measure-Object -Maximum
|
|
$output.Maximum.ToString() | Should Be $max
|
|
}
|
|
|
|
It 'returns a GenericMeasureInfoObject' {
|
|
$gmi = 1,2,3 | measure-object -max -min
|
|
$gmi | Should BeOfType Microsoft.PowerShell.Commands.GenericMeasureInfo
|
|
}
|
|
|
|
It 'should return correct error for non-numeric input' {
|
|
$gmi = "abc",[Datetime]::Now | measure -sum -max -ev err -ea silentlycontinue
|
|
$err | % { $_.FullyQualifiedErrorId | Should Be 'NonNumericInputObject,Microsoft.PowerShell.Commands.MeasureObjectCommand' }
|
|
}
|
|
|
|
It 'should have the correct count' {
|
|
$gmi = "abc",[Datetime]::Now | measure -sum -max -ev err -ea silentlycontinue
|
|
$gmi.Count | Should Be 2
|
|
}
|
|
}
|
|
}
|