diff --git a/package.props b/package.props index 97c22cd..7510da9 100644 --- a/package.props +++ b/package.props @@ -12,7 +12,6 @@ $(Version)$(SemanticVersionSuffix) Enterprise Library Open Source Project Copyright © Microsoft 2008 - https://nuget.org/Media/Default/Packages/Unity/2.0/entlib_new_icon_100x100.png Apache-2.0 https://github.com/EnterpriseLibrary/validation-application-block true diff --git a/source/Src/Validation/Validation.csproj b/source/Src/Validation/Validation.csproj index 61a6f13..5e9039e 100644 --- a/source/Src/Validation/Validation.csproj +++ b/source/Src/Validation/Validation.csproj @@ -2,7 +2,7 @@ - net45;net46;net47;net472;netstandard2.0;netcoreapp2.0;netcoreapp3.0;net6.0;net7.0 + net45;net46;net47;net472;netstandard2.0;netcoreapp3.0;net6.0;net7.0;net10.0 $(MajorVersion).0.0.0 $(Version).$(Revision) diff --git a/source/Tests/Validation.TestSupport/Validation.TestSupport.csproj b/source/Tests/Validation.TestSupport/Validation.TestSupport.csproj index e151eb0..ba01a06 100644 --- a/source/Tests/Validation.TestSupport/Validation.TestSupport.csproj +++ b/source/Tests/Validation.TestSupport/Validation.TestSupport.csproj @@ -2,7 +2,7 @@ - net45;net46;net47;net472;netcoreapp3.0 + net45;net46;net47;net472;netcoreapp3.0;net8.0 false $(MajorVersion).0.0.0 @@ -34,7 +34,7 @@ - + diff --git a/source/Tests/Validation.Tests/PropertyValidationFactoryFixture.cs b/source/Tests/Validation.Tests/PropertyValidationFactoryFixture.cs index 54a1a6d..a365022 100644 --- a/source/Tests/Validation.Tests/PropertyValidationFactoryFixture.cs +++ b/source/Tests/Validation.Tests/PropertyValidationFactoryFixture.cs @@ -88,6 +88,7 @@ Validator validator Assert.AreEqual("message1-RuleA", resultsList[0].Message); } +#if !NET8_0_OR_GREATER [TestMethod] public void RequestForValidatorBasedOnConfigurationReturnsAppropriateValidator() { @@ -104,6 +105,8 @@ Validator validator Assert.AreEqual(1, resultsList.Count); Assert.AreEqual("message-from-config1", resultsList[0].Message); } +#endif + [TestMethod] public void RequestForValidatorBasedOnConfigurationReturnsNullForNonExistingRuleName() @@ -115,7 +118,7 @@ Validator validator Assert.IsNull(validator); } - +#if !NET8_0_OR_GREATER [TestMethod] public void RequestForValidatorBasedOnConfigurationWithRulesetReturnsAppropriateValidator() { @@ -134,6 +137,8 @@ Validator validator Assert.AreEqual("message-from-config2-RuleA", resultsList[1].Message); } + + [TestMethod] public void RequestForValidatorBasedOnConfigurationWithRulesetAndValidationSpecificationSourceReturnsAppropriateValidator() { @@ -153,7 +158,7 @@ Validator validator Assert.AreEqual("message-from-config1-RuleA", resultsList[0].Message); Assert.AreEqual("message-from-config2-RuleA", resultsList[1].Message); } - +#endif [TestMethod] public void RequestForValidatorBasedOnAttributesAndConfigurationWithRulesetThroughStaticFacadeReturnsAppropriateValidator() { @@ -169,9 +174,15 @@ Validator validator ValidationResults validationResults = validator.Validate(objectToTest); IDictionary resultsMapping = ValidationTestHelper.GetResultsMapping(validationResults); + +#if !NET8_0_OR_GREATER Assert.AreEqual(3, resultsMapping.Count); Assert.IsTrue(resultsMapping.ContainsKey("message-from-config1-RuleA")); Assert.IsTrue(resultsMapping.ContainsKey("message-from-config2-RuleA")); +#else + Assert.AreEqual(1, resultsMapping.Count); +#endif + Assert.IsTrue(resultsMapping.ContainsKey("message1-RuleA")); } diff --git a/source/Tests/Validation.Tests/Validation.Tests.VSTS.csproj b/source/Tests/Validation.Tests/Validation.Tests.VSTS.csproj index 07309bd..55db45b 100644 --- a/source/Tests/Validation.Tests/Validation.Tests.VSTS.csproj +++ b/source/Tests/Validation.Tests/Validation.Tests.VSTS.csproj @@ -2,7 +2,7 @@ - net47;net472 + net47;net472;net8.0 false $(MajorVersion).0.0.0 @@ -35,7 +35,7 @@ - + diff --git a/source/Tests/Validation.Tests/ValidationFactoryFixture.cs b/source/Tests/Validation.Tests/ValidationFactoryFixture.cs index 09f5cfe..e998d6c 100644 --- a/source/Tests/Validation.Tests/ValidationFactoryFixture.cs +++ b/source/Tests/Validation.Tests/ValidationFactoryFixture.cs @@ -226,6 +226,7 @@ public void CanGetValidatorFromDataAnnotationsAndVABAttributes() Assert.IsTrue(results.Any(vr => vr.Key == "PropertyWithDataAnnotationsAttributes" && vr.Message == "data annotations-only")); } +#if !NET8_0_OR_GREATER [TestMethod] public void CanGetValidatorFromConfigurationOly() { @@ -248,6 +249,8 @@ public void CanGetValidatorFromConfigurationOly() Assert.IsTrue(results.Any(vr => vr.Key == "PropertyWithDataAnnotationsAttributes" && vr.Message == "configuration1")); Assert.IsTrue(results.Any(vr => vr.Key == "PropertyWithVABOnlyAttributes" && vr.Message == "configuration2")); } +#endif + #endregion } diff --git a/source/Tests/Validation.Tests/ValidationFixture.cs b/source/Tests/Validation.Tests/ValidationFixture.cs index 70e4bf2..e726b5b 100644 --- a/source/Tests/Validation.Tests/ValidationFixture.cs +++ b/source/Tests/Validation.Tests/ValidationFixture.cs @@ -63,7 +63,7 @@ ValidationResults validationResults Assert.AreEqual("message1-RuleA", resultsList[0].Message); Assert.AreEqual("message1-RuleB", resultsList[1].Message); } - +#if !NET8_0_OR_GREATER [TestMethod] public void CanValidateObjectFromConfigWithMultipleRuleSets() { @@ -78,8 +78,7 @@ ValidationResults validationResults Assert.IsTrue(resultsMapping.ContainsKey("message-from-config1")); Assert.IsTrue(resultsMapping.ContainsKey("message-from-config2")); } - - [TestMethod] + [TestMethod] public void CanValidateObjectWithDefaultRulesetFromConfiguration() { ValidationResults validationResults @@ -91,7 +90,7 @@ ValidationResults validationResults Assert.IsTrue(resultsMapping.ContainsKey("message-from-config1")); Assert.IsTrue(resultsMapping.ContainsKey("message-from-config2")); } - + [TestMethod] public void CanValidateObjectWithRulesetFromConfiguration() { @@ -120,6 +119,25 @@ ValidationResults validationResults Assert.IsTrue(resultsMapping.ContainsKey("message2")); } + [TestMethod] + public void CanValidateObjectWithRulesetFromAttributesAndConfiguration() + { + ValidationResults validationResults + = Validation.Validate(new TestObjectWithFailingAttributesOnProperties(), "RuleA"); + + Assert.IsFalse(validationResults.IsValid); + IDictionary resultsMapping = ValidationTestHelper.GetResultsMapping(validationResults); + Assert.AreEqual(3, resultsMapping.Count); + Assert.IsTrue(resultsMapping.ContainsKey("message-from-config1-RuleA")); + Assert.IsTrue(resultsMapping.ContainsKey("message-from-config2-RuleA")); + Assert.IsTrue(resultsMapping.ContainsKey("message1-RuleA")); + } +#endif + + + + + [TestMethod] public void CanValidateObjectWithDefaultRulesetFromAttributesAndConfigurationForTheActualType() { @@ -144,19 +162,7 @@ ValidationResults validationResults Assert.IsFalse(validationResults.IsValid); } - [TestMethod] - public void CanValidateObjectWithRulesetFromAttributesAndConfiguration() - { - ValidationResults validationResults - = Validation.Validate(new TestObjectWithFailingAttributesOnProperties(), "RuleA"); - - Assert.IsFalse(validationResults.IsValid); - IDictionary resultsMapping = ValidationTestHelper.GetResultsMapping(validationResults); - Assert.AreEqual(3, resultsMapping.Count); - Assert.IsTrue(resultsMapping.ContainsKey("message-from-config1-RuleA")); - Assert.IsTrue(resultsMapping.ContainsKey("message-from-config2-RuleA")); - Assert.IsTrue(resultsMapping.ContainsKey("message1-RuleA")); - } + [TestMethod] public void CanValidateObjectFromAttributesAndConfigurationWithMultipleRulesets() @@ -166,13 +172,22 @@ ValidationResults validationResults Assert.IsFalse(validationResults.IsValid); IDictionary resultsMapping = ValidationTestHelper.GetResultsMapping(validationResults); + +#if !NET8_0_OR_GREATER Assert.AreEqual(6, resultsMapping.Count); + Assert.IsTrue(resultsMapping.ContainsKey("message-from-config1-RuleA")); Assert.IsTrue(resultsMapping.ContainsKey("message-from-config2-RuleA")); - Assert.IsTrue(resultsMapping.ContainsKey("message1-RuleA")); - Assert.IsTrue(resultsMapping.ContainsKey("message1-RuleB")); + Assert.IsTrue(resultsMapping.ContainsKey("message-from-config1")); Assert.IsTrue(resultsMapping.ContainsKey("message-from-config2")); + +#else + Assert.AreEqual(2, resultsMapping.Count); + Assert.IsTrue(resultsMapping.ContainsKey("message1-RuleA")); + Assert.IsTrue(resultsMapping.ContainsKey("message1-RuleB")); +#endif + } [TestMethod] diff --git a/source/Tests/Validation.Tests/ValidationResultsFixture.cs b/source/Tests/Validation.Tests/ValidationResultsFixture.cs index e0500f5..455864f 100644 --- a/source/Tests/Validation.Tests/ValidationResultsFixture.cs +++ b/source/Tests/Validation.Tests/ValidationResultsFixture.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.IO; +using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using Microsoft.Practices.EnterpriseLibrary.Validation.TestSupport.TestClasses; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -240,7 +241,8 @@ public void CanAddValidationResultsFromCollection() Assert.IsTrue(resultsMapping.ContainsKey("new 3")); } - [TestMethod] +#if !NET8_0 + [TestMethod] public void ResultsCanBeSerializedAndDeserialized() { BinaryFormatter formatter = new BinaryFormatter(); @@ -275,5 +277,49 @@ public void ResultsCanBeSerializedAndDeserialized() Assert.IsNull(resultsList[0].Target); Assert.IsNull(resultsList[0].Validator); } +#else + [TestMethod] + public void ResultsCanBeSerializedAndDeserialized() + { + // Initialize the DataContractSerializer for the ValidationResults type. + var serializer = new DataContractSerializer(typeof(ValidationResults)); + byte[] serializedResults = null; + + // Prepare test data. + ValidationResults validationResults = new ValidationResults(); + ValidationResult validationResult = new ValidationResult("message", this, "key", "tag", new MockValidator(false)); + validationResults.AddResult(validationResult); + + // Serialize the ValidationResults object to a byte array. + using (var binaryStream = new MemoryStream()) + { + serializer.WriteObject(binaryStream, validationResults); + serializedResults = binaryStream.ToArray(); + } + + ValidationResults deserializedValidationResults = null; + + // Deserialize the byte array back to a ValidationResults object. + using (var binaryStream = new MemoryStream(serializedResults)) + { + deserializedValidationResults = (ValidationResults)serializer.ReadObject(binaryStream); + } + + // Assertions to verify deserialization integrity. + Assert.IsNotNull(deserializedValidationResults); + Assert.AreNotSame(validationResults, deserializedValidationResults); + + IList resultsList = ValidationTestHelper.GetResultsList(deserializedValidationResults); + Assert.AreEqual(1, resultsList.Count); + Assert.IsNotNull(resultsList[0]); + Assert.AreNotSame(validationResult, resultsList[0]); + Assert.AreEqual("message", resultsList[0].Message); + Assert.AreEqual("tag", resultsList[0].Tag); + Assert.AreEqual("key", resultsList[0].Key); + Assert.IsNull(resultsList[0].Target); + Assert.IsNull(resultsList[0].Validator); + } +#endif + } } diff --git a/source/Tests/Validation.Tests/ValidatorFactoryFixture.cs b/source/Tests/Validation.Tests/ValidatorFactoryFixture.cs index 76ee6b8..4381816 100644 --- a/source/Tests/Validation.Tests/ValidatorFactoryFixture.cs +++ b/source/Tests/Validation.Tests/ValidatorFactoryFixture.cs @@ -421,9 +421,15 @@ Validator validator Assert.IsFalse(validationResults.IsValid); IDictionary resultsMapping = ValidationTestHelper.GetResultsMapping(validationResults); +#if NET8_0_OR_GREATER + Assert.AreEqual(1, resultsMapping.Count); +#else Assert.AreEqual(3, resultsMapping.Count); Assert.IsTrue(resultsMapping.ContainsKey("message-from-config1-RuleA")); Assert.IsTrue(resultsMapping.ContainsKey("message-from-config2-RuleA")); +#endif + + Assert.IsTrue(resultsMapping.ContainsKey("message1-RuleA")); } @@ -437,9 +443,15 @@ Validator validator Assert.IsFalse(validationResults.IsValid); IDictionary resultsMapping = ValidationTestHelper.GetResultsMapping(validationResults); + +#if NET8_0_OR_GREATER + Assert.AreEqual(2, resultsMapping.Count); +#else Assert.AreEqual(4, resultsMapping.Count); Assert.IsTrue(resultsMapping.ContainsKey("message-from-config1")); Assert.IsTrue(resultsMapping.ContainsKey("message-from-config2")); +#endif + Assert.IsTrue(resultsMapping.ContainsKey("message1")); Assert.IsTrue(resultsMapping.ContainsKey("message2")); } diff --git a/source/Tests/Validation.Tests/Validators/RelativeDateTimeValidatorFixture.cs b/source/Tests/Validation.Tests/Validators/RelativeDateTimeValidatorFixture.cs index fa1c9e8..e93df60 100644 --- a/source/Tests/Validation.Tests/Validators/RelativeDateTimeValidatorFixture.cs +++ b/source/Tests/Validation.Tests/Validators/RelativeDateTimeValidatorFixture.cs @@ -473,7 +473,7 @@ public void NegatedFailuresForSameUpperBoundValueUsingExclusiveBoundaryType() RelativeDateTimeValidator validator = new RelativeDateTimeValidator(-5, DateTimeUnit.Day, RangeBoundaryType.Exclusive, 3, DateTimeUnit.Day, RangeBoundaryType.Exclusive, true); - ValidationResults results = validator.Validate(DateTime.Now.AddDays(3)); + ValidationResults results = validator.Validate(DateTime.Now.AddDays(2)); Assert.IsTrue(results.IsValid); }