Tests/New-ElmTerminalDriver.Tests.ps1
|
BeforeAll { . $PSScriptRoot/../Private/Runtime/Invoke-ElmDriverLoop.ps1 . $PSScriptRoot/../Private/Drivers/New-ElmTerminalDriver.ps1 } Describe 'New-ElmTerminalDriver' { Context 'Return shape' { AfterEach { if ($driver) { try { & $driver.Stop } catch {} } } It 'Should return an object with an InputQueue property that is not null' { $driver = New-ElmTerminalDriver ($null -ne $driver.InputQueue) | Should -Be $true } It 'Should return an InputQueue that is a ConcurrentQueue of PSCustomObject' { $driver = New-ElmTerminalDriver $driver.InputQueue.GetType().Name | Should -Be 'ConcurrentQueue`1' } It 'Should return an object with a Stop property' { $driver = New-ElmTerminalDriver $driver.Stop | Should -Not -BeNullOrEmpty } It 'Should return a Stop that is a scriptblock' { $driver = New-ElmTerminalDriver $driver.Stop | Should -BeOfType [scriptblock] } It 'Should return an object with a Loop property' { $driver = New-ElmTerminalDriver $driver.Loop | Should -Not -BeNullOrEmpty } } Context 'Stop behaviour' { It 'Should stop without throwing when invoked' { $driver = New-ElmTerminalDriver { & $driver.Stop } | Should -Not -Throw } It 'Should close the background runspace when Stop is invoked' { $driver = New-ElmTerminalDriver & $driver.Stop $state = $driver.Loop.Runspace.RunspaceStateInfo.State $state | Should -BeIn @('Closed', 'Closing', 'Broken') } } } |