From: Pranav K Date: Fri, 10 Jul 2020 03:40:15 +0000 (-0700) Subject: Include member name when constructing ValidationResult in CompareAttribute (#38867) X-Git-Tag: submit/tizen/20210909.063632~6824 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1f467479e5b9eb7eede6064174832b95c3fa3165;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Include member name when constructing ValidationResult in CompareAttribute (#38867) Fixes https://github.com/dotnet/runtime/issues/29214 --- diff --git a/src/libraries/System.ComponentModel.Annotations/src/System/ComponentModel/DataAnnotations/CompareAttribute.cs b/src/libraries/System.ComponentModel.Annotations/src/System/ComponentModel/DataAnnotations/CompareAttribute.cs index cb712b0..5b8ab82 100644 --- a/src/libraries/System.ComponentModel.Annotations/src/System/ComponentModel/DataAnnotations/CompareAttribute.cs +++ b/src/libraries/System.ComponentModel.Annotations/src/System/ComponentModel/DataAnnotations/CompareAttribute.cs @@ -45,7 +45,10 @@ namespace System.ComponentModel.DataAnnotations OtherPropertyDisplayName = GetDisplayNameForProperty(otherPropertyInfo); } - return new ValidationResult(FormatErrorMessage(validationContext.DisplayName)); + string[] memberNames = validationContext.MemberName != null + ? new[] { validationContext.MemberName } + : null; + return new ValidationResult(FormatErrorMessage(validationContext.DisplayName), memberNames); } return null; diff --git a/src/libraries/System.ComponentModel.Annotations/tests/System/ComponentModel/DataAnnotations/CompareAttributeTests.cs b/src/libraries/System.ComponentModel.Annotations/tests/System/ComponentModel/DataAnnotations/CompareAttributeTests.cs index a2ccf2d..cfe2b90 100644 --- a/src/libraries/System.ComponentModel.Annotations/tests/System/ComponentModel/DataAnnotations/CompareAttributeTests.cs +++ b/src/libraries/System.ComponentModel.Annotations/tests/System/ComponentModel/DataAnnotations/CompareAttributeTests.cs @@ -74,6 +74,34 @@ namespace System.ComponentModel.DataAnnotations.Tests } [Fact] + [SkipOnTargetFramework(~TargetFrameworkMonikers.NetFramework)] + public static void Validate_IncludesMemberName_NetFx() + { + ValidationContext validationContext = new ValidationContext(new CompareObject("a")); + validationContext.MemberName = nameof(CompareObject.CompareProperty); + CompareAttribute attribute = new CompareAttribute(nameof(CompareObject.ComparePropertyCased)); + + ValidationResult validationResult = attribute.GetValidationResult("b", validationContext); + + Assert.NotNull(validationResult.ErrorMessage); + Assert.Empty(validationResult.MemberNames); + } + + [Fact] + [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)] + public static void Validate_IncludesMemberName_Netcoreapp() + { + ValidationContext validationContext = new ValidationContext(new CompareObject("a")); + validationContext.MemberName = nameof(CompareObject.CompareProperty); + CompareAttribute attribute = new CompareAttribute(nameof(CompareObject.ComparePropertyCased)); + + ValidationResult validationResult = attribute.GetValidationResult("b", validationContext); + + Assert.NotNull(validationResult.ErrorMessage); + Assert.Equal(new[] { nameof(CompareObject.CompareProperty) }, validationResult.MemberNames); + } + + [Fact] public static void Validate_PrivateProperty_ThrowsArgumentException() { CompareAttribute attribute = new CompareAttribute("PrivateProperty");