Example #1
0
        public void Constructor_SetErrorMessage()
        {
            // Arrange / Act
            var sut = new StringLengthValidationRule(ERROR_MESSAGE, 20);

            // Assert
            sut.ErrorMessage.Should().Be(ERROR_MESSAGE);
        }
Example #2
0
        public void Validate_ForNullNotAllowed_Fails()
        {
            // Arrange
            string value = null;
            var    sut   = new StringLengthValidationRule(ERROR_MESSAGE, 20);

            // Act
            var result = sut.Validate(value);

            // Assert
            result.Should().BeFalse();
        }
Example #3
0
        public void Validate_ForNullAllowed_Pass()
        {
            // Arrange
            string value = null;
            var    sut   = new StringLengthValidationRule(ERROR_MESSAGE, 20, nullIsValid: true);

            // Act
            var result = sut.Validate(value);

            // Assert
            result.Should().BeTrue();
        }
Example #4
0
        public void Validate_ForMinLength(int length, int valueLength, bool expected)
        {
            // Arrange
            var value = GetValueOfLength(valueLength);
            var sut   = new StringLengthValidationRule(ERROR_MESSAGE, length, checkMaxLength: false);

            // Act
            var result = sut.Validate(value);

            // 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;
            }
        }