mirror of
https://github.com/PowerShell/PowerShell
synced 2026-06-08 12:12:50 +00:00
Wait-Process: add -Any and -PassThru parameters (#19423)
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
|
||||
Describe "Wait-Process" {
|
||||
|
||||
BeforeAll {
|
||||
$pingCommandPath = (Get-Command -CommandType Application ping)[0].Definition
|
||||
|
||||
$startProcessArgs = @{
|
||||
FilePath = $pingCommandPath
|
||||
PassThru = $true
|
||||
}
|
||||
$nc = $IsWindows ? "-n" : "-c"
|
||||
|
||||
function longPing { Start-Process @startProcessArgs -ArgumentList "$nc 10 localhost" }
|
||||
function shortPing { Start-Process @startProcessArgs -ArgumentList "$nc 2 localhost" }
|
||||
}
|
||||
|
||||
BeforeEach {
|
||||
$Processes = @( 1..3 | ForEach-Object { longPing } ) + ($shortPing = shortPing)
|
||||
}
|
||||
|
||||
AfterEach {
|
||||
Stop-Process -InputObject $Processes
|
||||
}
|
||||
|
||||
It "Should wait until all processes have exited" {
|
||||
Wait-Process -InputObject $Processes
|
||||
|
||||
$Processes.Where({$_.HasExited -eq $true}).Count | Should -Be $Processes.Count
|
||||
}
|
||||
|
||||
It "Should return after all processes have exited, even if some exit before the wait starts." {
|
||||
Wait-UntilTrue -sb { $shortPing.HasExited -eq $true } -IntervalInMilliseconds 100
|
||||
Wait-Process -InputObject $Processes
|
||||
|
||||
$Processes.Where({$_.HasExited -eq $true}).Count | Should -Be $Processes.Count
|
||||
}
|
||||
|
||||
It "Should return immediately if all processes have exited before the wait starts" {
|
||||
Wait-UntilTrue -sb { $Processes.HasExited -NotContains $false } -IntervalInMilliseconds 100
|
||||
Wait-Process -InputObject $Processes
|
||||
|
||||
$Processes.Where({$_.HasExited -eq $true}).Count | Should -Be $Processes.Count
|
||||
}
|
||||
|
||||
It "Should return immediately if at least one process has exited before the wait starts" {
|
||||
Wait-UntilTrue -sb { $shortPing.HasExited -eq $true } -IntervalInMilliseconds 100
|
||||
Wait-Process -InputObject $Processes -Any
|
||||
|
||||
$Processes.Where({$_.HasExited -eq $true}).Count | Should -Be 1
|
||||
$Processes.Where({$_.HasExited -eq $false}).Count | Should -Be ($Processes.Count - 1)
|
||||
}
|
||||
|
||||
It "Should wait until any one process has exited" {
|
||||
Wait-Process -InputObject $Processes -Any
|
||||
|
||||
$Processes.Where({$_.HasExited -eq $true}).Count | Should -Be 1
|
||||
$Processes.Where({$_.HasExited -eq $false}).Count | Should -Be ($Processes.Count - 1)
|
||||
}
|
||||
|
||||
It "Should passthru all processes when all processes have exited" {
|
||||
$PassThruProcesses = Wait-Process -InputObject $Processes -PassThru
|
||||
|
||||
$PassThruProcesses.Where({$_.HasExited -eq $true}).Count | Should -Be $Processes.Count
|
||||
}
|
||||
|
||||
It "Should passthru all processes when any one process has exited" {
|
||||
$PassThruProcesses = Wait-Process -InputObject $Processes -Any -PassThru
|
||||
|
||||
$PassThruProcesses.Where({$_.HasExited -eq $true}).Count | Should -Be 1
|
||||
$PassThruProcesses.Where({$_.HasExited -eq $false}).Count | Should -Be ($Processes.Count - 1)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user