From 90a3b5a2441cd38b5c14211d0009e5b489a580d6 Mon Sep 17 00:00:00 2001 From: Yuting Chen Date: Fri, 24 Apr 2015 17:48:31 -0700 Subject: [PATCH 1/2] Add wild card support to Get-ScriptAnalyzerRule --- Engine/ScriptAnalyzer.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Engine/ScriptAnalyzer.cs b/Engine/ScriptAnalyzer.cs index 5f995abce..79046ac10 100644 --- a/Engine/ScriptAnalyzer.cs +++ b/Engine/ScriptAnalyzer.cs @@ -10,6 +10,7 @@ // THE SOFTWARE. // +using System.Text.RegularExpressions; using Microsoft.Windows.Powershell.ScriptAnalyzer.Commands; using Microsoft.Windows.Powershell.ScriptAnalyzer.Generic; using System; @@ -192,8 +193,18 @@ public IEnumerable GetRule(string[] moduleNames, string[] ruleNames) if (ruleNames != null) { - results = rules.Where(item => - ruleNames.Contains(item.GetName(), StringComparer.OrdinalIgnoreCase)); + //Check wild card input for -Name parameter and create regex match patterns + List regexList = new List(); + foreach (string ruleName in ruleNames) + { + Regex includeRegex = new Regex(String.Format("^{0}$", Regex.Escape(ruleName).Replace(@"\*", ".*")), RegexOptions.IgnoreCase); + regexList.Add(includeRegex); + } + + results = from rule in rules + from regex in regexList + where regex.IsMatch(rule.GetName()) + select rule; } else { From b43039eda4f97cef9f03a5a693c77ee4119a3d68 Mon Sep 17 00:00:00 2001 From: Yuting Chen Date: Fri, 24 Apr 2015 18:02:55 -0700 Subject: [PATCH 2/2] Updated test as well --- Tests/Engine/GetScriptAnalyzerRule.tests.ps1 | 52 ++++++++++++-------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/Tests/Engine/GetScriptAnalyzerRule.tests.ps1 b/Tests/Engine/GetScriptAnalyzerRule.tests.ps1 index 8c32e9b4b..798cb53c6 100644 --- a/Tests/Engine/GetScriptAnalyzerRule.tests.ps1 +++ b/Tests/Engine/GetScriptAnalyzerRule.tests.ps1 @@ -8,12 +8,12 @@ $dscIdentical = "PSDSCUseIdenticalParametersForDSC" Describe "Test available parameters" { $params = $sa.Parameters Context "Name parameter" { - It "has a Name parameter" { - $params.ContainsKey("Name") | Should Be $true + It "has a RuleName parameter" { + $params.ContainsKey("RuleName") | Should Be $true } It "accepts string" { - $params["Name"].ParameterType.FullName | Should Be "System.String[]" + $params["RuleName"].ParameterType.FullName | Should Be "System.String[]" } } @@ -32,35 +32,35 @@ Describe "Test available parameters" { Describe "Test Name parameters" { Context "When used correctly" { It "works with 1 name" { - $rule = Get-ScriptAnalyzerRule -Name $singularNouns + $rule = Get-ScriptAnalyzerRule -RuleName $singularNouns $rule.Count | Should Be 1 - $rule[0].Name | Should Be $singularNouns + $rule[0].RuleName | Should Be $singularNouns } It "works for DSC Rule" { - $rule = Get-ScriptAnalyzerRule -Name $dscIdentical + $rule = Get-ScriptAnalyzerRule -RuleName $dscIdentical $rule.Count | Should Be 1 - $rule[0].Name | Should Be $dscIdentical + $rule[0].RuleName | Should Be $dscIdentical } It "works with 3 names" { - $rules = Get-ScriptAnalyzerRule -Name $approvedVerbs, $singularNouns + $rules = Get-ScriptAnalyzerRule -RuleName $approvedVerbs, $singularNouns $rules.Count | Should Be 2 - ($rules | Where-Object {$_.Name -eq $singularNouns}).Count | Should Be 1 - ($rules | Where-Object {$_.Name -eq $approvedVerbs}).Count | Should Be 1 + ($rules | Where-Object {$_.RuleName -eq $singularNouns}).Count | Should Be 1 + ($rules | Where-Object {$_.RuleName -eq $approvedVerbs}).Count | Should Be 1 } } Context "When used incorrectly" { It "1 incorrect name" { - $rule = Get-ScriptAnalyzerRule -Name "This is a wrong name" + $rule = Get-ScriptAnalyzerRule -RuleName "This is a wrong name" $rule.Count | Should Be 0 } It "1 incorrect and 1 correct" { - $rule = Get-ScriptAnalyzerRule -Name $singularNouns, "This is a wrong name" + $rule = Get-ScriptAnalyzerRule -RuleName $singularNouns, "This is a wrong name" $rule.Count | Should Be 1 - $rule[0].Name | Should Be $singularNouns + $rule[0].RuleName | Should Be $singularNouns } } } @@ -86,17 +86,17 @@ Describe "Test RuleExtension" { } It "with Name of a built-in rules" { - $ruleExtension = Get-ScriptAnalyzerRule -CustomizedRulePath $directory\CommunityAnalyzerRules\CommunityAnalyzerRules.psm1 -Name $singularNouns + $ruleExtension = Get-ScriptAnalyzerRule -CustomizedRulePath $directory\CommunityAnalyzerRules\CommunityAnalyzerRules.psm1 -RuleName $singularNouns $ruleExtension.Count | Should Be 1 - $ruleExtension[0].Name | Should Be $singularNouns + $ruleExtension[0].RuleName | Should Be $singularNouns } It "with Names of built-in, DSC and non-built-in rules" { - $ruleExtension = Get-ScriptAnalyzerRule -CustomizedRulePath $directory\CommunityAnalyzerRules\CommunityAnalyzerRules.psm1 -Name $singularNouns, $measureRequired, $dscIdentical + $ruleExtension = Get-ScriptAnalyzerRule -CustomizedRulePath $directory\CommunityAnalyzerRules\CommunityAnalyzerRules.psm1 -RuleName $singularNouns, $measureRequired, $dscIdentical $ruleExtension.Count | Should be 3 - ($ruleExtension | Where-Object {$_.Name -eq $measureRequired}).Count | Should Be 1 - ($ruleExtension | Where-Object {$_.Name -eq $singularNouns}).Count | Should Be 1 - ($ruleExtension | Where-Object {$_.Name -eq $dscIdentical}).Count | Should Be 1 + ($ruleExtension | Where-Object {$_.RuleName -eq $measureRequired}).Count | Should Be 1 + ($ruleExtension | Where-Object {$_.RuleName -eq $singularNouns}).Count | Should Be 1 + ($ruleExtension | Where-Object {$_.RuleName -eq $dscIdentical}).Count | Should Be 1 } } @@ -104,7 +104,7 @@ Describe "Test RuleExtension" { It "file cannot be found" { $wrongFile = Get-ScriptAnalyzerRule -CustomizedRulePath "This is a wrong rule" 3>&1 ($wrongFile | Select-Object -First 1) | Should Match "Cannot find rule extension 'This is a wrong rule'." - ($wrongFile | Where-Object {$_.Name -eq $singularNouns}).Count | Should Be 1 + ($wrongFile | Where-Object {$_.RuleName -eq $singularNouns}).Count | Should Be 1 } } @@ -120,4 +120,16 @@ Describe "TestSeverity" { $rules = Get-ScriptAnalyzerRule -Severity Error,Information $rules.Count | Should be 8 } +} + +Describe "TestWildCard" { + It "filters rules based on the -RuleName wild card input" { + $rules = Get-ScriptAnalyzerRule -RuleName PSDSC* + $rules.Count | Should be 4 + } + + It "filters rules based on wild card input and severity"{ + $rules = Get-ScriptAnalyzerRule -RuleName PSDSC* -Severity Information + $rules.Count | Should be 2 + } } \ No newline at end of file