public IRule CreateRule(string sourceCode, out string successAction, out string failAction) { IDictionary <string, Tuple <string, IData, bool> > variables = new Dictionary <string, Tuple <string, IData, bool> >(); IContext context = new Context(); string conditionTokens = string.Empty; successAction = string.Empty; failAction = string.Empty; IRule rule = null; try { string id = string.Empty; GetDeclarationFromSourceCode(sourceCode, ref variables, ref context, ref conditionTokens, ref successAction, ref failAction, ref id); rule = new Rule(id); IBooleanBase condition = ConvertTokenToCondition(conditionTokens, variables, ref rule); if (!condition.Evaluate(context)) { throw new ArgumentException("Built-in self-test for rule creation failed."); } rule.SetCondition(condition); } catch (Exception ex) { throw new ArgumentException("Failed to parse source code, please see inner exception.", ex); } return(rule); }
public void TestCondition2() { Variable x = new Variable("index"); IBooleanBase resultExpression = GreatherThanExpression.New(x, new Literal("L2", 1)); Context context = new Context(); context.Assign(x.Name, 2); bool result = resultExpression.Evaluate(context); Assert.IsTrue(result); }
public void TestCondition() { Variable x = new Variable("index"); IBooleanBase resultExpression = EqualToExpression.New(x, new Literal("L1", "1")); IBooleanBase all = AndExpression.New(resultExpression, BooleanExpression.True()); Context context = new Context(); context.Assign(x.Name, "1"); bool invertResult = (NotExpression.New(all)).Evaluate(context); bool result = all.Evaluate(context); Assert.IsTrue(result); }
public void Validate(IContext context) { if (context == null) { return; } bool success = _condition.Evaluate(context); if ((success) && (_successfulResultInvocation != null)) { _successfulResultInvocation(context, this); } else { if (_failedResultInvocation != null) { _failedResultInvocation(context, this); } } }
public override bool Evaluate(IContext context) { return(!_boolean.Evaluate(context)); }