PowerShell/test/powershell/Language/Scripting/Array.Tests.ps1

143 lines
5.5 KiB
PowerShell

Describe "ArrayExpression Tests" -Tags "CI" {
It "@([object[]](1,2,3)) should return a 3-element array of object[]" {
$result = @([object[]](1,2,3))
$result.GetType().FullName | Should Be "System.Object[]"
$result.Length | Should Be 3
}
It "@([int[]](1,2,3)) should return a 3-element array of object[]" {
$result = @([int[]](1,2,3))
$result.GetType().FullName | Should Be "System.Object[]"
$result.Length | Should Be 3
}
It "@([object[]]`$null) should return a 1-element(`$null) array of object[]" {
$result = @([object[]]$null)
$result.GetType().FullName | Should Be "System.Object[]"
$result.Length | Should Be 1
$result[0] | Should Be $null
}
It "@([int[]]`$null) should return a 1-element(`$null) array of object[]" {
$result = @([int[]]$null)
$result.GetType().FullName | Should Be "System.Object[]"
$result.Length | Should Be 1
$result[0] | Should Be $null
}
It "@([object[]][System.Management.Automation.Internal.AutomationNull]::Value) should return a 1-element(`$null) array of object[]" {
$result = @([object[]][System.Management.Automation.Internal.AutomationNull]::Value)
$result.GetType().FullName | Should Be "System.Object[]"
$result.Length | Should Be 1
$result[0] | Should Be $null
}
It "@([int[]][System.Management.Automation.Internal.AutomationNull]::Value) should return a 1-element(`$null) array of object[]" {
$result = @([int[]][System.Management.Automation.Internal.AutomationNull]::Value)
$result.GetType().FullName | Should Be "System.Object[]"
$result.Length | Should Be 1
$result[0] | Should Be $null
}
It "@(`$null) should return a 1-element(`$null) array of object[]" {
$result = @($null)
$result.GetType().FullName | Should Be "System.Object[]"
$result.Length | Should Be 1
$result[0] | Should Be $null
}
It "@([System.Management.Automation.Internal.AutomationNull]::Value) should return an empty array of object[]" {
$result = @([System.Management.Automation.Internal.AutomationNull]::Value)
$result.GetType().FullName | Should Be "System.Object[]"
$result.Length | Should Be 0
}
It "@([object[]]`$a) should return a new array" {
$a = 1,2,3
$result = @([object[]]$a)
$result.GetType().FullName | Should Be "System.Object[]"
$result.Length | Should Be 3
}
It "@([int[]]`$a) should return a new array" {
$a = 1,2,3
$result = @([int[]]$a)
$result.GetType().FullName | Should Be "System.Object[]"
$result.Length | Should Be 3
}
It "@([System.Collections.Generic.List[object]]`$null) should return a 1-element(`$null) array of object[]" {
$result = @([System.Collections.Generic.List[object]]$null)
$result.GetType().FullName | Should Be "System.Object[]"
$result.Length | Should Be 1
$result[0] | Should Be $null
}
It "@([void](New-Item)) should create file" {
try {
$testFile = Join-Path $TestDrive (New-Guid)
$result = @([void](New-Item $testFile -ItemType File))
## file should be created
$testFile | Should Exist
## the array should be empty
$result.Count | Should Be 0
} finally {
Remove-Item $testFile -Force -ErrorAction SilentlyContinue
}
}
}
Describe "ArrayLiteral Tests" -Tags "CI" {
It "'[void](New-Item),2,3' should return a 3-element array and first element is AutomationNull" {
try {
$testFile = Join-Path $TestDrive (New-Guid)
$result = [void](New-Item $testFile -ItemType File), 2, 3
## file should be created
$testFile | Should Exist
## the array should contain 3 items
$result.Count | Should Be 3
## the first item should be AutomationNull
$result[0] | ForEach-Object { "YES" } | Should Be $null
$result | Measure-Object | ForEach-Object -MemberName Count | Should Be 2
} finally{
Remove-Item $testFile -Force -ErrorAction SilentlyContinue
}
}
It "'[void]1, [void](New-Item), [void]2' should return a 3-AutomationNull-element array" {
try {
$testFile = Join-Path $TestDrive (New-Guid)
$result = [void]1, [void](New-Item $testFile -ItemType File), [void]2
## file should be created
$testFile | Should Exist
## the array should contain 3 items
$result.Count | Should Be 3
## all items should be AutomationNull
$result | ForEach-Object { "YES" } | Should Be $null
} finally {
Remove-Item $testFile -Force -ErrorAction SilentlyContinue
}
}
It "'[void]`$arraylist1.Add(1), `$arraylist2.Clear()' should return a 2-AutomationNull-element array" {
$arraylist1 = [System.Collections.ArrayList]::new()
$arraylist2 = [System.Collections.ArrayList]::new()
$arraylist2.Add(2) > $null
$arraylist2.Count | Should Be 1
## first item is a non-void method call
## second item is a void method call
$result = [void]$arraylist1.Add(1), $arraylist2.Clear()
$result.Count | Should Be 2
$result | ForEach-Object { "YES" } | Should Be $null
$arraylist1.Count | Should Be 1
$arraylist1[0] | Should Be 1
$arraylist2.Count | Should Be 0
}
}