diff --git a/Engine/SpecialVars.cs b/Engine/SpecialVars.cs index 2c3e506b5..f616234cc 100644 --- a/Engine/SpecialVars.cs +++ b/Engine/SpecialVars.cs @@ -91,6 +91,7 @@ static SpecialVars() internal const string WhatIfPreference = "WhatIfPreference"; internal const string WarningPreference = "WarningPreference"; internal const string ConfirmPreference = "ConfirmPreference"; + internal const string ProgressPreference = "ProgressPreference"; internal static readonly string[] PreferenceVariables = new string[] { @@ -99,7 +100,8 @@ static SpecialVars() ErrorActionPreference, WhatIfPreference, WarningPreference, - ConfirmPreference, + ConfirmPreference, + ProgressPreference }; internal static readonly Type[] PreferenceVariableTypes = new Type[] @@ -109,7 +111,8 @@ static SpecialVars() /* ErrorPreference */ typeof(ActionPreference), /* WhatIfPreference */ typeof(SwitchParameter), /* WarningPreference */ typeof(ActionPreference), - /* ConfirmPreference */ typeof(ConfirmImpact), + /* ConfirmPreference */ typeof(ConfirmImpact), + /* ProgressPreference */ typeof(Enum), }; internal enum AutomaticVariable diff --git a/Tests/Rules/AvoidUsingUninitializedVariable.Tests.ps1 b/Tests/Rules/AvoidUsingUninitializedVariable.Tests.ps1 new file mode 100644 index 000000000..3fb75b360 --- /dev/null +++ b/Tests/Rules/AvoidUsingUninitializedVariable.Tests.ps1 @@ -0,0 +1,24 @@ +Import-Module PSScriptAnalyzer +$AvoidUninitializedVariable = "PSAvoidUninitializedVariable" +$violationMessage = "Variable 'MyProgressPreference' is not initialized. Non-global variables must be initialized. To fix a violation of this rule, please initialize non-global variables." +$directory = Split-Path -Parent $MyInvocation.MyCommand.Path +$violations = Invoke-ScriptAnalyzer $directory\AvoidUsingUninitializedVariable.ps1 -IncludeRule $AvoidUninitializedVariable +$noViolations = Invoke-ScriptAnalyzer $directory\AvoidUsingUninitializedVariableNoViolations.ps1 -IncludeRule $AvoidUninitializedVariable + +Describe "AvoidUsingUninitializedVariable" { + Context "Script uses uninitialized variables - Violation" { + It "Have 3 rule violations" { + $violations.Count | Should Be 3 + } + + It "has the correct description message for UninitializedVariable rule violation" { + $violations[0].Message | Should Be $violationMessage + } + } + + Context "Script uses initialized variables - No violation" { + It "results in no rule violations" { + $noViolations.Count | Should Be 0 + } + } +} \ No newline at end of file diff --git a/Tests/Rules/AvoidUsingUninitializedVariable.ps1 b/Tests/Rules/AvoidUsingUninitializedVariable.ps1 new file mode 100644 index 000000000..980a01d70 --- /dev/null +++ b/Tests/Rules/AvoidUsingUninitializedVariable.ps1 @@ -0,0 +1,10 @@ +# Script has uninitialized variables +# Must result in AvoidUsingUninitializedVariablerule violations along with other violations + +function Test-MyPreference +{ + Write-Verbose $MyProgressPreference + Write-Verbose $MyVerbosePreference +} + +Write-Verbose $MyProgressPreference \ No newline at end of file diff --git a/Tests/Rules/AvoidUsingUninitializedVariableNoViolations.ps1 b/Tests/Rules/AvoidUsingUninitializedVariableNoViolations.ps1 new file mode 100644 index 000000000..046126997 --- /dev/null +++ b/Tests/Rules/AvoidUsingUninitializedVariableNoViolations.ps1 @@ -0,0 +1,11 @@ +# Script uses built-in preference variables +# Must not result in AvoidUsingUninitializedVariablerule violations +# However there are other violations in this script - Write-Verbose is not using positional parameters + +function Test-Preference +{ + Write-Verbose $ProgressPreference + Write-Verbose $VerbosePreference +} + +Write-Verbose $ProgressPreference \ No newline at end of file