![Tests passed successfully](https://img.shields.io/badge/tests-803%20passed%2C%201%20skipped-success)
Expand for details |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/external/FluentValidation.Tests.trx|803 ✅||1 ⚪|4s| ## ✅ fixtures/external/FluentValidation.Tests.trx **804** tests were completed in **4s** with **803** passed, **0** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |[FluentValidation.Tests.AbstractValidatorTester](#user-content-r0s0)|35 ✅|||12ms| |[FluentValidation.Tests.AccessorCacheTests](#user-content-r0s1)|4 ✅||1 ⚪|4ms| |[FluentValidation.Tests.AssemblyScannerTester](#user-content-r0s2)|2 ✅|||2ms| |[FluentValidation.Tests.CascadingFailuresTester](#user-content-r0s3)|38 ✅|||23ms| |[FluentValidation.Tests.ChainedValidationTester](#user-content-r0s4)|13 ✅|||6ms| |[FluentValidation.Tests.ChainingValidatorsTester](#user-content-r0s5)|3 ✅|||1ms| |[FluentValidation.Tests.ChildRulesTests](#user-content-r0s6)|2 ✅|||7ms| |[FluentValidation.Tests.CollectionValidatorWithParentTests](#user-content-r0s7)|16 ✅|||13ms| |[FluentValidation.Tests.ComplexValidationTester](#user-content-r0s8)|17 ✅|||26ms| |[FluentValidation.Tests.ConditionTests](#user-content-r0s9)|18 ✅|||9ms| |[FluentValidation.Tests.CreditCardValidatorTests](#user-content-r0s10)|2 ✅|||2ms| |[FluentValidation.Tests.CustomFailureActionTester](#user-content-r0s11)|3 ✅|||1ms| |[FluentValidation.Tests.CustomMessageFormatTester](#user-content-r0s12)|6 ✅|||3ms| |[FluentValidation.Tests.CustomValidatorTester](#user-content-r0s13)|10 ✅|||6ms| |[FluentValidation.Tests.DefaultValidatorExtensionTester](#user-content-r0s14)|30 ✅|||38ms| |[FluentValidation.Tests.EmailValidatorTests](#user-content-r0s15)|36 ✅|||18ms| |[FluentValidation.Tests.EmptyTester](#user-content-r0s16)|9 ✅|||5ms| |[FluentValidation.Tests.EnumValidatorTests](#user-content-r0s17)|12 ✅|||24ms| |[FluentValidation.Tests.EqualValidatorTests](#user-content-r0s18)|10 ✅|||3ms| |[FluentValidation.Tests.ExactLengthValidatorTester](#user-content-r0s19)|6 ✅|||2ms| |[FluentValidation.Tests.ExclusiveBetweenValidatorTests](#user-content-r0s20)|19 ✅|||6ms| |[FluentValidation.Tests.ExtensionTester](#user-content-r0s21)|4 ✅|||1ms| |[FluentValidation.Tests.ForEachRuleTests](#user-content-r0s22)|34 ✅|||47ms| |[FluentValidation.Tests.GreaterThanOrEqualToValidatorTester](#user-content-r0s23)|14 ✅|||5ms| |[FluentValidation.Tests.GreaterThanValidatorTester](#user-content-r0s24)|13 ✅|||4ms| |[FluentValidation.Tests.InclusiveBetweenValidatorTests](#user-content-r0s25)|18 ✅|||4ms| |[FluentValidation.Tests.InheritanceValidatorTest](#user-content-r0s26)|11 ✅|||18ms| |[FluentValidation.Tests.InlineValidatorTester](#user-content-r0s27)|1 ✅|||2ms| |[FluentValidation.Tests.LanguageManagerTests](#user-content-r0s28)|21 ✅|||28ms| |[FluentValidation.Tests.LengthValidatorTests](#user-content-r0s29)|16 ✅|||17ms| |[FluentValidation.Tests.LessThanOrEqualToValidatorTester](#user-content-r0s30)|13 ✅|||4ms| |[FluentValidation.Tests.LessThanValidatorTester](#user-content-r0s31)|16 ✅|||6ms| |[FluentValidation.Tests.LocalisedMessagesTester](#user-content-r0s32)|6 ✅|||3ms| |[FluentValidation.Tests.LocalisedNameTester](#user-content-r0s33)|2 ✅|||1ms| |[FluentValidation.Tests.MemberAccessorTests](#user-content-r0s34)|9 ✅|||5ms| |[FluentValidation.Tests.MessageFormatterTests](#user-content-r0s35)|10 ✅|||2ms| |[FluentValidation.Tests.ModelLevelValidatorTests](#user-content-r0s36)|2 ✅|||1ms| |[FluentValidation.Tests.NameResolutionPluggabilityTester](#user-content-r0s37)|3 ✅|||2ms| |[FluentValidation.Tests.NotEmptyTester](#user-content-r0s38)|10 ✅|||7ms| |[FluentValidation.Tests.NotEqualValidatorTests](#user-content-r0s39)|11 ✅|||7ms| |[FluentValidation.Tests.NotNullTester](#user-content-r0s40)|5 ✅|||1ms| |[FluentValidation.Tests.NullTester](#user-content-r0s41)|5 ✅|||2ms| |[FluentValidation.Tests.OnFailureTests](#user-content-r0s42)|10 ✅|||8ms| |[FluentValidation.Tests.PredicateValidatorTester](#user-content-r0s43)|5 ✅|||2ms| |[FluentValidation.Tests.PropertyChainTests](#user-content-r0s44)|7 ✅|||1ms| |[FluentValidation.Tests.RegularExpressionValidatorTests](#user-content-r0s45)|15 ✅|||6ms| |[FluentValidation.Tests.RuleBuilderTests](#user-content-r0s46)|29 ✅|||96ms| |[FluentValidation.Tests.RuleDependencyTests](#user-content-r0s47)|14 ✅|||3s| |[FluentValidation.Tests.RulesetTests](#user-content-r0s48)|21 ✅|||14ms| |[FluentValidation.Tests.ScalePrecisionValidatorTests](#user-content-r0s49)|6 ✅|||4ms| |[FluentValidation.Tests.SharedConditionTests](#user-content-r0s50)|42 ✅|||42ms| |[FluentValidation.Tests.StandalonePropertyValidationTester](#user-content-r0s51)|1 ✅|||0ms| |[FluentValidation.Tests.StringEnumValidatorTests](#user-content-r0s52)|10 ✅|||5ms| |[FluentValidation.Tests.TrackingCollectionTests](#user-content-r0s53)|3 ✅|||2ms| |[FluentValidation.Tests.TransformTests](#user-content-r0s54)|4 ✅|||3ms| |[FluentValidation.Tests.UserSeverityTester](#user-content-r0s55)|7 ✅|||3ms| |[FluentValidation.Tests.UserStateTester](#user-content-r0s56)|4 ✅|||3ms| |[FluentValidation.Tests.ValidateAndThrowTester](#user-content-r0s57)|14 ✅|||25ms| |[FluentValidation.Tests.ValidationResultTests](#user-content-r0s58)|8 ✅|||8ms| |[FluentValidation.Tests.ValidatorDescriptorTester](#user-content-r0s59)|5 ✅|||1ms| |[FluentValidation.Tests.ValidatorSelectorTests](#user-content-r0s60)|10 ✅|||9ms| |[FluentValidation.Tests.ValidatorTesterTester](#user-content-r0s61)|73 ✅|||74ms| ### ✅ FluentValidation.Tests.AbstractValidatorTester ``` ✅ Can_replace_default_errorcode_resolver ✅ CanValidateInstancesOfType_returns_false_when_comparing_against_some_other_type ✅ CanValidateInstancesOfType_returns_true_when_comparing_against_same_type ✅ CanValidateInstancesOfType_returns_true_when_comparing_against_subclass ✅ Default_error_code_should_be_class_name ✅ OverridePropertyName_should_override_property_name ✅ OverridePropertyName_with_lambda_should_override_property_name ✅ PreValidate_bypasses_nullcheck_on_instance ✅ RuleForeach_with_null_instances ✅ Should_be_valid_when_there_are_no_failures_for_single_property ✅ Should_not_main_state ✅ Should_throw_for_non_member_expression_when_validating_single_property ✅ Should_throw_when_rule_is_null ✅ Should_validate_public_Field ✅ Should_validate_single_Field ✅ Should_validate_single_property ✅ Should_validate_single_property_where_invalid_property_as_string ✅ Should_validate_single_property_where_property_as_string ✅ Uses_named_parameters_to_validate_ruleset ✅ Validates_single_property_by_path ✅ Validates_type_when_using_non_generic_validate_overload ✅ When_the_validators_fail_then_the_errors_Should_be_accessible_via_the_errors_property ✅ When_the_validators_fail_then_validatorrunner_should_return_false ✅ When_the_Validators_pass_then_the_validatorRunner_should_return_true ✅ WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_Validate(preValidationResult: ) ✅ WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_Validate(preValidationResult: AnotherInt Test Message) ✅ WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_ValidateAsync(preValidationResult: ) ✅ WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_ValidateAsync(preValidationResult: AnotherInt Test Message) ✅ WhenPreValidationReturnsTrue_ValidatorsGetHit_Validate ✅ WhenPreValidationReturnsTrue_ValidatorsGetHit_ValidateAsync ✅ WithErrorCode_should_override_error_code ✅ WithMessage_and_WithErrorCode_should_override_error_message_and_error_code ✅ WithMessage_should_override_error_message ✅ WithName_should_override_field_name ✅ WithName_should_override_field_name_with_value_from_other_property ``` ### ✅ FluentValidation.Tests.AccessorCacheTests ``` ⚪ Benchmark ✅ Equality_comparison_check ✅ Gets_accessor ✅ Gets_member_for_nested_property ✅ Identifies_if_memberexp_acts_on_model_instance ``` ### ✅ FluentValidation.Tests.AssemblyScannerTester ``` ✅ Finds_validators_for_types ✅ ForEach_iterates_over_types ``` ### ✅ FluentValidation.Tests.CascadingFailuresTester ``` ✅ Cascade_mode_can_be_set_after_validator_instantiated ✅ Cascade_mode_can_be_set_after_validator_instantiated_async ✅ Cascade_mode_can_be_set_after_validator_instantiated_async_legacy ✅ Cascade_mode_can_be_set_after_validator_instantiated_legacy ✅ Validation_continues_on_failure ✅ Validation_continues_on_failure_async ✅ Validation_continues_on_failure_when_set_to_Stop_globally_and_overriden_at_rule_level ✅ Validation_continues_on_failure_when_set_to_Stop_globally_and_overriden_at_rule_level_async ✅ Validation_continues_on_failure_when_set_to_Stop_globally_and_overriden_at_rule_level_async_legacy ✅ Validation_continues_on_failure_when_set_to_Stop_globally_and_overriden_at_rule_level_legacy ✅ Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_validator_level_and_overriden_at_rule_level ✅ Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_validator_level_and_overriden_at_rule_level_async ✅ Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_validator_level_and_overriden_at_rule_level_async_legacy ✅ Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_validator_level_and_overriden_at_rule_level_legacy ✅ Validation_continues_to_second_validator_when_first_validator_succeeds_and_cascade_set_to_stop ✅ Validation_continues_to_second_validator_when_first_validator_succeeds_and_cascade_set_to_stop_async ✅ Validation_continues_to_second_validator_when_first_validator_succeeds_and_cascade_set_to_stop_async_legacy ✅ Validation_continues_to_second_validator_when_first_validator_succeeds_and_cascade_set_to_stop_legacy ✅ Validation_continues_when_set_to_Continue_at_validator_level ✅ Validation_continues_when_set_to_Continue_at_validator_level_async ✅ Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rule_level ✅ Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rule_level_async ✅ Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rule_level_async_legacy ✅ Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rule_level_legacy ✅ Validation_stops_on_first_failure ✅ Validation_stops_on_first_failure_async ✅ Validation_stops_on_first_failure_async_legacy ✅ Validation_stops_on_first_failure_legacy ✅ Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level ✅ Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level_and_async_validator_is_invoked_synchronously ✅ Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level_and_async_validator_is_invoked_synchronously_legacy ✅ Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level_async ✅ Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level_async_legacy ✅ Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level_legacy ✅ Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_validator_level ✅ Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_validator_level_async ✅ Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_validator_level_async_legacy ✅ Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_validator_level_legacy ``` ### ✅ FluentValidation.Tests.ChainedValidationTester ``` ✅ Can_validate_using_validator_for_base_type ✅ Chained_property_should_be_excluded ✅ Chained_validator_descriptor ✅ Chained_validator_should_not_be_invoked_on_null_property ✅ Condition_should_work_with_chained_property ✅ Explicitly_included_properties_should_be_propagated_to_nested_validators ✅ Explicitly_included_properties_should_be_propagated_to_nested_validators_using_strings ✅ Separate_validation_on_chained_property ✅ Separate_validation_on_chained_property_conditional ✅ Separate_validation_on_chained_property_valid ✅ Should_allow_normal_rules_and_chained_property_on_same_property ✅ Uses_explicit_ruleset ✅ Validates_chained_property ``` ### ✅ FluentValidation.Tests.ChainingValidatorsTester ``` ✅ Options_should_only_apply_to_current_validator ✅ Should_create_multiple_validators ✅ Should_execute_multiple_validators ``` ### ✅ FluentValidation.Tests.ChildRulesTests ``` ✅ Can_define_nested_rules_for_collection ✅ ChildRules_works_with_RuleSet ``` ### ✅ FluentValidation.Tests.CollectionValidatorWithParentTests ``` ✅ Async_condition_should_work_with_child_collection ✅ Can_specify_condition_for_individual_collection_elements ✅ Can_validate_collection_using_validator_for_base_type ✅ Collection_should_be_excluded ✅ Collection_should_be_explicitly_included_with_expression ✅ Collection_should_be_explicitly_included_with_string ✅ Condition_should_work_with_child_collection ✅ Creates_validator_using_context_from_property_value ✅ Should_override_property_name ✅ Should_work_with_top_level_collection_validator ✅ Should_work_with_top_level_collection_validator_and_overriden_name ✅ Skips_null_items ✅ Validates_collection ✅ Validates_collection_asynchronously ✅ Validates_collection_several_levels_deep ✅ Validates_collection_several_levels_deep_async ``` ### ✅ FluentValidation.Tests.ComplexValidationTester ``` ✅ Async_condition_should_work_with_complex_property ✅ Async_condition_should_work_with_complex_property_when_validator_invoked_synchronously ✅ Can_directly_validate_multiple_fields_of_same_type ✅ Can_validate_using_validator_for_base_type ✅ Complex_property_should_be_excluded ✅ Complex_validator_should_not_be_invoked_on_null_property ✅ Condition_should_work_with_complex_property ✅ Condition_should_work_with_complex_property_when_invoked_async ✅ Explicitly_included_properties_should_be_propagated_to_nested_validators ✅ Explicitly_included_properties_should_be_propagated_to_nested_validators_using_strings ✅ Multiple_rules_in_chain_with_childvalidator_shouldnt_reuse_accessor ✅ Multiple_rules_in_chain_with_childvalidator_shouldnt_reuse_accessor_async ✅ Should_allow_normal_rules_and_complex_property_on_same_property ✅ Should_override_propertyName ✅ Validates_child_validator_asynchronously ✅ Validates_child_validator_synchronously ✅ Validates_complex_property ``` ### ✅ FluentValidation.Tests.ConditionTests ``` ✅ Async_condition_executed_synchronosuly_with_asynchronous_collection_rule ✅ Async_condition_executed_synchronosuly_with_asynchronous_rule ✅ Async_condition_executed_synchronosuly_with_synchronous_collection_role ✅ Async_condition_executed_synchronosuly_with_synchronous_role ✅ Async_condition_is_applied_to_all_validators_in_the_chain ✅ Async_condition_is_applied_to_all_validators_in_the_chain_when_executed_synchronously ✅ Async_condition_is_applied_to_single_validator_in_the_chain_when_ApplyConditionTo_set_to_CurrentValidator ✅ Condition_is_applied_to_all_validators_in_the_chain ✅ Condition_is_applied_to_single_validator_in_the_chain_when_ApplyConditionTo_set_to_CurrentValidator ✅ Sync_condition_is_applied_to_async_validators ✅ Validation_should_fail_when_async_condition_does_not_match ✅ Validation_should_fail_when_async_condition_matches ✅ Validation_should_fail_when_condition_does_not_match ✅ Validation_should_fail_when_condition_matches ✅ Validation_should_succeed_when_async_condition_does_not_match ✅ Validation_should_succeed_when_async_condition_matches ✅ Validation_should_succeed_when_condition_does_not_match ✅ Validation_should_succeed_when_condition_matches ``` ### ✅ FluentValidation.Tests.CreditCardValidatorTests ``` ✅ IsValidTests ✅ When_validation_fails_the_default_error_should_be_set ``` ### ✅ FluentValidation.Tests.CustomFailureActionTester ``` ✅ Does_not_invoke_action_if_validation_success ✅ Invokes_custom_action_on_failure ✅ Passes_object_being_validated_to_action ``` ### ✅ FluentValidation.Tests.CustomMessageFormatTester ``` ✅ Replaces_propertyvalue_placeholder ✅ Replaces_propertyvalue_with_empty_string_when_null ✅ Should_format_custom_message ✅ Uses_custom_delegate_for_building_message ✅ Uses_custom_delegate_for_building_message_only_for_specific_validator ✅ Uses_property_value_in_message ``` ### ✅ FluentValidation.Tests.CustomValidatorTester ``` ✅ New_Custom_Returns_single_failure ✅ New_Custom_Returns_single_failure_async ✅ New_custom_uses_empty_property_name_for_model_level_rule ✅ New_Custom_When_property_name_omitted_infers_property_name ✅ New_Custom_When_property_name_omitted_infers_property_name_nested ✅ New_Custom_within_ruleset ✅ New_CustomAsync_within_ruleset ✅ Perserves_property_chain_using_custom ✅ Runs_async_rule_synchronously_when_validator_invoked_synchronously ✅ Runs_sync_rule_asynchronously_when_validator_invoked_asynchronously ``` ### ✅ FluentValidation.Tests.DefaultValidatorExtensionTester ``` ✅ Empty_should_create_EmptyValidator ✅ Equal_should_create_EqualValidator_with_explicit_value ✅ Equal_should_create_EqualValidator_with_lambda ✅ GreaterThan_should_create_GreaterThanValidator_with_explicit_value ✅ GreaterThan_should_create_GreaterThanValidator_with_lambda ✅ GreaterThanOrEqual_should_create_GreaterThanOrEqualValidator_with_explicit_value ✅ GreaterThanOrEqual_should_create_GreaterThanOrEqualValidator_with_lambda ✅ GreaterThanOrEqual_should_create_GreaterThanOrEqualValidator_with_lambda_with_other_Nullable ✅ Length_should_create_ExactLengthValidator ✅ Length_should_create_LengthValidator ✅ Length_should_create_MaximumLengthValidator ✅ Length_should_create_MinimumLengthValidator ✅ LessThan_should_create_LessThanValidator_with_explicit_value ✅ LessThan_should_create_LessThanValidator_with_lambda ✅ LessThanOrEqual_should_create_LessThanOrEqualValidator_with_explicit_value ✅ LessThanOrEqual_should_create_LessThanOrEqualValidator_with_lambda ✅ LessThanOrEqual_should_create_LessThanOrEqualValidator_with_lambda_with_other_Nullable ✅ Must_should_create_PredicateValidator_with_context ✅ Must_should_create_PredicateValidator_with_PropertyValidatorContext ✅ Must_should_create_PredicteValidator ✅ MustAsync_should_create_AsyncPredicateValidator_with_context ✅ MustAsync_should_create_AsyncPredicateValidator_with_PropertyValidatorContext ✅ MustAsync_should_create_AsyncPredicteValidator ✅ MustAsync_should_not_throw_InvalidCastException ✅ NotEmpty_should_create_NotEmptyValidator ✅ NotEqual_should_create_NotEqualValidator_with_explicit_value ✅ NotEqual_should_create_NotEqualValidator_with_lambda ✅ NotNull_should_create_NotNullValidator ✅ ScalePrecision_should_create_ScalePrecisionValidator ✅ ScalePrecision_should_create_ScalePrecisionValidator_with_ignore_trailing_zeros ``` ### ✅ FluentValidation.Tests.EmailValidatorTests ``` ✅ Fails_email_validation_aspnetcore_compatible(email: " \r \t \n") ✅ Fails_email_validation_aspnetcore_compatible(email: "") ✅ Fails_email_validation_aspnetcore_compatible(email: "@someDomain.com") ✅ Fails_email_validation_aspnetcore_compatible(email: "@someDomain@abc.com") ✅ Fails_email_validation_aspnetcore_compatible(email: "0") ✅ Fails_email_validation_aspnetcore_compatible(email: "someName") ✅ Fails_email_validation_aspnetcore_compatible(email: "someName@") ✅ Fails_email_validation_aspnetcore_compatible(email: "someName@a@b.com") ✅ Invalid_email_addressex_regex(email: "") ✅ Invalid_email_addressex_regex(email: "first.last@test..co.uk") ✅ Invalid_email_addressex_regex(email: "testperso") ✅ Invalid_email_addressex_regex(email: "thisisaverylongstringcodeplex.com") ✅ Valid_email_addresses_aspnetcore_compatible(email: " @someDomain.com") ✅ Valid_email_addresses_aspnetcore_compatible(email: "!#$%&'*+-/=?^_`|~@someDomain.com") ✅ Valid_email_addresses_aspnetcore_compatible(email: "\"firstName.lastName\"@someDomain.com") ✅ Valid_email_addresses_aspnetcore_compatible(email: "1234@someDomain.com") ✅ Valid_email_addresses_aspnetcore_compatible(email: "firstName.lastName@someDomain.com") ✅ Valid_email_addresses_aspnetcore_compatible(email: "someName@1234.com") ✅ Valid_email_addresses_aspnetcore_compatible(email: "someName@some_domain.com") ✅ Valid_email_addresses_aspnetcore_compatible(email: "someName@some~domain.com") ✅ Valid_email_addresses_aspnetcore_compatible(email: "someName@someDomain.com") ✅ Valid_email_addresses_aspnetcore_compatible(email: "someName@someDomain￯.com") ✅ Valid_email_addresses_aspnetcore_compatible(email: null) ✅ Valid_email_addresses_regex(email: "__somename@example.com") ✅ Valid_email_addresses_regex(email: "!def!xyz%abc@example.com") ✅ Valid_email_addresses_regex(email: "\"Abc@def\"@example.com") ✅ Valid_email_addresses_regex(email: "\"Abc\\@def\"@example.com") ✅ Valid_email_addresses_regex(email: "\"Fred Bloggs\"@example.com") ✅ Valid_email_addresses_regex(email: "\"Joe\\Blow\"@example.com") ✅ Valid_email_addresses_regex(email: "$A12345@example.com") ✅ Valid_email_addresses_regex(email: "customer/department=shipping@example.com") ✅ Valid_email_addresses_regex(email: "first.last@test.co.uk") ✅ Valid_email_addresses_regex(email: "testperson@gmail.com") ✅ Valid_email_addresses_regex(email: "TestPerson@gmail.com") ✅ Valid_email_addresses_regex(email: "testperson+label@gmail.com") ✅ Valid_email_addresses_regex(email: null) ``` ### ✅ FluentValidation.Tests.EmptyTester ``` ✅ Passes_for_ienumerable_that_doesnt_implement_ICollection ✅ Passes_when_collection_empty ✅ When_there_is_a_value_then_the_validator_should_fail ✅ When_validation_fails_error_should_be_set ✅ When_value_is_Default_for_type_validator_should_pass_datetime ✅ When_value_is_Default_for_type_validator_should_pass_int ✅ When_value_is_empty_string_validator_should_pass ✅ When_value_is_null_validator_should_pass ✅ When_value_is_whitespace_validation_should_pass ``` ### ✅ FluentValidation.Tests.EnumValidatorTests ``` ✅ Flags_enum_invalid_when_using_outofrange_negative_value ✅ Flags_enum_invalid_when_using_outofrange_positive_value ✅ Flags_enum_valid_when_using_bitwise_value ✅ Flags_enum_validates_correctly_when_using_zero_value ✅ Flags_enum_with_overlapping_flags_valid_when_using_bitwise_value ✅ IsValidTests ✅ Nullable_enum_invalid_when_bad_value_specified ✅ Nullable_enum_valid_when_property_value_is_null ✅ Nullable_enum_valid_when_value_specified ✅ When_the_enum_is_initialized_with_invalid_value_then_the_validator_should_fail ✅ When_the_enum_is_not_initialized_with_valid_value_then_the_validator_should_fail ✅ When_validation_fails_the_default_error_should_be_set ``` ### ✅ FluentValidation.Tests.EqualValidatorTests ``` ✅ Comparison_property_uses_custom_resolver ✅ Should_store_comparison_type ✅ Should_store_property_to_compare ✅ Should_succeed_on_case_insensitive_comparison ✅ Should_succeed_on_case_insensitive_comparison_using_expression ✅ Should_use_ordinal_comparison_by_default ✅ Validates_against_property ✅ When_the_objects_are_equal_validation_should_succeed ✅ When_the_objects_are_not_equal_validation_should_fail ✅ When_validation_fails_the_error_should_be_set ``` ### ✅ FluentValidation.Tests.ExactLengthValidatorTester ``` ✅ Min_and_max_properties_should_be_set ✅ When_exact_length_rule_failes_error_should_have_exact_length_error_errorcode ✅ When_the_text_is_an_exact_length_the_validator_should_pass ✅ When_the_text_length_is_larger_the_validator_should_fail ✅ When_the_text_length_is_smaller_the_validator_should_fail ✅ When_the_validator_fails_the_error_message_should_be_set ``` ### ✅ FluentValidation.Tests.ExclusiveBetweenValidatorTests ``` ✅ To_and_from_properties_should_be_set ✅ To_and_from_properties_should_be_set_for_dates ✅ To_and_from_properties_should_be_set_for_strings ✅ Validates_with_nullable_when_property_is_null ✅ Validates_with_nullable_when_property_not_null ✅ When_the_text_is_larger_than_the_range_then_the_validator_should_fail ✅ When_the_text_is_larger_than_the_range_then_the_validator_should_fail_for_strings ✅ When_the_to_is_smaller_than_the_from_then_the_validator_should_throw ✅ When_the_to_is_smaller_than_the_from_then_the_validator_should_throw_for_strings ✅ When_the_validator_fails_the_error_message_should_be_set ✅ When_the_validator_fails_the_error_message_should_be_set_for_strings ✅ When_the_value_is_between_the_range_specified_then_the_validator_should_pass ✅ When_the_value_is_between_the_range_specified_then_the_validator_should_pass_for_strings ✅ When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_validator_should_fail ✅ When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_validator_should_fail_for_strings ✅ When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_validator_should_fail ✅ When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_validator_should_fail_for_strings ✅ When_the_value_is_smaller_than_the_range_then_the_validator_should_fail ✅ When_the_value_is_smaller_than_the_range_then_the_validator_should_fail_for_strings ``` ### ✅ FluentValidation.Tests.ExtensionTester ``` ✅ Should_extract_member_from_member_expression ✅ Should_return_null_for_non_member_expressions ✅ Should_split_pascal_cased_member_name ✅ SplitPascalCase_should_return_null_when_input_is_null ``` ### ✅ FluentValidation.Tests.ForEachRuleTests ``` ✅ Async_condition_should_work_with_child_collection ✅ Can_access_colletion_index ✅ Can_access_colletion_index_async ✅ Can_access_parent_index ✅ Can_access_parent_index_async ✅ Can_specify_condition_for_individual_collection_elements ✅ Can_use_cascade_with_RuleForEach ✅ Can_validate_collection_using_validator_for_base_type ✅ Collection_should_be_excluded ✅ Collection_should_be_explicitly_included_with_expression ✅ Collection_should_be_explicitly_included_with_string ✅ Condition_should_work_with_child_collection ✅ Correctly_gets_collection_indices ✅ Correctly_gets_collection_indices_async ✅ Executes_rule_for_each_item_in_collection ✅ Executes_rule_for_each_item_in_collection_async ✅ Nested_collection_for_null_property_should_not_throw_null_reference ✅ Nested_conditions_Rule_For ✅ Nested_conditions_Rule_For_Each ✅ Overrides_indexer ✅ Overrides_indexer_async ✅ Regular_rules_can_drop_into_RuleForEach ✅ RuleForEach_async_RunsTasksSynchronously ✅ Should_not_scramble_property_name_when_using_collection_validators_several_levels_deep ✅ Should_not_scramble_property_name_when_using_collection_validators_several_levels_deep_with_ValidateAsync ✅ Should_override_property_name ✅ Skips_null_items ✅ Top_level_collection ✅ Uses_useful_error_message_when_used_on_non_property ✅ Validates_child_validator_asynchronously ✅ Validates_child_validator_synchronously ✅ Validates_collection ✅ When_runs_outside_RuleForEach_loop ✅ When_runs_outside_RuleForEach_loop_async ``` ### ✅ FluentValidation.Tests.GreaterThanOrEqualToValidatorTester ``` ✅ Comparison_property_uses_custom_resolver ✅ Comparison_type ✅ Should_fail_when_less_than_input ✅ Should_localize_value ✅ Should_set_default_error_when_validation_fails ✅ Should_succeed_when_equal_to_input ✅ Should_succeed_when_greater_than_input ✅ Validates_nullable_with_nullable_property ✅ Validates_with_nullable_property ✅ Validates_with_nullable_when_property_is_null ✅ Validates_with_nullable_when_property_is_null_cross_property ✅ Validates_with_nullable_when_property_not_null ✅ Validates_with_nullable_when_property_not_null_cross_property ✅ Validates_with_property ``` ### ✅ FluentValidation.Tests.GreaterThanValidatorTester ``` ✅ Comparison_property_uses_custom_resolver ✅ Comparison_Type ✅ Should_fail_when_equal_to_input ✅ Should_fail_when_less_than_input ✅ Should_set_default_error_when_validation_fails ✅ Should_succeed_when_greater_than_input ✅ Validates_nullable_with_nullable_property ✅ Validates_with_nullable_property ✅ Validates_with_nullable_when_property_is_null ✅ Validates_with_nullable_when_property_is_null_cross_property ✅ Validates_with_nullable_when_property_not_null ✅ Validates_with_nullable_when_property_not_null_cross_property ✅ Validates_with_property ``` ### ✅ FluentValidation.Tests.InclusiveBetweenValidatorTests ``` ✅ To_and_from_properties_should_be_set ✅ To_and_from_properties_should_be_set_for_strings ✅ Validates_with_nullable_when_property_is_null ✅ Validates_with_nullable_when_property_not_null ✅ When_the_text_is_larger_than_the_range_then_the_validator_should_fail ✅ When_the_text_is_larger_than_the_range_then_the_validator_should_fail_for_strings ✅ When_the_to_is_smaller_than_the_from_then_the_validator_should_throw ✅ When_the_to_is_smaller_than_the_from_then_the_validator_should_throw_for_strings ✅ When_the_validator_fails_the_error_message_should_be_set ✅ When_the_validator_fails_the_error_message_should_be_set_for_strings ✅ When_the_value_is_between_the_range_specified_then_the_validator_should_pass ✅ When_the_value_is_between_the_range_specified_then_the_validator_should_pass_for_strings ✅ When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_validator_should_pass ✅ When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_validator_should_pass_for_strings ✅ When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_validator_should_pass ✅ When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_validator_should_pass_for_strings ✅ When_the_value_is_smaller_than_the_range_then_the_validator_should_fail ✅ When_the_value_is_smaller_than_the_range_then_the_validator_should_fail_for_strings ``` ### ✅ FluentValidation.Tests.InheritanceValidatorTest ``` ✅ Can_use_custom_subclass_with_nongeneric_overload ✅ Validates_collection ✅ Validates_collection_async ✅ Validates_inheritance_async ✅ Validates_inheritance_hierarchy ✅ Validates_ruleset ✅ Validates_ruleset_async ✅ Validates_with_callback ✅ Validates_with_callback_accepting_derived ✅ Validates_with_callback_accepting_derived_async ✅ Validates_with_callback_async ``` ### ✅ FluentValidation.Tests.InlineValidatorTester ``` ✅ Uses_inline_validator_to_build_rules ``` ### ✅ FluentValidation.Tests.LanguageManagerTests ``` ✅ All_languages_should_be_loaded ✅ All_localizations_have_same_parameters_as_English ✅ Always_use_specific_language ✅ Always_use_specific_language_with_string_source ✅ Can_replace_message ✅ Can_replace_message_without_overriding_all_languages ✅ Disables_localization ✅ Falls_back_to_default_localization_key_when_error_code_key_not_found ✅ Falls_back_to_english_when_culture_not_registered ✅ Falls_back_to_english_when_translation_missing ✅ Falls_back_to_parent_culture ✅ Gets_translation_for_bosnian_latin_culture(cultureName: "bs-Latn-BA") ✅ Gets_translation_for_bosnian_latin_culture(cultureName: "bs-Latn") ✅ Gets_translation_for_bosnian_latin_culture(cultureName: "bs") ✅ Gets_translation_for_croatian_culture ✅ Gets_translation_for_culture ✅ Gets_translation_for_serbian_culture(cultureName: "sr-Latn-RS") ✅ Gets_translation_for_serbian_culture(cultureName: "sr-Latn") ✅ Gets_translation_for_serbian_culture(cultureName: "sr") ✅ Gets_translation_for_specific_culture ✅ Uses_error_code_as_localization_key ``` ### ✅ FluentValidation.Tests.LengthValidatorTests ``` ✅ Min_and_max_properties_should_be_set ✅ When_input_is_null_then_the_validator_should_pass ✅ When_the_max_is_smaller_than_the_min_then_the_validator_should_throw ✅ When_the_maxlength_validator_fails_the_error_message_should_be_set ✅ When_the_minlength_validator_fails_the_error_message_should_be_set ✅ When_the_text_is_between_the_lambda_range_specified_then_the_validator_should_pass ✅ When_the_text_is_between_the_range_specified_then_the_validator_should_pass ✅ When_the_text_is_exactly_the_size_of_the_lambda_lower_bound_then_the_validator_should_pass ✅ When_the_text_is_exactly_the_size_of_the_lambda_upper_bound_then_the_validator_should_pass ✅ When_the_text_is_exactly_the_size_of_the_lower_bound_then_the_validator_should_pass ✅ When_the_text_is_exactly_the_size_of_the_upper_bound_then_the_validator_should_pass ✅ When_the_text_is_larger_than_the_lambda_range_then_the_validator_should_fail ✅ When_the_text_is_larger_than_the_range_then_the_validator_should_fail ✅ When_the_text_is_smaller_than_the_lambda_range_then_the_validator_should_fail ✅ When_the_text_is_smaller_than_the_range_then_the_validator_should_fail ✅ When_the_validator_fails_the_error_message_should_be_set ``` ### ✅ FluentValidation.Tests.LessThanOrEqualToValidatorTester ``` ✅ Comparison_property_uses_custom_resolver ✅ Comparison_type ✅ Should_fail_when_greater_than_input ✅ Should_set_default_error_when_validation_fails ✅ Should_succeed_when_equal_to_input ✅ Should_succeed_when_less_than_input ✅ Validates_nullable_with_nullable_property ✅ Validates_with_nullable_property ✅ Validates_with_nullable_when_property_is_null ✅ Validates_with_nullable_when_property_is_null_cross_property ✅ Validates_with_nullable_when_property_not_null ✅ Validates_with_nullable_when_property_not_null_cross_property ✅ Validates_with_property ``` ### ✅ FluentValidation.Tests.LessThanValidatorTester ``` ✅ Comparison_property_uses_custom_resolver ✅ Comparison_type ✅ Extracts_property_from_constant_using_expression ✅ Extracts_property_from_expression ✅ Should_fail_when_equal_to_input ✅ Should_fail_when_greater_than_input ✅ Should_set_default_validation_message_when_validation_fails ✅ Should_succeed_when_less_than_input ✅ Should_throw_when_value_to_compare_is_null ✅ Validates_against_property ✅ Validates_nullable_with_nullable_property ✅ Validates_with_nullable_property ✅ Validates_with_nullable_when_property_is_null ✅ Validates_with_nullable_when_property_not_null ✅ Validates_with_nullable_when_property_not_null_cross_property ✅ Validates_with_nullable_when_property_null_cross_property ``` ### ✅ FluentValidation.Tests.LocalisedMessagesTester ``` ✅ Correctly_assigns_default_localized_error_message ✅ Does_not_throw_InvalidCastException_when_using_RuleForEach ✅ Formats_string_with_placeholders ✅ Formats_string_with_placeholders_when_you_cant_edit_the_string ✅ Uses_func_to_get_message ✅ Uses_string_format_with_property_value ``` ### ✅ FluentValidation.Tests.LocalisedNameTester ``` ✅ Uses_localized_name ✅ Uses_localized_name_expression ``` ### ✅ FluentValidation.Tests.MemberAccessorTests ``` ✅ ComplexPropertyGet ✅ ComplexPropertySet ✅ Equality ✅ ImplicitCast ✅ Name ✅ SimpleFieldGet ✅ SimpleFieldSet ✅ SimplePropertyGet ✅ SimplePropertySet ``` ### ✅ FluentValidation.Tests.MessageFormatterTests ``` ✅ Adds_argument_and_custom_arguments ✅ Adds_formatted_argument_and_custom_arguments ✅ Adds_formatted_argument_and_formatted_custom_arguments ✅ Adds_PropertyName_to_message ✅ Adds_value_to_message ✅ Format_property_value ✅ Should_ignore_unknown_numbered_parameters ✅ Should_ignore_unknown_parameters ✅ Understands_date_formats ✅ Understands_numeric_formats ``` ### ✅ FluentValidation.Tests.ModelLevelValidatorTests ``` ✅ Can_use_child_validator_at_model_level ✅ Validates_at_model_level ``` ### ✅ FluentValidation.Tests.NameResolutionPluggabilityTester ``` ✅ Resolves_nested_properties ✅ ShouldHaveValidationError_Should_support_custom_propertynameresolver ✅ Uses_custom_property_name ``` ### ✅ FluentValidation.Tests.NotEmptyTester ``` ✅ Fails_for_array ✅ Fails_for_ienumerable_that_doesnt_implement_ICollection ✅ Fails_when_collection_empty ✅ When_there_is_a_value_then_the_validator_should_pass ✅ When_validation_fails_error_should_be_set ✅ When_value_is_Default_for_type_validator_should_fail_datetime ✅ When_value_is_Default_for_type_validator_should_fail_int ✅ When_value_is_empty_string_validator_should_fail ✅ When_value_is_null_validator_should_fail ✅ When_value_is_whitespace_validation_should_fail ``` ### ✅ FluentValidation.Tests.NotEqualValidatorTests ``` ✅ Comparison_property_uses_custom_resolver ✅ Should_handle_custom_value_types_correctly ✅ Should_not_be_valid_for_case_insensitve_comparison ✅ Should_not_be_valid_for_case_insensitve_comparison_with_expression ✅ Should_store_comparison_type ✅ Should_store_property_to_compare ✅ Should_use_ordinal_comparison_by_default ✅ Validates_across_properties ✅ When_the_objects_are_equal_then_the_validator_should_fail ✅ When_the_objects_are_not_equal_then_the_validator_should_pass ✅ When_the_validator_fails_the_error_message_should_be_set ``` ### ✅ FluentValidation.Tests.NotNullTester ``` ✅ Fails_when_nullable_value_type_is_null ✅ Not_null_validator_should_not_crash_with_non_nullable_value_type ✅ NotNullValidator_should_fail_if_value_is_null ✅ NotNullValidator_should_pass_if_value_has_value ✅ When_the_validator_fails_the_error_message_should_be_set ``` ### ✅ FluentValidation.Tests.NullTester ``` ✅ Not_null_validator_should_not_crash_with_non_nullable_value_type ✅ NullValidator_should_fail_if_value_has_value ✅ NullValidator_should_pass_if_value_is_null ✅ Passes_when_nullable_value_type_is_null ✅ When_the_validator_passes_the_error_message_should_be_set ``` ### ✅ FluentValidation.Tests.OnFailureTests ``` ✅ OnFailure_called_for_each_failed_rule ✅ OnFailure_called_for_each_failed_rule_asyncAsync ✅ Should_be_able_to_access_error_message_in_OnFailure ✅ ShouldHaveChildValidator_should_be_true ✅ ShouldHaveChildValidator_works_with_Include ✅ WhenAsyncWithOnFailure_should_invoke_condition_on_async_inner_validator ✅ WhenAsyncWithOnFailure_should_invoke_condition_on_inner_validator ✅ WhenAsyncWithOnFailure_should_invoke_condition_on_inner_validator_invoked_synchronously ✅ WhenWithOnFailure_should_invoke_condition_on_async_inner_validator ✅ WhenWithOnFailure_should_invoke_condition_on_inner_validator ``` ### ✅ FluentValidation.Tests.PredicateValidatorTester ``` ✅ Should_fail_when_predicate_returns_false ✅ Should_succeed_when_predicate_returns_true ✅ Should_throw_when_predicate_is_null ✅ When_validation_fails_metadata_should_be_set_on_failure ✅ When_validation_fails_the_default_error_should_be_set ``` ### ✅ FluentValidation.Tests.PropertyChainTests ``` ✅ AddIndexer_throws_when_nothing_added ✅ Calling_ToString_should_construct_string_representation_of_chain ✅ Calling_ToString_should_construct_string_representation_of_chain_with_indexers ✅ Creates_from_expression ✅ Should_be_subchain ✅ Should_ignore_blanks ✅ Should_not_be_subchain ``` ### ✅ FluentValidation.Tests.RegularExpressionValidatorTests ``` ✅ Can_access_expression_in_message ✅ Can_access_expression_in_message_lambda ✅ Can_access_expression_in_message_lambda_regex ✅ Uses_lazily_loaded_expression ✅ Uses_lazily_loaded_expression_with_options ✅ Uses_regex_object ✅ When_the_text_does_not_match_the_lambda_regex_regular_expression_then_the_validator_should_fail ✅ When_the_text_does_not_match_the_lambda_regular_expression_then_the_validator_should_fail ✅ When_the_text_does_not_match_the_regular_expression_then_the_validator_should_fail ✅ When_the_text_is_empty_then_the_validator_should_fail ✅ When_the_text_is_null_then_the_validator_should_pass ✅ When_the_text_matches_the_lambda_regex_regular_expression_then_the_validator_should_pass ✅ When_the_text_matches_the_lambda_regular_expression_then_the_validator_should_pass ✅ When_the_text_matches_the_regular_expression_then_the_validator_should_pass ✅ When_validation_fails_the_default_error_should_be_set ``` ### ✅ FluentValidation.Tests.RuleBuilderTests ``` ✅ Adding_a_validator_should_return_builder ✅ Adding_a_validator_should_store_validator ✅ Calling_validate_should_delegate_to_underlying_validator ✅ Calling_ValidateAsync_should_delegate_to_underlying_async_validator ✅ Calling_ValidateAsync_should_delegate_to_underlying_sync_validator ✅ Conditional_child_validator_should_register_with_validator_type_not_property ✅ Nullable_object_with_async_condition_should_not_throw ✅ Nullable_object_with_condition_should_not_throw ✅ Property_should_return_null_when_it_is_not_a_property_being_validated ✅ Property_should_return_property_being_validated ✅ PropertyDescription_should_return_custom_property_name ✅ PropertyDescription_should_return_property_name_split ✅ Result_should_use_custom_property_name_when_no_property_name_can_be_determined ✅ Rule_for_a_non_memberexpression_should_not_generate_property_name ✅ Should_build_property_name ✅ Should_compile_expression ✅ Should_set_custom_error ✅ Should_set_custom_property_name ✅ Should_throw_if_message_is_null ✅ Should_throw_if_overriding_validator_is_null ✅ Should_throw_if_overriding_validator_provider_is_null ✅ Should_throw_if_property_name_is_null ✅ Should_throw_if_validator_is_null ✅ Should_throw_when_async_inverse_predicate_is_null ✅ Should_throw_when_async_predicate_is_null ✅ Should_throw_when_context_predicate_is_null ✅ Should_throw_when_inverse_context_predicate_is_null ✅ Should_throw_when_inverse_predicate_is_null ✅ Should_throw_when_predicate_is_null ``` ### ✅ FluentValidation.Tests.RuleDependencyTests ``` ✅ Async_inside_dependent_rules ✅ Async_inside_dependent_rules_when_parent_rule_not_async ✅ Dependent_rules_inside_ruleset ✅ Dependent_rules_inside_when ✅ Does_not_invoke_dependent_rule_if_parent_rule_does_not_pass ✅ Invokes_dependent_rule_if_parent_rule_passes ✅ Nested_dependent_rules ✅ Nested_dependent_rules_inside_ruleset ✅ Nested_dependent_rules_inside_ruleset_inside_method ✅ Nested_dependent_rules_inside_ruleset_no_result_when_second_level_fails ✅ Nested_dependent_rules_inside_ruleset_no_result_when_top_level_fails ✅ TestAsyncWithDependentRules_AsyncEntry ✅ TestAsyncWithDependentRules_SyncEntry ✅ Treats_root_level_RuleFor_call_as_dependent_rule_if_user_forgets_to_use_DependentRulesBuilder ``` ### ✅ FluentValidation.Tests.RulesetTests ``` ✅ Applies_multiple_rulesets_to_rule ✅ Combines_rulesets_and_explicit_properties ✅ Combines_rulesets_and_explicit_properties_async ✅ Executes_all_rules ✅ Executes_in_rule_in_default_and_none ✅ Executes_in_rule_in_ruleset_and_default ✅ Executes_multiple_rulesets ✅ Executes_rules_in_default_ruleset_and_specific_ruleset ✅ Executes_rules_in_specified_ruleset ✅ Executes_rules_not_specified_in_ruleset ✅ Includes_all_rulesets ✅ Includes_all_rulesets_async ✅ Includes_combination_of_rulesets ✅ Includes_combination_of_rulesets_async ✅ Ruleset_cascades_to_child_collection_validator ✅ Ruleset_cascades_to_child_validator ✅ Ruleset_selection_should_cascade_downwards_with_when_setting_child_validator_using_include_statement ✅ Ruleset_selection_should_cascade_downwards_with_when_setting_child_validator_using_include_statement_with_lambda ✅ Ruleset_selection_should_not_cascade_downwards_when_set_on_property ✅ Trims_spaces ✅ WithMessage_works_inside_rulesets ``` ### ✅ FluentValidation.Tests.ScalePrecisionValidatorTests ``` ✅ Scale_precision_should_be_valid ✅ Scale_precision_should_be_valid_when_ignoring_trailing_zeroes ✅ Scale_precision_should_be_valid_when_they_are_equal ✅ Scale_precision_should_not_be_valid ✅ Scale_precision_should_not_be_valid_when_ignoring_trailing_zeroes ✅ Scale_precision_should_not_be_valid_when_they_are_equal ``` ### ✅ FluentValidation.Tests.SharedConditionTests ``` ✅ Async_condition_can_be_used_inside_ruleset ✅ Condition_can_be_used_inside_ruleset ✅ Does_not_execute_custom_Rule_when_async_condition_false ✅ Does_not_execute_custom_Rule_when_condition_false ✅ Does_not_execute_customasync_Rule_when_async_condition_false ✅ Does_not_execute_customasync_Rule_when_condition_false ✅ Doesnt_throw_NullReferenceException_when_instance_not_null ✅ Doesnt_throw_NullReferenceException_when_instance_not_null_async ✅ Executes_custom_rule_when_async_condition_true ✅ Executes_custom_rule_when_condition_true ✅ Executes_customasync_rule_when_async_condition_true ✅ Executes_customasync_rule_when_condition_true ✅ Nested_async_conditions_with_Custom_rule ✅ Nested_async_conditions_with_CustomAsync_rule ✅ Nested_conditions_with_Custom_rule ✅ Nested_conditions_with_CustomAsync_rule ✅ Outer_async_Unless_clause_will_trump_an_inner_Unless_clause_when_inner_fails_but_the_outer_is_satisfied ✅ Outer_Unless_clause_will_trump_an_inner_Unless_clause_when_inner_fails_but_the_outer_is_satisfied ✅ Rules_invoke_when_inverse_shared_async_condition_matches ✅ Rules_invoke_when_inverse_shared_condition_matches ✅ Rules_not_invoked_when_inverse_shared_async_condition_does_not_match ✅ Rules_not_invoked_when_inverse_shared_condition_does_not_match ✅ RuleSet_can_be_used_inside_async_condition ✅ RuleSet_can_be_used_inside_condition ✅ Runs_otherwise_conditions_for_UnlessAsync ✅ Runs_otherwise_conditions_for_When ✅ Runs_otherwise_conditions_for_WhenAsync ✅ Runs_otherwise_conditons_for_Unless ✅ Shared_async_When_is_applied_to_groupd_rules_when_initial_predicate_is_true_and_all_individual_rules_are_satisfied ✅ Shared_async_When_is_applied_to_grouped_rules_when_initial_predicate_is_true ✅ Shared_async_When_is_not_applied_to_grouped_rules_when_initial_predicate_is_false ✅ Shared_async_When_respects_the_smaller_scope_of_a_inner_Unless_when_the_inner_Unless_predicate_fails ✅ Shared_async_When_respects_the_smaller_scope_of_an_inner_Unless_when_the_inner_Unless_predicate_is_satisfied ✅ Shared_When_is_applied_to_groupd_rules_when_initial_predicate_is_true_and_all_individual_rules_are_satisfied ✅ Shared_When_is_applied_to_grouped_rules_when_initial_predicate_is_true ✅ Shared_When_is_not_applied_to_grouped_rules_when_initial_predicate_is_false ✅ Shared_When_respects_the_smaller_scope_of_a_inner_Unless_when_the_inner_Unless_predicate_fails ✅ Shared_When_respects_the_smaller_scope_of_an_inner_Unless_when_the_inner_Unless_predicate_is_satisfied ✅ When_async_condition_executed_for_each_instance_of_RuleForEach_condition_should_not_be_cached ✅ When_condition_executed_for_each_instance_of_RuleForEach_condition_should_not_be_cached ✅ When_condition_only_executed_once ✅ WhenAsync_condition_only_executed_once ``` ### ✅ FluentValidation.Tests.StandalonePropertyValidationTester ``` ✅ Should_validate_property_value_without_instance ``` ### ✅ FluentValidation.Tests.StringEnumValidatorTests ``` ✅ IsValidTests_CaseInsensitive_CaseCorrect ✅ IsValidTests_CaseInsensitive_CaseIncorrect ✅ IsValidTests_CaseSensitive_CaseCorrect ✅ IsValidTests_CaseSensitive_CaseIncorrect ✅ When_enumType_is_not_an_enum_it_should_throw ✅ When_enumType_is_null_it_should_throw ✅ When_the_property_is_initialized_with_empty_string_then_the_validator_should_fail ✅ When_the_property_is_initialized_with_invalid_string_then_the_validator_should_fail ✅ When_the_property_is_initialized_with_null_then_the_validator_should_be_valid ✅ When_validation_fails_the_default_error_should_be_set ``` ### ✅ FluentValidation.Tests.TrackingCollectionTests ``` ✅ Add_AddsItem ✅ Should_not_raise_event_once_handler_detached ✅ When_Item_Added_Raises_ItemAdded ``` ### ✅ FluentValidation.Tests.TransformTests ``` ✅ Transforms_collection_element ✅ Transforms_collection_element_async ✅ Transforms_property_value ✅ Transforms_property_value_to_another_type ``` ### ✅ FluentValidation.Tests.UserSeverityTester ``` ✅ Can_Provide_conditional_severity ✅ Can_Provide_severity_for_item_in_collection ✅ Correctly_provides_object_being_validated ✅ Defaults_user_severity_to_error ✅ Should_use_last_supplied_severity ✅ Stores_user_severity_against_validation_failure ✅ Throws_when_provider_is_null ``` ### ✅ FluentValidation.Tests.UserStateTester ``` ✅ Can_Provide_state_for_item_in_collection ✅ Correctly_provides_object_being_validated ✅ Stores_user_state_against_validation_failure ✅ Throws_when_provider_is_null ``` ### ✅ FluentValidation.Tests.ValidateAndThrowTester ``` ✅ Does_not_throw_when_valid ✅ Does_not_throw_when_valid_and_a_ruleset ✅ Does_not_throw_when_valid_and_a_ruleset_async ✅ Does_not_throw_when_valid_async ✅ Only_root_validator_throws ✅ Populates_errors ✅ Serializes_exception ✅ Throws_exception ✅ Throws_exception_async ✅ Throws_exception_with_a_ruleset ✅ Throws_exception_with_a_ruleset_async ✅ ToString_provides_error_details ✅ ValidationException_provides_correct_message_when_appendDefaultMessage_false ✅ ValidationException_provides_correct_message_when_appendDefaultMessage_true ``` ### ✅ FluentValidation.Tests.ValidationResultTests ``` ✅ Can_serialize_failure ✅ Can_serialize_result ✅ Should_add_errors ✅ Should_be_valid_when_there_are_no_errors ✅ Should_not_be_valid_when_there_are_errors ✅ ToString_return_empty_string_when_there_is_no_error ✅ ToString_return_error_messages_with_given_separator ✅ ToString_return_error_messages_with_newline_as_separator ``` ### ✅ FluentValidation.Tests.ValidatorDescriptorTester ``` ✅ Does_not_throw_when_rule_declared_without_property ✅ Gets_validators_for_property ✅ GetValidatorsForMember_and_GetRulesForMember_can_both_retrieve_for_model_level_rule ✅ Returns_empty_collection_for_property_with_no_validators ✅ Should_retrieve_name_given_to_it_pass_property_as_string ``` ### ✅ FluentValidation.Tests.ValidatorSelectorTests ``` ✅ Can_use_property_with_include ✅ Does_not_validate_other_property ✅ Does_not_validate_other_property_using_expression ✅ Executes_correct_rule_when_using_property_with_include ✅ Executes_correct_rule_when_using_property_with_include_async ✅ Includes_nested_property ✅ Includes_nested_property_using_expression ✅ MemberNameValidatorSelector_returns_true_when_property_name_matches ✅ Validates_nullable_property_with_overriden_name_when_selected ✅ Validates_property_using_expression ``` ### ✅ FluentValidation.Tests.ValidatorTesterTester ``` ✅ Allows_only_one_failure_to_match ✅ Can_use_indexer_in_string_message ✅ Can_use_indexer_in_string_message_inverse ✅ Expected_error_code_check ✅ Expected_message_argument_check ✅ Expected_message_check ✅ Expected_severity_check ✅ Expected_state_check ✅ Matches_any_failure ✅ Matches_model_level_rule ✅ Model_level_check_fails_if_no_model_level_failures ✅ ShouldHaveChildValidator_should_not_throw_when_property_Does_have_child_validator ✅ ShouldHaveChildValidator_should_not_throw_when_property_Does_have_child_validator_and_expecting_a_basetype ✅ ShouldHaveChildValidator_should_not_throw_when_property_has_collection_validators ✅ ShouldHaveChildValidator_should_throw_when_property_has_a_different_child_validator ✅ ShouldHaveChildValidator_should_work_with_DependentRules ✅ ShouldHaveChildvalidator_throws_when_collection_property_Does_not_have_child_validator ✅ ShouldHaveChildValidator_throws_when_property_does_not_have_child_validator ✅ ShouldHaveChildValidator_works_on_model_level_rules ✅ ShouldHaveValidationError_async ✅ ShouldHaveValidationError_async_throws ✅ ShouldHaveValidationError_model_async ✅ ShouldHaveValidationError_model_async_throws ✅ ShouldHaveValidationError_preconstructed_object_does_not_throw_for_unwritable_property ✅ ShouldHaveValidationError_should_not_throw_when_there_are_errors_with_preconstructed_object ✅ ShouldHaveValidationError_should_not_throw_when_there_are_validation_errors ✅ ShouldHaveValidationError_should_not_throw_when_there_are_validation_errors__WhenAsyn_is_used(age: 42, cardNumber: "") ✅ ShouldHaveValidationError_should_not_throw_when_there_are_validation_errors__WhenAsyn_is_used(age: 42, cardNumber: null) ✅ ShouldHaveValidationError_should_not_throw_when_there_are_validation_errors_ruleforeach ✅ ShouldHaveValidationError_Should_support_nested_properties ✅ ShouldHaveValidationError_Should_throw_when_there_are_no_validation_errors ✅ ShouldHaveValidationError_should_throw_when_there_are_no_validation_errors_with_preconstructed_object ✅ ShouldHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_Is_Used(age: 17, cardNumber: "") ✅ ShouldHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_Is_Used(age: 17, cardNumber: "cardNumber") ✅ ShouldHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_Is_Used(age: 17, cardNumber: null) ✅ ShouldHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_Is_Used(age: 42, cardNumber: "cardNumber") ✅ ShouldHaveValidationError_should_throw_when_there_are_not_validation_errors_ruleforeach ✅ ShouldHaveValidationError_with_an_unmatched_rule_and_a_single_error_should_throw_an_exception ✅ ShouldHaveValidationError_with_an_unmatched_rule_and_multiple_errors_should_throw_an_exception ✅ ShouldHaveValidationErrorFor_takes_account_of_rulesets ✅ ShouldHaveValidationErrorFor_takes_account_of_rulesets_fluent_approach ✅ ShouldNotHaveValidationError_async ✅ ShouldNotHaveValidationError_async_model_throws ✅ ShouldNotHaveValidationError_async_throws ✅ ShouldNotHaveValidationError_model_async ✅ ShouldNotHaveValidationError_should_correctly_handle_explicitly_providing_object_to_validate ✅ ShouldNotHaveValidationError_should_correctly_handle_explicitly_providing_object_to_validate_and_other_property_fails_validation ✅ ShouldNotHaveValidationError_should_have_validation_error_details_when_thrown_ruleforeach ✅ ShouldNotHaveValidationError_should_not_throw_when_there_are_no_errors ✅ ShouldNotHAveValidationError_should_not_throw_When_there_are_no_errors_with_preconstructed_object ✅ ShouldNotHaveValidationError_should_not_throw_when_there_are_not_validation_errors_ruleforeach ✅ ShouldNotHaveValidationError_Should_support_nested_properties ✅ ShouldNotHaveValidationError_should_throw_when_there_are_errors ✅ ShouldNotHaveValidationError_should_throw_when_there_are_errors_with_preconstructed_object ✅ ShouldNotHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_is_used(age: 17, cardNumber: "") ✅ ShouldNotHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_is_used(age: 17, cardNumber: "cardNumber") ✅ ShouldNotHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_is_used(age: 17, cardNumber: null) ✅ ShouldNotHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_is_used(age: 42, cardNumber: "cardNumber") ✅ ShouldNotHaveValidationError_should_throw_when_there_are_validation_errors__WhenAsyn_is_used(age: 42, cardNumber: "") ✅ ShouldNotHaveValidationError_should_throw_when_there_are_validation_errors__WhenAsyn_is_used(age: 42, cardNumber: null) ✅ ShouldNotHaveValidationError_should_throw_when_there_are_validation_errors_ruleforeach ✅ Tests_nested_property ✅ Tests_nested_property_reverse ✅ Tests_nested_property_using_obsolete_method ✅ TestValidate_runs_async ✅ TestValidate_runs_async_throws ✅ Unexpected_error_code_check ✅ Unexpected_message_check(withoutErrMsg: "bar", errMessages: ["bar"]) ✅ Unexpected_message_check(withoutErrMsg: "bar", errMessages: ["foo", "bar"]) ✅ Unexpected_message_check(withoutErrMsg: "bar", errMessages: ["foo"]) ✅ Unexpected_message_check(withoutErrMsg: "bar", errMessages: []) ✅ Unexpected_severity_check ✅ Unexpected_state_check ```