public void WhenMultipleRuleValidatorCreatedWithValidRules_ThenValidatorHasErrorsIsFalse()
        {
            // Arrange
            var firstFieldValue        = 12;
            var secondFieldValue       = 11;
            var dataValue              = 1;
            var fieldName              = "Excess Mileage";
            var toleranceMessage       = "Excess mileage fee calculated outside of tolerance.";
            var zeroCodeWeaversMessage = "CodeWeavers Excess mileage fee must be greater than zero.";
            var zeroPosApiMessage      = "Pos API Excess mileage fee must be greater than zero.";

            // Act
            var fieldValidatorCollection = new FieldValidatorCollection
            {
                new FieldValidator <decimal>(firstFieldValue, secondFieldValue, dataValue, fieldName)
                .AddRule((firstValue, secondValue, tolerance) => firstValue + tolerance >= secondValue, toleranceMessage),
                new FieldValidator <decimal>(firstFieldValue, secondFieldValue, dataValue, fieldName)
                .AddRule((firstValue, minimum) => firstValue >= minimum, zeroCodeWeaversMessage)
                .AddRule((secondValue, minimum) => secondValue >= minimum, zeroPosApiMessage)
            };

            // Assert
            fieldValidatorCollection.HasErrors.Should().Be(false);
            fieldValidatorCollection.ValidationErrors.Count.Should().Be(0);
        }
        public FieldValidate(XmlElement fieldDescription, FieldValidatorCollection validators, ConditionCollection conditions)
        {
            Validators = validators;
            Conditions = conditions;
            Fields = new Dictionary<string, FieldDescription>();

            foreach (XmlElement n in fieldDescription.SelectNodes("Field"))
            {
                FieldDescription fd = new FieldDescription(n);
                Fields.Add(fd.Name, fd);
            }
        }
        /// <summary>
        /// 載入驗證規則
        /// </summary>
        /// <param name="XmlNode"></param>
        public void LoadRule(XmlElement XmlNode)
        {
            FieldValidators = new FieldValidatorCollection(XmlNode.SelectSingleNode("ValidatorList") as XmlElement);
            RowValidators = new RowValidatorCollection(XmlNode.SelectSingleNode("ValidatorList") as XmlElement);
            Conditions = new ConditionCollection(XmlNode.SelectSingleNode("ConditionList") as XmlElement);
            FieldValidate = new FieldValidate(XmlNode.SelectSingleNode("FieldList") as XmlElement, FieldValidators, Conditions);
            RowValidate = new RowValidate(XmlNode.SelectSingleNode("RowValidate") as XmlElement, RowValidators, Conditions);
            Duplication = new DuplicateDetection(XmlNode.SelectSingleNode("DuplicateDetection") as XmlElement);
            //MappingTables = LoadMappingTable(XmlNode.SelectSingleNode("MappingTable") as XmlElement);
            //DataSources = LoadDataSource(XmlNode.SelectSingleNode("DataSource") as XmlElement);

            FieldValidate.AutoCorrect += new EventHandler<AutoCorrectEventArgs>(mFieldValidate_AutoCorrect);
            FieldValidate.ErrorCaptured += new EventHandler<ErrorCapturedEventArgs>(mFieldValidate_ErrorCaptured);

            RowValidate.AutoCorrect += new EventHandler<AutoCorrectEventArgs>(mRowValidate_AutoCorrect);
            RowValidate.ErrorCaptured += new EventHandler<ErrorCapturedEventArgs>(mRowValidate_ErrorCaptured);
        }