Files
PowerShell-PowerShell/test/powershell/engine/COM/COM.Basic.Tests.ps1
T
Dongbo Wang befc5f8ae1 Make PowerShell Core enumerate COM collections (#4553)
Make PowerShell Core enumerate COM collections
2017-08-17 20:23:36 +04:00

49 lines
2.1 KiB
PowerShell

try {
$defaultParamValues = $PSdefaultParameterValues.Clone()
$PSDefaultParameterValues["it:skip"] = ![System.Management.Automation.Platform]::IsWindowsDesktop
Describe 'Basic COM Tests' -Tags "CI" {
BeforeAll {
$null = New-Item -Path $TESTDRIVE/file1 -ItemType File
$null = New-Item -Path $TESTDRIVE/file2 -ItemType File
$null = New-Item -Path $TESTDRIVE/file3 -ItemType File
}
It "Should enumerate files from a folder" {
$shell = New-Object -ComObject "Shell.Application"
$folder = $shell.Namespace("$TESTDRIVE")
$items = $folder.Items()
## $items is a collection of all items belong to the folder, and it should be enumerated.
$items | Measure-Object | ForEach-Object Count | Should Be $items.Count
}
It "Should enumerate IEnumVariant interface object without exception" {
$shell = New-Object -ComObject "Shell.Application"
$folder = $shell.Namespace("$TESTDRIVE")
$items = $folder.Items()
## $enumVariant is an IEnumVariant interface of all items belong to the folder, and it should be enumerated.
$enumVariant = $items._NewEnum()
$enumVariant | Measure-Object | ForEach-Object Count | Should Be $items.Count
}
It "Should enumerate drives" {
$fileSystem = New-Object -ComObject scripting.filesystemobject
$drives = $fileSystem.Drives
## $drives is a read-only collection of all available drives, and it should be enumerated.
$drives | Measure-Object | ForEach-Object Count | Should Be $drives.Count
## $element should be the first drive from the enumeration. It shouldn't be the same as $drives,
## but it should be the same as '$drives.Item($element.DriveLetter)'
$element = $drives | Select-Object -First 1
[System.Object]::ReferenceEquals($element, $drives) | Should Be $false
$element | Should Be $drives.Item($element.DriveLetter)
}
}
} finally {
$global:PSdefaultParameterValues = $defaultParamValues
}