Merge pull request #881 from PowerShell/andschwa/fix-clear-variable-test

Fix clear variable test
This commit is contained in:
Andy Schwartzmeyer 2016-04-20 14:27:02 -07:00
commit efc24f1976

View file

@ -1,4 +1,3 @@
Describe "Clear-Variable DRT Unit Tests" -Tags DRT{ Describe "Clear-Variable DRT Unit Tests" -Tags DRT{
It "Clear-Variable normal variable Name should works"{ It "Clear-Variable normal variable Name should works"{
Set-Variable foo bar Set-Variable foo bar
@ -9,19 +8,19 @@ Describe "Clear-Variable DRT Unit Tests" -Tags DRT{
$var1.Options|Should Be "None" $var1.Options|Should Be "None"
$var1.Description|Should Be "" $var1.Description|Should Be ""
} }
It "Clear-Variable ReadOnly variable Name should throw exception and force Clear-Variable should works"{ It "Clear-Variable ReadOnly variable Name should throw exception and force Clear-Variable should works"{
Set-Variable foo bar -Option ReadOnly Set-Variable foo bar -Option ReadOnly
try { try {
Clear-Variable -Name foo -EA Stop Clear-Variable -Name foo -EA Stop
Throw "Execution OK" Throw "Execution OK"
} }
catch { catch {
$_.CategoryInfo| Should Match "SessionStateUnauthorizedAccessException" $_.CategoryInfo| Should Match "SessionStateUnauthorizedAccessException"
$_.FullyQualifiedErrorId | Should Be "VariableNotWritable,Microsoft.PowerShell.Commands.ClearVariableCommand" $_.FullyQualifiedErrorId | Should Be "VariableNotWritable,Microsoft.PowerShell.Commands.ClearVariableCommand"
} }
Clear-Variable -Name foo -Force Clear-Variable -Name foo -Force
$var1=Get-Variable -Name foo $var1=Get-Variable -Name foo
$var1.Name|Should Be "foo" $var1.Name|Should Be "foo"
@ -29,68 +28,67 @@ Describe "Clear-Variable DRT Unit Tests" -Tags DRT{
$var1.Options|Should Be "ReadOnly" $var1.Options|Should Be "ReadOnly"
$var1.Description|Should Be "" $var1.Description|Should Be ""
} }
It "Clear-Variable normal variable Name with local scope should works"{ It "Clear-Variable normal variable Name with local scope should works"{
Set-Variable foo bar Set-Variable foo bar
&{ &{
Set-Variable foo baz Set-Variable foo baz
$foo | should be baz $foo | should be baz
Clear-Variable -Name foo -Scope "local" Clear-Variable -Name foo -Scope "local"
$var1=Get-Variable -Name foo -Scope "local" $var1=Get-Variable -Name foo -Scope "local"
$var1.Name|Should Be "foo" $var1.Name|Should Be "foo"
$var1.Value|Should Be $null $var1.Value|Should Be $null
$var1.Options|Should Be "None" $var1.Options|Should Be "None"
$var1.Description|Should Be "" $var1.Description|Should Be ""
} }
$var1=Get-Variable -Name foo $var1=Get-Variable -Name foo
$var1.Name|Should Be "foo" $var1.Name|Should Be "foo"
$var1.Value|Should Be "bar" $var1.Value|Should Be "bar"
$var1.Options|Should Be "None" $var1.Options|Should Be "None"
$var1.Description|Should Be "" $var1.Description|Should Be ""
} }
It "Clear-Variable Private variable Name should works and Get-Variable with local scope should throw exception"{ It "Clear-Variable Private variable Name should works and Get-Variable with local scope should throw exception"{
Set-Variable foo bar -Option Private Set-Variable foo bar -Option Private
&{ &{
Clear-Variable -Name foo
try { try {
Get-Variable -Name foo -Scope local -EA Stop Get-Variable -Name foo -Scope local -EA Stop
Throw "Execution OK" Throw "Execution OK"
} }
catch { catch {
$_.CategoryInfo| Should Match "ItemNotFoundException" $_.CategoryInfo| Should Match "ItemNotFoundException"
$_.FullyQualifiedErrorId | Should Be "VariableNotFound,Microsoft.PowerShell.Commands.GetVariableCommand" $_.FullyQualifiedErrorId | Should Be "VariableNotFound,Microsoft.PowerShell.Commands.GetVariableCommand"
} }
} }
$var1=Get-Variable -Name foo $var1=Get-Variable -Name foo
$var1.Name|Should Be "foo" $var1.Name|Should Be "foo"
$var1.Value|Should Be "bar" $var1.Value|Should Be "bar"
$var1.Options|Should Be "Private" $var1.Options|Should Be "Private"
$var1.Description|Should Be "" $var1.Description|Should Be ""
} }
It "Clear-Variable normal variable Name with local scope should works in different scope"{ It "Clear-Variable normal variable Name with local scope should works in different scope"{
Set-Variable foo bar Set-Variable foo bar
&{ &{
Set-Variable foo baz Set-Variable foo baz
Clear-Variable -Name foo -Scope "local" Clear-Variable -Name foo -Scope "local"
$var1=Get-Variable -Name foo -Scope "local" $var1=Get-Variable -Name foo -Scope "local"
$var1.Name|Should Be "foo" $var1.Name|Should Be "foo"
$var1.Value|Should Be $null $var1.Value|Should Be $null
$var1.Options|Should Be "None" $var1.Options|Should Be "None"
$var1.Description|Should Be "" $var1.Description|Should Be ""
} }
$var1=Get-Variable -Name foo $var1=Get-Variable -Name foo
$var1.Name|Should Be "foo" $var1.Name|Should Be "foo"
$var1.Value|Should Be "bar" $var1.Value|Should Be "bar"
$var1.Options|Should Be "None" $var1.Options|Should Be "None"
$var1.Description|Should Be "" $var1.Description|Should Be ""
$var1=Get-Variable -Name foo -Scope "local" $var1=Get-Variable -Name foo -Scope "local"
$var1.Name|Should Be "foo" $var1.Name|Should Be "foo"
$var1.Value|Should Be "bar" $var1.Value|Should Be "bar"
@ -100,29 +98,29 @@ Describe "Clear-Variable DRT Unit Tests" -Tags DRT{
} }
Describe "Clear-Variable" { Describe "Clear-Variable" {
BeforeEach { BeforeEach {
$var1 = 3 $var1 = 3
} }
It "Should be able to clear a variable using the Name switch" { It "Should be able to clear a variable using the Name switch" {
Clear-Variable -Name var1 Clear-Variable -Name var1
$var1 | Should BeNullOrEmpty $var1 | Should BeNullOrEmpty
{ Get-Variable var1 } | Should Not Throw { Get-Variable var1 } | Should Not Throw
} }
It "Should be able to clear a variable without using the Name switch" { It "Should be able to clear a variable without using the Name switch" {
Clear-Variable var1 Clear-Variable var1
$var1 | Should BeNullOrEmpty $var1 | Should BeNullOrEmpty
{ Get-Variable var1 } | Should Not Throw { Get-Variable var1 } | Should Not Throw
} }
It "Should work using the clv alias" { It "Should work using the clv alias" {
clv -Name var1 clv -Name var1
$var1 | Should BeNullOrEmpty $var1 | Should BeNullOrEmpty
{ Get-Variable var1 } | Should Not Throw { Get-Variable var1 } | Should Not Throw
} }
It "Should be able to include a set of variables to clear" { It "Should be able to include a set of variables to clear" {
$var1 = 2 $var1 = 2
$var2 = 3 $var2 = 3
$var3 = 4 $var3 = 4
@ -142,9 +140,9 @@ Describe "Clear-Variable" {
$var2 | Should Not BeNullOrEmpty $var2 | Should Not BeNullOrEmpty
$var3 | Should Not BeNullOrEmpty $var3 | Should Not BeNullOrEmpty
} }
It "Should be able to exclude a set of variables to clear" { It "Should be able to exclude a set of variables to clear" {
$var1 = 2 $var1 = 2
$var2 = 3 $var2 = 3
$var3 = 4 $var3 = 4
@ -163,19 +161,19 @@ Describe "Clear-Variable" {
$var3 | Should Not BeNullOrEmpty $var3 | Should Not BeNullOrEmpty
$w | Should BeNullOrEmpty $w | Should BeNullOrEmpty
} }
It "Should be able to pass the cleared object through the pipeline using the passthru switch" { It "Should be able to pass the cleared object through the pipeline using the passthru switch" {
{ Clear-Variable -Name var1 -PassThru | Format-Wide -Property Value } | Should Not Throw { Clear-Variable -Name var1 -PassThru | Format-Wide -Property Value } | Should Not Throw
} }
It "Should not clear environment variables" { It "Should not clear environment variables" {
$env:TEMPVARIABLE = "test data" $env:TEMPVARIABLE = "test data"
{Clear-Variable -Name env:TEMPVARIABLE -ErrorAction Stop} | Should Throw {Clear-Variable -Name env:TEMPVARIABLE -ErrorAction Stop} | Should Throw
} }
It "Should clear variable even if it is read-only using the Force parameter" { It "Should clear variable even if it is read-only using the Force parameter" {
try try
{ {
New-Variable -Name var2 -Option ReadOnly -Value 100 New-Variable -Name var2 -Option ReadOnly -Value 100
@ -190,9 +188,9 @@ Describe "Clear-Variable" {
{ {
Remove-Variable -Name var2 -Force Remove-Variable -Name var2 -Force
} }
} }
It "Should throw error when trying to clear variable that is read-only without using the Force parameter" { It "Should throw error when trying to clear variable that is read-only without using the Force parameter" {
New-Variable -Name var2 -Option ReadOnly -Value 100 New-Variable -Name var2 -Option ReadOnly -Value 100
try { try {
Clear-Variable -Name var2 -ea stop Clear-Variable -Name var2 -ea stop
@ -204,67 +202,67 @@ Describe "Clear-Variable" {
$var2 | Should Not BeNullOrEmpty $var2 | Should Not BeNullOrEmpty
Remove-Variable -Name var2 -Force Remove-Variable -Name var2 -Force
} }
Context "Scope Tests" { Context "Scope Tests" {
# This will violate the DRY principle. Tread softly. # This will violate the DRY principle. Tread softly.
It "Should be able to clear a global scope variable using the global switch" { It "Should be able to clear a global scope variable using the global switch" {
New-Variable globalVar -Value 1 -Scope global -Force New-Variable globalVar -Value 1 -Scope global -Force
Clear-Variable -Name globalVar -Scope global Clear-Variable -Name globalVar -Scope global
$globalVar | Should BeNullOrEmpty $globalVar | Should BeNullOrEmpty
} }
It "Should not be able to clear a global scope variable using the local switch" { It "Should not be able to clear a global scope variable using the local switch" {
New-Variable globalVar -Value 1 -Scope global -Force New-Variable globalVar -Value 1 -Scope global -Force
{Clear-Variable -Name globalVar -Scope local -ErrorAction Stop} | Should Throw {Clear-Variable -Name globalVar -Scope local -ErrorAction Stop} | Should Throw
} }
It "Should not be able to clear a global variable using the script scope switch" { It "Should not be able to clear a global variable using the script scope switch" {
New-Variable globalVar -Value 1 -Scope global -Force New-Variable globalVar -Value 1 -Scope global -Force
{Clear-Variable -Name localVar -Scope script -ErrorAction Stop} | Should Throw {Clear-Variable -Name localVar -Scope script -ErrorAction Stop} | Should Throw
} }
It "Should be able to clear an item locally using the local switch" { It "Should be able to clear an item locally using the local switch" {
New-Variable localVar -Value 2 -Scope local -Force New-Variable localVar -Value 2 -Scope local -Force
Clear-Variable -Name localVar -Scope local Clear-Variable -Name localVar -Scope local
$localVar | Should BeNullOrEmpty $localVar | Should BeNullOrEmpty
{Clear-Variable -Name localVar -Scope script -ErrorAction Stop} | Should Throw {Clear-Variable -Name localVar -Scope script -ErrorAction Stop} | Should Throw
} }
It "Should not be able to clear an item locally using the global switch" { It "Should not be able to clear an item locally using the global switch" {
New-Variable localVar -Value 2 -Scope local -Force New-Variable localVar -Value 2 -Scope local -Force
{Clear-Variable -Name localVar -Scope global -ErrorAction Stop} | Should Throw {Clear-Variable -Name localVar -Scope global -ErrorAction Stop} | Should Throw
} }
It "Should not be able to clear a local variable using the script scope switch" { It "Should not be able to clear a local variable using the script scope switch" {
New-Variable localVar -Value 2 -Scope local -Force New-Variable localVar -Value 2 -Scope local -Force
{Clear-Variable -Name localVar -Scope script -ErrorAction Stop} | Should Throw {Clear-Variable -Name localVar -Scope script -ErrorAction Stop} | Should Throw
} }
It "Should be able to clear a script variable created using the script switch" { It "Should be able to clear a script variable created using the script switch" {
{ {
New-Variable -Name derp2 -Value 3 -Scope script -Force New-Variable -Name derp2 -Value 3 -Scope script -Force
Clear-Variable -Name derp2 -Scope script Clear-Variable -Name derp2 -Scope script
}| Should Not Throw }| Should Not Throw
} }
It "Should be able to clear a global script variable that was created using the script scope switch" { It "Should be able to clear a global script variable that was created using the script scope switch" {
{ {
New-Variable -Name derpx -Value 4 -Scope script -Force New-Variable -Name derpx -Value 4 -Scope script -Force
Clear-Variable -Name derpx -Scope script Clear-Variable -Name derpx -Scope script
} | Should Not Throw } | Should Not Throw
} }
} }
} }