parent
76b88225ab
commit
d601eb9ea9
51
src/core.ps1
51
src/core.ps1
|
@ -8,27 +8,39 @@ $ErrorActionPreference = "Stop"
|
|||
$NamespaceDelimiter = ":"
|
||||
|
||||
# idempotently applies a requirement
|
||||
function applyRequirement([Requirement]$Requirement) {
|
||||
$result = $false
|
||||
if ($Requirement.Test) {
|
||||
[RequirementEvent]::new($Requirement, "Test", "Start")
|
||||
$result = &$Requirement.Test
|
||||
[RequirementEvent]::new($Requirement, "Test", "Stop", $result)
|
||||
}
|
||||
if (-not $result) {
|
||||
if ($Requirement.Set) {
|
||||
[RequirementEvent]::new($Requirement, "Set", "Start")
|
||||
$result = &$Requirement.Set
|
||||
[RequirementEvent]::new($Requirement, "Set", "Stop", $result)
|
||||
}
|
||||
if ($Requirement.Test -and $Requirement.Set) {
|
||||
[RequirementEvent]::new($Requirement, "Validate", "Start")
|
||||
$result = &$Requirement.Test
|
||||
[RequirementEvent]::new($Requirement, "Validate", "Stop", $result)
|
||||
if (-not $result) {
|
||||
function applyRequirement {
|
||||
[CmdletBinding()]
|
||||
Param([Requirement]$Requirement)
|
||||
switch (("Test", "Set" | ? { $Requirement.$_ }) -join "-") {
|
||||
"Test" {
|
||||
[RequirementEvent]::new($Requirement, "Test", "Start")
|
||||
$testResult = &$Requirement.Test
|
||||
[RequirementEvent]::new($Requirement, "Test", "Stop", $testResult)
|
||||
if (-not $testResult) {
|
||||
Write-Error "Failed to apply Requirement '$($Requirement.Describe)'"
|
||||
}
|
||||
}
|
||||
"Set" {
|
||||
[RequirementEvent]::new($Requirement, "Set", "Start")
|
||||
$setResult = &$Requirement.Set
|
||||
[RequirementEvent]::new($Requirement, "Set", "Stop", $setResult)
|
||||
}
|
||||
"Test-Set" {
|
||||
[RequirementEvent]::new($Requirement, "Test", "Start")
|
||||
$testResult = &$Requirement.Test
|
||||
[RequirementEvent]::new($Requirement, "Test", "Stop", $testResult)
|
||||
if (-not $testResult) {
|
||||
[RequirementEvent]::new($Requirement, "Set", "Start")
|
||||
$setResult = &$Requirement.Set
|
||||
[RequirementEvent]::new($Requirement, "Set", "Stop", $setResult)
|
||||
[RequirementEvent]::new($Requirement, "Validate", "Start")
|
||||
$validateResult = &$Requirement.Test
|
||||
[RequirementEvent]::new($Requirement, "Validate", "Stop", $validateResult)
|
||||
if (-not $validateResult) {
|
||||
Write-Error "Failed to apply Requirement '$($Requirement.Describe)'"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,8 +67,7 @@ function testRequirements([Requirement[]]$Requirements) {
|
|||
function sortRequirements([Requirement[]]$Requirements) {
|
||||
$stages = @()
|
||||
while ($Requirements) {
|
||||
$nextStages = $Requirements `
|
||||
| ? { -not ($_.DependsOn | ? { $_ -notin $stages.Namespace }) }
|
||||
$nextStages = $Requirements | ? { -not ($_.DependsOn | ? { $_ -notin $stages.Namespace }) }
|
||||
if (-not $nextStages) {
|
||||
throw "Could not resolve the dependencies for Requirements with names: $($Requirements.Namespace -join ', ')"
|
||||
}
|
||||
|
|
|
@ -44,12 +44,12 @@ Describe "Core" {
|
|||
}
|
||||
$script:SetIfNoTest | Should -BeTrue
|
||||
}
|
||||
It "Should not 'Test' if no 'Set' is provided" {
|
||||
It "Should 'Test' once if no 'Set' is provided" {
|
||||
$script:NotTestIfNoSet = 0
|
||||
applyRequirement @{
|
||||
Describe = "Simple Requirement"
|
||||
Test = { $script:NotTestIfNoSet++ }
|
||||
}
|
||||
} -ErrorAction SilentlyContinue
|
||||
$script:NotTestIfNoSet | Should -Be 1
|
||||
}
|
||||
It "Should output all log events" {
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
02:59:01 ns>MyDescribe
|
||||
|
||||
√ 02:59:01 ns>MyDescribe
|
||||
08:21:28 ns>MyDescribe
|
||||
|
||||
√ 08:21:28 ns>MyDescribe
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
02:59:01 ns>MyDescribe
|
||||
|
||||
√ 02:59:01 ns>MyDescribe
|
||||
08:21:27 ns>MyDescribe
|
||||
|
||||
√ 08:21:27 ns>MyDescribe
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
02:59:01 ns>MyDescribe
|
||||
|
||||
√ 02:59:01 ns>MyDescribe
|
||||
08:21:27 ns>MyDescribe
|
||||
|
||||
√ 08:21:27 ns>MyDescribe
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
Date Method State Result Requirement
|
||||
---- ------ ----- ------ -----------
|
||||
11/17/19 2:59:01 PM Set Start ns>MyDescribe
|
||||
11/17/19 2:59:01 PM Set Stop True ns>MyDescribe
|
||||
|
||||
|
||||
Date Method State Result Requirement
|
||||
---- ------ ----- ------ -----------
|
||||
11/26/2019 8:21:28 PM Set Start ns>MyDescribe
|
||||
11/26/2019 8:21:28 PM Set Stop True ns>MyDescribe
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
Date Method State Result Requirement
|
||||
---- ------ ----- ------ -----------
|
||||
11/17/19 2:59:01 PM Test Start ns>MyDescribe
|
||||
11/17/19 2:59:01 PM Test Stop True ns>MyDescribe
|
||||
|
||||
|
||||
Date Method State Result Requirement
|
||||
---- ------ ----- ------ -----------
|
||||
11/26/2019 8:21:27 PM Test Start ns>MyDescribe
|
||||
11/26/2019 8:21:27 PM Test Stop True ns>MyDescribe
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
|
||||
Date Method State Result Requirement
|
||||
---- ------ ----- ------ -----------
|
||||
11/17/19 2:59:01 PM Test Start ns>MyDescribe
|
||||
11/17/19 2:59:01 PM Test Stop False ns>MyDescribe
|
||||
11/17/19 2:59:01 PM Set Start ns>MyDescribe
|
||||
11/17/19 2:59:01 PM Set Stop True ns>MyDescribe
|
||||
11/17/19 2:59:01 PM Validate Start ns>MyDescribe
|
||||
11/17/19 2:59:01 PM Validate Stop True ns>MyDescribe
|
||||
|
||||
|
||||
Date Method State Result Requirement
|
||||
---- ------ ----- ------ -----------
|
||||
11/26/2019 8:21:27 PM Test Start ns>MyDescribe
|
||||
11/26/2019 8:21:27 PM Test Stop False ns>MyDescribe
|
||||
11/26/2019 8:21:27 PM Set Start ns>MyDescribe
|
||||
11/26/2019 8:21:27 PM Set Stop True ns>MyDescribe
|
||||
11/26/2019 8:21:27 PM Validate Start ns>MyDescribe
|
||||
11/26/2019 8:21:27 PM Validate Stop True ns>MyDescribe
|
||||
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
2019-11-17 14:59:01 Set Start ns>MyDescribe
|
||||
2019-11-17 14:59:01 Set Stop ns>MyDescribe
|
||||
2019-11-26 20:21:28 Set Start ns>MyDescribe
|
||||
2019-11-26 20:21:28 Set Stop ns>MyDescribe
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
2019-11-17 14:59:01 Test Start ns>MyDescribe
|
||||
2019-11-17 14:59:01 Test Stop ns>MyDescribe
|
||||
2019-11-26 20:21:27 Test Start ns>MyDescribe
|
||||
2019-11-26 20:21:27 Test Stop ns>MyDescribe
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
2019-11-17 14:59:01 Test Start ns>MyDescribe
|
||||
2019-11-17 14:59:01 Test Stop ns>MyDescribe
|
||||
2019-11-17 14:59:01 Set Start ns>MyDescribe
|
||||
2019-11-17 14:59:01 Set Stop ns>MyDescribe
|
||||
2019-11-17 14:59:01 Validate Start ns>MyDescribe
|
||||
2019-11-17 14:59:01 Validate Stop ns>MyDescribe
|
||||
2019-11-26 20:21:27 Test Start ns>MyDescribe
|
||||
2019-11-26 20:21:27 Test Stop ns>MyDescribe
|
||||
2019-11-26 20:21:27 Set Start ns>MyDescribe
|
||||
2019-11-26 20:21:27 Set Stop ns>MyDescribe
|
||||
2019-11-26 20:21:27 Validate Start ns>MyDescribe
|
||||
2019-11-26 20:21:27 Validate Stop ns>MyDescribe
|
||||
|
|
Loading…
Reference in New Issue