Failed Test without Set should throw error (#56)

* test => false throws

* fixed #54
bugfix
Chris Kuech 2019-11-26 20:28:28 -08:00 committed by GitHub
parent 76b88225ab
commit d601eb9ea9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 74 additions and 63 deletions

View File

@ -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 ', ')"
}

View File

@ -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" {

View File

@ -1,3 +1,3 @@
02:59:01 ns>MyDescribe
√ 02:59:01 ns>MyDescribe
08:21:28 ns>MyDescribe
√ 08:21:28 ns>MyDescribe

View File

@ -1,3 +1,3 @@
02:59:01 ns>MyDescribe
√ 02:59:01 ns>MyDescribe
08:21:27 ns>MyDescribe
√ 08:21:27 ns>MyDescribe

View File

@ -1,3 +1,3 @@
02:59:01 ns>MyDescribe
√ 02:59:01 ns>MyDescribe
08:21:27 ns>MyDescribe
√ 08:21:27 ns>MyDescribe

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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