public void Constructor_SetErrorMessage()
        {
            // Arrange / Act
            var sut = new RegexValidationRule(_ERROR_MESSAGE, @"\d+");

            // Assert
            sut.ErrorMessage.Should().Be(_ERROR_MESSAGE);
        }
        public void ValidatesTextMatchingRegexTest()
        {
            var validator = new RegexValidationRule();

            validator.RegexText = ".B.";

            var validationResult = validator.Validate("ABC", CultureInfo.CurrentCulture);

            Assert.IsTrue(validationResult.IsValid);
        }
        public void Validate_empty_property_type_of_string_with_empty_expression_should_be_invalid()
        {
            var propertyName   = "StringProperty";
            var target         = new RegexValidationRule(propertyName, "");
            var businessObject = new TestEntity()
            {
                StringProperty = ""
            };

            Assert.IsFalse(target.Validate(businessObject));
        }
        public void Validate_property_type_of_string_with_any_value_should_be_valid()
        {
            var propertyName   = "StringProperty";
            var target         = new RegexValidationRule(propertyName, @".");
            var businessObject = new TestEntity()
            {
                StringProperty = "Test text"
            };

            Assert.IsTrue(target.Validate(businessObject));
        }
        public void InValidatesTextNotMatchingRegexTest()
        {
            var validator = new RegexValidationRule();

            validator.RegexText    = ".B.";
            validator.ErrorMessage = ErrorMessage;

            var validationResult = validator.Validate("AXC", CultureInfo.CurrentCulture);

            Assert.IsFalse(validationResult.IsValid);
            Assert.AreEqual(ErrorMessage, validationResult.ErrorContent.ToString());
        }
        public void Validate_ForValidValue(string pattern, bool nullIsValid, bool invert,
                                           bool expected)
        {
            // Arrange
            var sut = new RegexValidationRule(_ERROR_MESSAGE, pattern, nullIsValid, invert);

            // Act
            var result = sut.Validate("321");

            // Assert
            result.Should().Be(expected);
        }
        private static void CreateValidationRules(ValueBindingModel valueBindingModel)
        {
            // validation rules
            var rules = new List <ValidationRule>();

            if (!valueBindingModel.IsOptional)
            {
                switch (valueBindingModel.Control.Type)
                {
                case ControlTypes.Options:
                    rules.Add(new OptionSelectedValidationRule());
                    break;

                case ControlTypes.Folder:
                case ControlTypes.InputFile:
                case ControlTypes.Integer:
                case ControlTypes.Multiline:
                case ControlTypes.Number:
                case ControlTypes.OutputFile:
                case ControlTypes.Text:
                case ControlTypes.Uri:
                    rules.Add(new NotNullOrEmptyValidationRule());
                    break;
                }
            }

            // these could also be hardcoded in the xaml of the control itself
            // but we want to keep flexibility for when to activate them.
            switch (valueBindingModel.Control.Type)
            {
            case ControlTypes.Folder:
                rules.Add(new FolderExistsValidationRule());
                break;

            case ControlTypes.InputFile:
                rules.Add(new FileExistsValiadtionRule());
                break;

            case ControlTypes.Uri:
                rules.Add(new UriValidationRule());
                break;
            }

            var mask = valueBindingModel.Control.Properties.Mask();

            if (!String.IsNullOrWhiteSpace(mask))
            {
                switch (valueBindingModel.Control.Type)
                {
                case ControlTypes.Folder:
                case ControlTypes.InputFile:
                case ControlTypes.OutputFile:
                    // no-op
                    break;

                case ControlTypes.Text:
                    var rule = new RegexValidationRule();
                    rule.Regex = mask;
                    rules.Add(rule);
                    break;

                default:
                    Trace.WriteLine(String.Format(
                                        "No validation rule was applied to '{0}' for the mask attribute '{1}'.",
                                        valueBindingModel.Name, mask), "ValidationRules");
                    break;
                }
            }

            var min = valueBindingModel.Control.Properties.MinValue();
            var max = valueBindingModel.Control.Properties.MaxValue();

            if (!String.IsNullOrWhiteSpace(min) || !String.IsNullOrWhiteSpace(max))
            {
                switch (valueBindingModel.Control.Type)
                {
                case ControlTypes.Integer:
                    var intRule = IntegerMinMaxValidationRule.Create(min, max);
                    if (intRule != null)
                    {
                        rules.Add(intRule);
                    }
                    break;

                case ControlTypes.Number:
                    var nmbRule = NumberMinMaxValidationRule.Create(min, max);
                    if (nmbRule != null)
                    {
                        rules.Add(nmbRule);
                    }
                    break;

                case ControlTypes.Folder:
                case ControlTypes.InputFile:
                case ControlTypes.Multiline:
                case ControlTypes.OutputFile:
                case ControlTypes.Text:
                case ControlTypes.Uri:
                    var lngRule = StringLengthValidationRule.Create(min, max);
                    if (lngRule != null)
                    {
                        rules.Add(lngRule);
                    }
                    break;

                default:
                    Trace.WriteLine(String.Format(
                                        "No validation rule was applied to '{0}' for the min ('{1}') and max ('{2}') attributes.",
                                        valueBindingModel.Name, min, max), "ValidationRules");
                    break;
                }
            }

            if (rules.Count > 0)
            {
                valueBindingModel.Control.ValidationRules = rules;
            }
        }