Examples/Gherkin/VariableScope.Steps.ps1

When 'I (?:set|initialize) the variable (?<Name>[\w:]+) to "(?<Value>[^"]+)"' {
    param($Name, $Value)

    switch($Name)
    {
        "One" { $One = $Value }
        "Two" { $Two = $Value }
        "Script:Two" { $Script:Two = $Value }
    }
}

Given 'I initialize variables One and (?<Script>.+:)?Two to "Uno" and "Dos"' {
    param($Script)
    $One = "Uno"

    if($Script) {
        $Script:Two = "Dos"
    } else {
        $Two = "Dos"
    }
}


Then 'the variable ([\w:]+) should be "([^"]+)"' {
    param($Name, $Value)

    $Result = switch($Name)
    {
        "One" { $One }
        "Two" { $Two  }
        "Script:Two" { $Script:Two }
    }
    $Result | Should Be $Value
}

Then "the variable ([\w:]+) should not exist" {
    param($Name)

    switch($Name)
    {
        "One" {
            Test-Path Variable:One | Should Be $False
        }
        "Two" {
            Test-Path Variable:Two | Should Be $False
        }
        "Script:Two" {
            Test-Path Variable:Script:Two | Should Be $False
        }
    }
}

BeforeEachFeature {
    Remove-Variable One -ErrorAction SilentlyContinue
    Remove-Variable Two -ErrorAction SilentlyContinue
    Remove-Variable Two -Scope Script -ErrorAction SilentlyContinue
}

# Not using this BACKGROUND Given anymore, we're using a BeforeEachFeature instead
# That way we only clear the variable at the beginning of the test
Given "I ensure variables ([\w:]+) and ([\w:]+) are not set" {
    param(
        [Parameter(ValueFromRemainingArguments=$True)]
        [string[]]$names
    )

    foreach($name in $Names) {
        Remove-Variable -Name $Name -ErrorAction SilentlyContinue
    }
}