예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
                }
            }
        }
예제 #5
0
 public override bool Evaluate(IContext context)
 {
     return(!_boolean.Evaluate(context));
 }