public void Should_CreateValidator_ReturnValidatorInitializedWithSpecificationAndSettings()
        {
            var holderInfo = new HolderInfo(typeof(ObjectSpecificationAndSettingsHolder), typeof(CustomClass));

            var createdValidator = holderInfo.CreateValidator();

            createdValidator.Should().NotBeNull();
            createdValidator.Should().BeOfType <Validator <CustomClass> >();

            var validator = (Validator <CustomClass>)createdValidator;

            var case1 = new CustomClass()
            {
                CustomValue = "@b"
            };

            var case2 = new CustomClass()
            {
                CustomValue = "abcdef"
            };

            var case3 = new CustomClass()
            {
                CustomValue = "@bcdef"
            };

            var case4 = new CustomClass()
            {
                CustomValue = "a"
            };

            validator.Validate(case1).ToString().ShouldResultToStringHaveLines(
                ToStringContentType.Messages,
                "CustomValue: Must not contain @");

            validator.Validate(case2).ToString().ShouldResultToStringHaveLines(
                ToStringContentType.Messages,
                "CustomValue: MUST HAVE MAX 3 CHARACTERS");

            validator.Validate(case3).ToString().ShouldResultToStringHaveLines(
                ToStringContentType.Messages,
                "CustomValue: MUST HAVE MAX 3 CHARACTERS",
                "CustomValue: Must not contain @");

            validator.IsValid(case4).Should().BeTrue();
        }
        public void Should_CreateValidator_ReturnValidatorInitializedWithSpecificationAndSettings_When_HolderHoldsMultipleSpecifications()
        {
            var intHolderInfo = new HolderInfo(typeof(MultipleSpecificationAndSettingsHolder), typeof(int));

            var createdIntValidator = intHolderInfo.CreateValidator();

            createdIntValidator.Should().NotBeNull();
            createdIntValidator.Should().BeOfType <Validator <int> >();

            var intValidator = (Validator <int>)createdIntValidator;

            intValidator.IsValid(5).Should().BeTrue();
            intValidator.IsValid(9).Should().BeTrue();

            intValidator.Validate(0).ToString().ShouldResultToStringHaveLines(
                ToStringContentType.Messages,
                "Only values 1-10 are valid");

            intValidator.Validate(11).ToString().ShouldResultToStringHaveLines(
                ToStringContentType.Messages,
                "Only values 1-10 are valid");

            var stringHolderInfo = new HolderInfo(typeof(MultipleSpecificationAndSettingsHolder), typeof(string));

            var createdStringValidator = stringHolderInfo.CreateValidator();

            createdStringValidator.Should().NotBeNull();
            createdStringValidator.Should().BeOfType <Validator <string> >();

            var stringValidator = (Validator <string>)createdStringValidator;

            stringValidator.IsValid("abc").Should().BeTrue();
            stringValidator.IsValid("abcdefgh").Should().BeTrue();

            stringValidator.Validate("").ToString().ShouldResultToStringHaveLines(
                ToStringContentType.Messages,
                "Only values with length 1-10 are valid");

            stringValidator.Validate("01234567890987654321").ToString().ShouldResultToStringHaveLines(
                ToStringContentType.Messages,
                "Only values with length 1-10 are valid");
        }