From 6cb3b3dfbfc53dc9ba492d3129997dc037bd4708 Mon Sep 17 00:00:00 2001 From: iSazonov Date: Thu, 31 Aug 2017 17:29:27 +0300 Subject: [PATCH] Fix error message in ValidateSetAttribute ValidateElement() --- .../engine/Attributes.cs | 40 +++++++++---------- .../Scripting.Classes.Attributes.Tests.ps1 | 5 ++- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/System.Management.Automation/engine/Attributes.cs b/src/System.Management.Automation/engine/Attributes.cs index 3250e626b9a..730d945305c 100644 --- a/src/System.Management.Automation/engine/Attributes.cs +++ b/src/System.Management.Automation/engine/Attributes.cs @@ -902,18 +902,18 @@ public ValidateLengthAttribute(int minLength, int maxLength) : base() /// /// Predefined range kind to use with ValidateRangeAttribute. /// - public enum ValidateRangeKind + public enum ValidateRangeKind { /// /// Range is greater than 0. /// Positive, - + /// /// Range is greater than or equal to 0. /// NonNegative, - + /// /// Range is less than 0. /// @@ -921,7 +921,7 @@ public enum ValidateRangeKind /// /// Range is less than or equal to 0. - /// + /// NonPositive } /// @@ -978,7 +978,7 @@ protected override void ValidateElement(object element) { element = o.BaseObject; } - + if (_rangeKind.HasValue) { ValidateRange(element, (ValidateRangeKind)_rangeKind); @@ -1078,9 +1078,9 @@ private void ValidateRange(object element, ValidateRangeKind rangeKind) { throw new ValidationMetadataException( "ValidationRangeElementType", - null, + null, Metadata.ValidateRangeElementType, - element.GetType().Name, + element.GetType().Name, typeof(int).Name); } @@ -1090,19 +1090,19 @@ private void ValidateRange(object element, ValidateRangeKind rangeKind) if (LanguagePrimitives.TryConvertTo(element, commonType, out resultValue)) { element = resultValue; - + if (LanguagePrimitives.TryConvertTo(0, commonType, out resultValue)) { dynamicZero = (IComparable)resultValue; - } + } } else { throw new ValidationMetadataException( "ValidationRangeElementType", - null, + null, Metadata.ValidateRangeElementType, - element.GetType().Name, + element.GetType().Name, commonType.Name); } @@ -1113,7 +1113,7 @@ private void ValidateRange(object element, ValidateRangeKind rangeKind) { throw new ValidationMetadataException( "ValidateRangePositiveFailure", - null, + null, Metadata.ValidateRangePositiveFailure, element.ToString()); } @@ -1123,7 +1123,7 @@ private void ValidateRange(object element, ValidateRangeKind rangeKind) { throw new ValidationMetadataException( "ValidateRangeNonNegativeFailure", - null, + null, Metadata.ValidateRangeNonNegativeFailure, element.ToString()); } @@ -1133,7 +1133,7 @@ private void ValidateRange(object element, ValidateRangeKind rangeKind) { throw new ValidationMetadataException( "ValidateRangeNegativeFailure", - null, + null, Metadata.ValidateRangeNegativeFailure, element.ToString()); } @@ -1143,7 +1143,7 @@ private void ValidateRange(object element, ValidateRangeKind rangeKind) { throw new ValidationMetadataException( "ValidateRangeNonPositiveFailure", - null, + null, Metadata.ValidateRangeNonPositiveFailure, element.ToString()); } @@ -1166,9 +1166,9 @@ private void ValidateRange(object element) { throw new ValidationMetadataException( "ValidationRangeElementType", - null, + null, Metadata.ValidateRangeElementType, - element.GetType().Name, + element.GetType().Name, MinRange.GetType().Name); } } @@ -1178,9 +1178,9 @@ private void ValidateRange(object element) { throw new ValidationMetadataException( "ValidateRangeTooSmall", - null, + null, Metadata.ValidateRangeSmallerThanMinRangeFailure, - element.ToString(), + element.ToString(), MinRange.ToString()); } @@ -1646,7 +1646,7 @@ protected override void ValidateElement(object element) private string SetAsString() { - return string.Join(CultureInfo.CurrentUICulture.TextInfo.ListSeparator, _validValues); + return string.Join(CultureInfo.CurrentUICulture.TextInfo.ListSeparator, ValidValues); } /// diff --git a/test/powershell/Language/Classes/Scripting.Classes.Attributes.Tests.ps1 b/test/powershell/Language/Classes/Scripting.Classes.Attributes.Tests.ps1 index 2b8a9e756c7..fb087eb3adf 100644 --- a/test/powershell/Language/Classes/Scripting.Classes.Attributes.Tests.ps1 +++ b/test/powershell/Language/Classes/Scripting.Classes.Attributes.Tests.ps1 @@ -394,6 +394,10 @@ Describe 'ValidateSet support a dynamically generated set' -Tag "CI" { Get-TestValidateSetPS4 -Param1 "TestString1" -ErrorAction SilentlyContinue | Should BeExactly "TestString1" } + It 'Get the appropriate error message' { + {Get-TestValidateSetPS4 -Param1 "TestStringWrong" -ErrorAction Stop} | ShouldBeErrorId "ParameterArgumentValidationError,Get-TestValidateSetPS4" + } + It 'Empty dynamically generated set throws in PowerShell script' { $exc = { Get-TestValidateSetPS5 -Param1 "TestString1" -ErrorAction Stop @@ -476,6 +480,5 @@ Describe 'ValidateSet support a dynamically generated set' -Tag "CI" { Start-Sleep 3 Get-TestValidateSetPS5 -Param1 "TestString2" -ErrorAction SilentlyContinue | Should BeExactly "TestString2" } - } }