public void RubberStamp_Conditions_RegexCondition_Regex_Validate_Number_Test() { var condition = new RegexCondition <TestClass, string>(p => p.Index.ToString(), @"^[0-9]"); Assert.IsTrue(condition.IsValid(new TestClass { Index = 1234567890 })); }
public void RubberStamp_Conditions_RegexCondition_Regex_InValid_Number_Test() { var condition = new RegexCondition <TestClass, string>(p => p.Email, @"^[0-9]"); Assert.IsFalse(condition.IsValid(new TestClass { Email = "test" })); }
public void RubberStamp_Conditions_RegexCondition_Regex_Validate_Characters_Test() { var condition = new RegexCondition <TestClass, string>(p => p.Email, @"^[a-zA-Z]"); Assert.IsTrue(condition.IsValid(new TestClass { Email = "abcABC" })); }
public virtual IAcceptInputTransition <T> ActivateRegexNFATransitionFromRegexCondition(RegexCondition <T> regex) { if (regex == null) { throw new ArgumentNullException(nameof(regex)); } var result = this.DynamicInvokeShunt(RegexStateMachineActivationContextInfoBase <T> .ActivateRegexNFATransitionFromRegexConditionSource, regex); if (result.Success) { return((IAcceptInputTransition <T>)result.ReturnValue); } else { return(new BasicRegexFATransition <T>(regex.Condition)); } }
public ICondition GetCondition(RuleItem item) { IEnumerable <Source.Model.Condition> srcConditions = item.Conditions; ICondition mainCondition = null; switch (item.Type) { case RuleItemType.Regex: mainCondition = new RegexCondition(item.Key); break; case RuleItemType.Terminal: mainCondition = new TextCondition(item.Key); break; case RuleItemType.Lemma: mainCondition = new LemmaCondition(item.Key); break; case RuleItemType.Morphology: // главный морфологический ключ объединяется // с второстепенными морфологичекими условиями var morphKeys = item.Key.Split(','); if (item.Conditions != null) { morphKeys = morphKeys.Concat(item.Conditions .Where(c => c.Key == "морф") .SelectMany(c => c.Values)) .ToArray(); } mainCondition = new MorphologyCondition(morphKeys); srcConditions = srcConditions?.Where(x => x.Key != "морф"); break; case RuleItemType.Everything: mainCondition = new EverythingCondition(); break; } if (item.HasConditions) { var adConds = _compileConditions(srcConditions).ToArray(); if (adConds.Length == 1 && mainCondition == null) { mainCondition = adConds[0]; } else if (mainCondition == null) { mainCondition = new AndCondition(adConds); } else { mainCondition = new AndCondition(new[] { mainCondition }.Concat(adConds)); } } return(mainCondition); }
public IAcceptInputTransition <string> ActivateRegexNFATransitionFromRegexCondition(RegexCondition <string> regex) { if (regex == null) { throw new ArgumentNullException(nameof(regex)); } RangeSet <string> set = new RangeSet <string>(this.rangeInfo); if (regex is RegexConst <string> regexConst) { set.Add(regexConst.ConstValue); } else if (regex is RegexRange <string> regexRange) { set.AddRange(regexRange.Minimum, regexRange.Maximum, regexRange.CanTakeMinimum, regexRange.CanTakeMaximum); } else if (regex is IRange <string> range) { set.AddRange(range.Minimum, range.Maximum, range.CanTakeMinimum, range.CanTakeMaximum); } else { throw new NotSupportedException(); } return(new RangeSetRegexFATransition <string, BasicRegexNFAState <string> >(set)); }