Files
PowerShell/test/powershell/Modules/Microsoft.PowerShell.Utility/Remove-Variable.Tests.ps1
T
Steve Lee c1c5344a88 Update copyright and license headers (#6134)
Based on standard practices, we need to have a copyright and license notice at the top of each source file. Removed existing copyrights and updated/added copyright notices for .h, .cpp, .cs, .ps1, and .psm1 files.

Updated module manifests for consistency to have Author = "PowerShell" and Company = "Microsoft Corporation". Removed multiple line breaks.

Separate PR coming to update contribution document for new source files: #6140

Manually reviewed each change.

Fix #6073
2018-02-13 09:23:53 -08:00

276 lines
8.2 KiB
PowerShell

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
# ensure the machine is in a clean state from the outset.
Remove-Variable -Name var1 -ErrorAction SilentlyContinue -Force
Describe "Remove-Variable" -Tags "CI" {
It "Should throw an error when a dollar sign is used in the variable name place" {
New-Variable -Name var1 -Value 4
Remove-Variable $var1 -ErrorAction SilentlyContinue -ErrorVariable err
$err.FullyQualifiedErrorId | Should Be "VariableNotFound,Microsoft.PowerShell.Commands.RemoveVariableCommand"
}
It "Should not throw error when used without the Name field, and named variable is properly specified and exists" {
New-Variable -Name var1 -Value 4
Remove-Variable var1
$var1 | Should Be #nothing. it should be Nothing at all.
}
It "Should not throw error when used with the Name field, and named variable is specified and exists" {
New-Variable -Name var1 -Value 2
Remove-Variable -Name var1
$var1 | Should Be #nothing. it should be Nothing at all.
}
It "Should throw error when used with Name field, and named variable does not exist" {
{ Remove-Variable -Name nonexistentVariable -ErrorAction Stop } | Should Throw
}
It "Should be able to remove a set of variables using wildcard characters" {
New-Variable tmpvar1 -Value "tempvalue"
New-Variable tmpvar2 -Value 2
New-Variable tmpmyvar1 -Value 234
$tmpvar1 | Should Be "tempvalue"
$tmpvar2 | Should Be 2
$tmpmyvar1 | Should Be 234
Remove-Variable -Name tmp*
$tmpvar1 | Should Be #nothing. it should be Nothing at all.
$tmpvar2 | Should Be #nothing. it should be Nothing at all.
$tmpmyvar1 | Should Be #nothing. it should be Nothing at all.
}
It "Should be able to exclude a set of variables to remove using the Exclude switch" {
New-Variable tmpvar1 -Value "tempvalue"
New-Variable tmpvar2 -Value 2
New-Variable tmpmyvar1 -Value 234
$tmpvar1 | Should Be "tempvalue"
$tmpvar2 | Should Be 2
$tmpmyvar1 | Should Be 234
Remove-Variable -Name tmp* -Exclude *my*
$tmpvar1 | Should Be #nothing. it should be Nothing at all.
$tmpvar2 | Should Be #nothing. it should be Nothing at all.
$tmpmyvar1 | Should Be 234
}
It "Should be able to include a set of variables to remove using the Include switch" {
New-Variable tmpvar1 -Value "tempvalue"
New-Variable tmpvar2 -Value 2
New-Variable tmpmyvar1 -Value 234
New-Variable thevar -Value 1
$tmpvar1 | Should Be "tempvalue"
$tmpvar2 | Should Be 2
$tmpmyvar1 | Should Be 234
$thevar | Should Be 1
Remove-Variable -Name tmp* -Include *my*
$tmpvar1 | Should Be "tempvalue"
$tmpvar2 | Should Be 2
$tmpmyvar1 | Should Be #nothing. it should be Nothing at all.
$thevar | should Be 1
Remove-Variable tmpvar1
Remove-Variable tmpvar2
Remove-Variable thevar
}
It "Should throw an error when attempting to remove a read-only variable and the Force switch is not used" {
New-Variable -Name var1 -Value 2 -Option ReadOnly
{ Remove-Variable -Name var1 -ErrorAction Stop } | Should Throw
$var1 | Should Be 2
Remove-Variable -Name var1 -Force
}
It "Should not throw an error when attempting to remove a read-only variable and the Force switch is used" {
New-Variable -Name var1 -Value 2 -Option ReadOnly
Remove-Variable -Name var1 -Force
$var1 | Should BeNullOrEmpty
}
Context "Scope Tests" {
It "Should be able to remove a global variable using the global switch" {
New-Variable -Name var1 -Value "context" -Scope global
Remove-Variable -Name var1 -Scope global
$var1 | Should BeNullOrEmpty
}
It "Should not be able to clear a global variable using the local switch" {
New-Variable -Name var1 -Value "context" -Scope global
{ Remove-Variable -Name var1 -Scope local -ErrorAction Stop } | Should Throw
$var1 | Should Be "context"
Remove-Variable -Name var1 -Scope global
$var1 | Should BeNullOrEmpty
}
It "Should not be able to clear a global variable using the script switch" {
New-Variable -Name var1 -Value "context" -Scope global
{ Remove-Variable -Name var1 -Scope local -ErrorAction Stop } | Should Throw
$var1 | Should Be "context"
Remove-Variable -Name var1 -Scope global
$var1 | Should BeNullOrEmpty
}
It "Should be able to remove an item locally using the local switch" {
New-Variable -Name var1 -Value "context" -Scope local
{ Remove-Variable -Name var1 -Scope local -ErrorAction Stop } | Should Throw
$var1 | Should Be context
}
It "Should be able to remove an item locally using the global switch" {
New-Variable -Name var1 -Value "context" -Scope local
{ Remove-Variable -Name var1 -Scope global -ErrorAction Stop } | Should Throw
$var1 | Should Be "context"
Remove-Variable -Name var1 -Scope local
$var1 | Should BeNullOrEmpty
}
It "Should be able to remove a local variable using the script scope switch" {
New-Variable -Name var1 -Value "context" -Scope local
{ Remove-Variable -Name var1 -Scope script -ErrorAction Stop } | Should Throw
$var1 | Should Be "context"
Remove-Variable -Name var1 -Scope local
$var1 | Should BeNullOrEmpty
}
It "Should be able to remove a script variable created using the script switch" {
New-Variable -Name var1 -Value "context" -Scope script
{ Remove-Variable -Name var1 -Scope script } | Should Not Throw
$var1 | Should BeNullOrEmpty
}
It "Should not be able to remove a global script variable that was created using the script scope switch" {
New-Variable -Name var1 -Value "context" -Scope script
{ Remove-Variable -Name var1 -Scope global -ErrorAction Stop } | Should Throw
$var1 | Should Be "context"
}
}
}
Describe "Remove-Variable basic functionality" -Tags "CI" {
It "Remove-Variable variable should works"{
New-Variable foo bar
Remove-Variable foo
$var1 = Get-Variable -Name foo -EA SilentlyContinue
$var1 | Should BeNullOrEmpty
}
It "Remove-Variable Constant variable should throw SessionStateUnauthorizedAccessException"{
New-Variable foo bar -Option Constant
try
{
Remove-Variable foo -EA Stop
Throw "Execution OK"
}
catch
{
$_.CategoryInfo | Should Match "SessionStateUnauthorizedAccessException"
$_.FullyQualifiedErrorId | Should Be "VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveVariableCommand"
}
}
It "Remove-Variable ReadOnly variable should throw SessionStateUnauthorizedAccessException and force remove should work"{
New-Variable foo bar -Option ReadOnly
try
{
Remove-Variable foo -EA Stop
Throw "Execution OK"
}
catch
{
$_.CategoryInfo| Should Match "SessionStateUnauthorizedAccessException"
$_.FullyQualifiedErrorId | Should Be "VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveVariableCommand"
}
Remove-Variable foo -Force
$var1 = Get-Variable -Name foo -EA SilentlyContinue
$var1 | Should BeNullOrEmpty
}
It "Remove-Variable Constant variable should throw SessionStateUnauthorizedAccessException and force remove should also throw exception"{
New-Variable foo bar -Option Constant
try
{
Remove-Variable foo -EA Stop
Throw "Execution OK"
}
catch
{
$_.CategoryInfo | Should Match "SessionStateUnauthorizedAccessException"
$_.FullyQualifiedErrorId | Should Be "VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveVariableCommand"
}
try
{
Remove-Variable foo -Force -EA Stop
Throw "Execution OK"
}
catch
{
$_.CategoryInfo | Should Match "SessionStateUnauthorizedAccessException"
$_.FullyQualifiedErrorId | Should Be "VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveVariableCommand"
}
}
It "Remove-Variable variable in new scope should works and Get-Variable with different scope should have different result"{
New-Variable foo bar
&{
Clear-Variable foo
Remove-Variable foo
try{
Get-Variable -Name foo -Scope local -EA Stop
Throw "Execution OK"
}
catch
{
$_.CategoryInfo | Should Match "ItemNotFoundException"
$_.FullyQualifiedErrorId | Should Be "VariableNotFound,Microsoft.PowerShell.Commands.GetVariableCommand"
}
}
$var1 = Get-Variable -Name foo
$var1.Name | Should Be "foo"
$var1.Value | Should Be "bar"
$var1.Options | Should Be "None"
$var1.Description | Should Be ""
}
}