From aa4901bb40f92075a2082c6ad2c41964f284b282 Mon Sep 17 00:00:00 2001 From: Christoph Bergmeister Date: Tue, 25 Sep 2018 11:44:12 +0100 Subject: [PATCH 1/2] Fix parsing of empty hashtable when string is provided as settings object --- Engine/Settings.cs | 7 +------ Tests/Engine/Settings.tests.ps1 | 17 ++++++++++------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Engine/Settings.cs b/Engine/Settings.cs index 40e4043ea..4f9dcd546 100644 --- a/Engine/Settings.cs +++ b/Engine/Settings.cs @@ -560,11 +560,6 @@ private Hashtable GetHashtableFromHashTableAst(HashtableAst hashTableAst) } } - if (rhsList.Count == 0) - { - ThrowInvalidDataException(kvp.Item2); - } - output[key] = rhsList.ToArray(); } @@ -629,7 +624,7 @@ private List GetArrayFromArrayExpressionAst(ArrayExpressionAst arrayExp) } } - return null; + return result; } private void ThrowInvalidDataException(Ast ast) diff --git a/Tests/Engine/Settings.tests.ps1 b/Tests/Engine/Settings.tests.ps1 index 23bdf1196..d8e1ad05c 100644 --- a/Tests/Engine/Settings.tests.ps1 +++ b/Tests/Engine/Settings.tests.ps1 @@ -38,19 +38,22 @@ Describe "Settings Precedence" { Describe "Settings Class" { Context "When an empty hashtable is provided" { - BeforeAll { - $settings = New-Object -TypeName $settingsTypeName -ArgumentList @{} - } It "Should return empty property" -TestCases @( @{ Name = "IncludeRules" } @{ Name = "ExcludeRules" } @{ Name = "Severity" } @{ Name = "RuleArguments" } - ) { - Param($Name) + ) { + Param($Name) - ${settings}.${Name}.Count | Should -Be 0 + $settings = New-Object -TypeName $settingsTypeName -ArgumentList @{} + ${settings}.${Name}.Count | Should -Be 0 + } + + It "Should be able to parse empty settings hashtable" { + Invoke-ScriptAnalyzer -ScriptDefinition 'gci' -Settings @{ ExcludeRules = @()} | Should -Not -BeNullOrEmpty + Invoke-ScriptAnalyzer -ScriptDefinition 'gci' -Settings '@{ ExcludeRules = @()}' | Should -Not -BeNullOrEmpty } } @@ -104,7 +107,7 @@ Describe "Settings Class" { It "Should return $expectedNumberOfIncludeRules IncludeRules" { $settings.IncludeRules.Count | Should -Be $expectedNumberOfIncludeRules } - + $expectedNumberOfExcludeRules = 3 It "Should return $expectedNumberOfExcludeRules ExcludeRules" { $settings.ExcludeRules.Count | Should -Be $expectedNumberOfExcludeRules From 59277c75ecfe9d52df1a7acd2247f8849f038471 Mon Sep 17 00:00:00 2001 From: Christoph Bergmeister Date: Tue, 25 Sep 2018 12:09:59 +0100 Subject: [PATCH 2/2] Fix test as bug only occurs when test settings file is present --- Tests/Engine/Settings.tests.ps1 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Tests/Engine/Settings.tests.ps1 b/Tests/Engine/Settings.tests.ps1 index d8e1ad05c..63c7de27f 100644 --- a/Tests/Engine/Settings.tests.ps1 +++ b/Tests/Engine/Settings.tests.ps1 @@ -51,9 +51,10 @@ Describe "Settings Class" { ${settings}.${Name}.Count | Should -Be 0 } - It "Should be able to parse empty settings hashtable" { - Invoke-ScriptAnalyzer -ScriptDefinition 'gci' -Settings @{ ExcludeRules = @()} | Should -Not -BeNullOrEmpty - Invoke-ScriptAnalyzer -ScriptDefinition 'gci' -Settings '@{ ExcludeRules = @()}' | Should -Not -BeNullOrEmpty + It "Should be able to parse empty settings hashtable from settings file" { + $testPSSASettingsFilePath = "TestDrive:\PSSASettings.psd1" + Set-Content $testPSSASettingsFilePath -Value '@{ExcludeRules = @()}' + Invoke-ScriptAnalyzer -ScriptDefinition 'gci' -Settings $testPSSASettingsFilePath | Should -Not -BeNullOrEmpty } }