示例#1
0
 public void Can_Evaluate_Dsl_Expression()
 {
     var rule = "return (this.Price > 20 or this.Price < 15)";
     var order = new Order { Price = 10, Message = "Soemthing" };
     var result = evaluator.Evaluate(rule, order);
     Assert.IsTrue(result);
 }
示例#2
0
 public void Can_Evaluate_Ruby_Expression_Again()
 {
     var rule = "this.Price > 20 and this.Price < 15";
     var order = new Order { Price = 10, Message = "Soemthing" };
     var result = evaluator.Evaluate(rule, order);
     Assert.IsFalse(result);
 }
示例#3
0
 public void Can_Evaluate_Expression_As_ConditionalRule()
 {
     var statement = "return (this.Price > 20 or this.Price < 15)";
     var order = new Order { Price = 10, Message = "Soemthing" };
     EvaluatorAccessPoint.DslConditionEvaluator = evaluator;
     var condition = new DslCondition { DslStatement = statement };
     var rule = new ConditionalRule(condition);
     Assert.IsTrue(rule.Evaluate(order));
 }
示例#4
0
 public void Can_Evaluate_Expression_With_FuncCondition()
 {
     var order = new Order { Price = 10, Message = "Something" };
     var condition = new FuncCondition<Order>(o => o.Price < 20);
     var rule = new ActivityRule(condition, new ActionActivity<Order>(t =>
     {
         t.Message = "amp";
     }));          
     Assert.IsTrue(rule.Evaluate(order));
     Assert.AreEqual("amp", order.Message);
 }
示例#5
0
 public void Can_Evaluate_Expression_As_ActionActivityRule()
 {
     var statement = "return (this.Price > 20 or this.Price < 15)";
     var order = new Order { Price = 10, Message = "Soemthing" };
     EvaluatorAccessPoint.DslConditionEvaluator = evaluator;
     var condition = new DslCondition { DslStatement = statement };
     var rule = new ActivityRule(condition, new ActionActivity<Order>(t =>
                                                                          {
                                                                              t.Message = "amp";
                                                                          }));
     Assert.IsTrue(rule.Evaluate(order));
     Assert.AreEqual("amp", order.Message);
 }
示例#6
0
     public void Can_Evaluate_Expression_With_DslActivity()
     {
         var statement = "return (this.Price > 20 or this.Price < 15)";
         var order = new Order { Price = 10, Message = "Something" };
         EvaluatorAccessPoint.DslConditionEvaluator = evaluator;
         var condition = new DslCondition { DslStatement = statement };
         var rule = new ActivityRule(condition, new DslActivity
                                                    {
                                                        DslStatement = @"
 this.Message = ""dsl"";
 return true;"
                                                    });
         Assert.IsTrue(rule.Evaluate(order));
         Assert.AreEqual("dsl", order.Message);
     }
示例#7
0
        public void Can_Setup_Flow_With_Dsl_Conditions()
        {
            var statement = "return (this.Price > 15 and this.Price < 20)";
            EvaluatorAccessPoint.DslConditionEvaluator = evaluator;

            var flow = Flow.For<Order>()
                .Decide(new DslCondition(statement))
                .WhenTrue(a => a.Do(o => o.Message = "true"))
                .WhenFalse(a => a.Do(o => o.Message = "false"));

            var order = new Order { Price = 16 };
            flow.Execute(order);
            Assert.AreEqual("true", order.Message);
            order.Price = 21;
            flow.Execute(order);
            Assert.AreEqual("false", order.Message);
        }
示例#8
0
        public void Can_Setup_Flow_With_Dsl_Conditions_And_DslActiviy()
        {
            var condition = "return (this.Price > 15 and this.Price < 20)";
            var activity = @"this.Message = ""true""; return true; ";
            EvaluatorAccessPoint.DslConditionEvaluator = evaluator;

            var flow = Flow.For<Order>()
                .Decide(new DslCondition(condition))
                .WhenTrue(a => a.Do(new DslActivity(activity)))
                .WhenFalse(a => a.Do(o => o.Message = "false"));

            var order = new Order { Price = 16 };
            flow.Execute(order);
            Assert.AreEqual("true", order.Message);
            order.Price = 21;
            flow.Execute(order);
            Assert.AreEqual("false", order.Message);
        }
示例#9
0
        public void Can_Setup_Flow()
        {
            var flow = Flow.For<Order>()
                .Do(a => 
                    a.Price = 10)
                .Then
                .Decide(o => o.Price > 10)
                    .WhenTrue(a => a.Do(t => t.Price = 10)
                        .Then
                            .Decide(aa => aa.Price > 15)
                                .WhenTrue(b => b.Do(t => t.Price = 20))
                                .WhenFalse(b => b.Do(t => t.Price = 30))
                    )
                    .WhenFalse(a1 => a1.Do(t => t.Price = 30)
                        .Then.Do(t => t.Price = 40).Then.Do(t => t.Price = 50).Then
                            .Decide(aa => aa.Price > 40).WhenFalse(a => a.Do(a2 => a2.Message ="test")));

            var order = new Order {Price = 15};
            flow.Execute(order);
            Console.WriteLine(order.Price);
            Console.WriteLine(order.Message);
        }