From ebddf80cac05d55b17917f4e1b27a5793b32565d Mon Sep 17 00:00:00 2001 From: Raghu Shantha Date: Tue, 12 May 2015 12:00:06 -0700 Subject: [PATCH 1/2] Fix for including ProgressPreference built-in variable in the list of approved uninitialized variables --- Engine/SpecialVars.cs | 7 ++++-- .../AvoidUsingUninitializedVariable.Tests.ps1 | 24 +++++++++++++++++++ .../Rules/AvoidUsingUninitializedVariable.ps1 | 10 ++++++++ ...UsingUninitializedVariableNoViolations.ps1 | 11 +++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 Tests/Rules/AvoidUsingUninitializedVariable.Tests.ps1 create mode 100644 Tests/Rules/AvoidUsingUninitializedVariable.ps1 create mode 100644 Tests/Rules/AvoidUsingUninitializedVariableNoViolations.ps1 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..11db9a196 --- /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 From e52216e2fbcaf6928b1f6609b53905bd03f4613e Mon Sep 17 00:00:00 2001 From: Raghu Shantha Date: Tue, 12 May 2015 12:08:52 -0700 Subject: [PATCH 2/2] Forgot to import our module --- Tests/Rules/AvoidUsingUninitializedVariable.Tests.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Rules/AvoidUsingUninitializedVariable.Tests.ps1 b/Tests/Rules/AvoidUsingUninitializedVariable.Tests.ps1 index 11db9a196..3fb75b360 100644 --- a/Tests/Rules/AvoidUsingUninitializedVariable.Tests.ps1 +++ b/Tests/Rules/AvoidUsingUninitializedVariable.Tests.ps1 @@ -1,4 +1,4 @@ -#Import-Module PSScriptAnalyzer +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