804 tests were completed in 4s with 803 passed, 0 failed and 1 skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |FluentValidation.Tests.AbstractValidatorTester|35✔️|||12ms| |FluentValidation.Tests.AccessorCacheTests|4✔️||1✖️|4ms| |FluentValidation.Tests.AssemblyScannerTester|2✔️|||2ms| |FluentValidation.Tests.CascadingFailuresTester|38✔️|||23ms| |FluentValidation.Tests.ChainedValidationTester|13✔️|||6ms| |FluentValidation.Tests.ChainingValidatorsTester|3✔️|||1ms| |FluentValidation.Tests.ChildRulesTests|2✔️|||7ms| |FluentValidation.Tests.CollectionValidatorWithParentTests|16✔️|||13ms| |FluentValidation.Tests.ComplexValidationTester|17✔️|||26ms| |FluentValidation.Tests.ConditionTests|18✔️|||9ms| |FluentValidation.Tests.CreditCardValidatorTests|2✔️|||2ms| |FluentValidation.Tests.CustomFailureActionTester|3✔️|||1ms| |FluentValidation.Tests.CustomMessageFormatTester|6✔️|||3ms| |FluentValidation.Tests.CustomValidatorTester|10✔️|||6ms| |FluentValidation.Tests.DefaultValidatorExtensionTester|30✔️|||38ms| |FluentValidation.Tests.EmailValidatorTests|36✔️|||18ms| |FluentValidation.Tests.EmptyTester|9✔️|||5ms| |FluentValidation.Tests.EnumValidatorTests|12✔️|||24ms| |FluentValidation.Tests.EqualValidatorTests|10✔️|||3ms| |FluentValidation.Tests.ExactLengthValidatorTester|6✔️|||2ms| |FluentValidation.Tests.ExclusiveBetweenValidatorTests|19✔️|||6ms| |FluentValidation.Tests.ExtensionTester|4✔️|||1ms| |FluentValidation.Tests.ForEachRuleTests|34✔️|||47ms| |FluentValidation.Tests.GreaterThanOrEqualToValidatorTester|14✔️|||5ms| |FluentValidation.Tests.GreaterThanValidatorTester|13✔️|||4ms| |FluentValidation.Tests.InclusiveBetweenValidatorTests|18✔️|||4ms| |FluentValidation.Tests.InheritanceValidatorTest|11✔️|||18ms| |FluentValidation.Tests.InlineValidatorTester|1✔️|||2ms| |FluentValidation.Tests.LanguageManagerTests|21✔️|||28ms| |FluentValidation.Tests.LengthValidatorTests|16✔️|||17ms| |FluentValidation.Tests.LessThanOrEqualToValidatorTester|13✔️|||4ms| |FluentValidation.Tests.LessThanValidatorTester|16✔️|||6ms| |FluentValidation.Tests.LocalisedMessagesTester|6✔️|||3ms| |FluentValidation.Tests.LocalisedNameTester|2✔️|||1ms| |FluentValidation.Tests.MemberAccessorTests|9✔️|||5ms| |FluentValidation.Tests.MessageFormatterTests|10✔️|||2ms| |FluentValidation.Tests.ModelLevelValidatorTests|2✔️|||1ms| |FluentValidation.Tests.NameResolutionPluggabilityTester|3✔️|||2ms| |FluentValidation.Tests.NotEmptyTester|10✔️|||7ms| |FluentValidation.Tests.NotEqualValidatorTests|11✔️|||7ms| |FluentValidation.Tests.NotNullTester|5✔️|||1ms| |FluentValidation.Tests.NullTester|5✔️|||2ms| |FluentValidation.Tests.OnFailureTests|10✔️|||8ms| |FluentValidation.Tests.PredicateValidatorTester|5✔️|||2ms| |FluentValidation.Tests.PropertyChainTests|7✔️|||1ms| |FluentValidation.Tests.RegularExpressionValidatorTests|15✔️|||6ms| |FluentValidation.Tests.RuleBuilderTests|29✔️|||96ms| |FluentValidation.Tests.RuleDependencyTests|14✔️|||3s| |FluentValidation.Tests.RulesetTests|21✔️|||14ms| |FluentValidation.Tests.ScalePrecisionValidatorTests|6✔️|||4ms| |FluentValidation.Tests.SharedConditionTests|42✔️|||42ms| |FluentValidation.Tests.StandalonePropertyValidationTester|1✔️|||0ms| |FluentValidation.Tests.StringEnumValidatorTests|10✔️|||5ms| |FluentValidation.Tests.TrackingCollectionTests|3✔️|||2ms| |FluentValidation.Tests.TransformTests|4✔️|||3ms| |FluentValidation.Tests.UserSeverityTester|7✔️|||3ms| |FluentValidation.Tests.UserStateTester|4✔️|||3ms| |FluentValidation.Tests.ValidateAndThrowTester|14✔️|||25ms| |FluentValidation.Tests.ValidationResultTests|8✔️|||8ms| |FluentValidation.Tests.ValidatorDescriptorTester|5✔️|||1ms| |FluentValidation.Tests.ValidatorSelectorTests|10✔️|||9ms| |FluentValidation.Tests.ValidatorTesterTester|73✔️|||74ms|
✔️ 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
✖️ Benchmark ✔️ Equality_comparison_check ✔️ Gets_accessor ✔️ Gets_member_for_nested_property ✔️ Identifies_if_memberexp_acts_on_model_instance
✔️ Finds_validators_for_types ✔️ ForEach_iterates_over_types
✔️ 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
✔️ 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
✔️ Options_should_only_apply_to_current_validator ✔️ Should_create_multiple_validators ✔️ Should_execute_multiple_validators
✔️ Can_define_nested_rules_for_collection ✔️ ChildRules_works_with_RuleSet
✔️ 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
✔️ 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
✔️ 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
✔️ IsValidTests ✔️ When_validation_fails_the_default_error_should_be_set
✔️ Does_not_invoke_action_if_validation_success ✔️ Invokes_custom_action_on_failure ✔️ Passes_object_being_validated_to_action
✔️ 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
✔️ 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
✔️ 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
✔️ 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)
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ Uses_inline_validator_to_build_rules
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ Uses_localized_name ✔️ Uses_localized_name_expression
✔️ ComplexPropertyGet ✔️ ComplexPropertySet ✔️ Equality ✔️ ImplicitCast ✔️ Name ✔️ SimpleFieldGet ✔️ SimpleFieldSet ✔️ SimplePropertyGet ✔️ SimplePropertySet
✔️ 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
✔️ Can_use_child_validator_at_model_level ✔️ Validates_at_model_level
✔️ Resolves_nested_properties ✔️ ShouldHaveValidationError_Should_support_custom_propertynameresolver ✔️ Uses_custom_property_name
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ Should_validate_property_value_without_instance
✔️ 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
✔️ Add_AddsItem ✔️ Should_not_raise_event_once_handler_detached ✔️ When_Item_Added_Raises_ItemAdded
✔️ Transforms_collection_element ✔️ Transforms_collection_element_async ✔️ Transforms_property_value ✔️ Transforms_property_value_to_another_type
✔️ 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
✔️ Can_Provide_state_for_item_in_collection ✔️ Correctly_provides_object_being_validated ✔️ Stores_user_state_against_validation_failure ✔️ Throws_when_provider_is_null
✔️ 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
✔️ 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
✔️ 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
✔️ 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
✔️ 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