예제 #1
0
        public void CompositeProcedurals()
        {
            Variable <bool> cond = new Variable <bool> {
                Default = true
            };
            Variable <string> value = new Variable <string> {
                Default = "Apple"
            };
            DelegateInArgument <string> arg = new DelegateInArgument <string> {
                Name = "Apple"
            };

            string[] values = { "a", "b" };

            TestSwitch <string> switchAct = new TestSwitch <string>
            {
                ExpressionVariable = value
            };

            switchAct.AddCase("Apple", new TestWriteLine("Apple", "this is an apple"));
            switchAct.AddCase("Orange", new TestWriteLine("Orange", "this is an orange"));
            switchAct.Hints.Add(0);

            TestIf ifAct = new TestIf(HintThenOrElse.Then)
            {
                ConditionVariable = cond,
                ThenActivity      = new TestWriteLine("W", "Yes thats true"),
                ElseActivity      = new TestWriteLine("W", "No thats not true")
            };

            TestForEach <string> forEachAct = new TestForEach <string>
            {
                Values             = values,
                CurrentVariable    = arg,
                HintIterationCount = 2,
                Body = new TestWriteLine {
                    DisplayName = "w1", MessageExpression = context => arg.Get(context), HintMessageList = { "a", "b" }
                }
            };

            TestSequence seq = new TestSequence
            {
                Variables  = { cond, value },
                Activities = { switchAct, ifAct, forEachAct }
            };

            TestRuntime.RunAndValidateWorkflow(seq);
        }
예제 #2
0
        public void SwitchWithEnums()
        {
            TestSwitch <OrderStatus> order = new TestSwitch <OrderStatus>();

            order.AddCase(OrderStatus.NewOrder, new TestWriteLine("We have received a new order")
            {
                Message = "New Order"
            });
            order.AddCase(OrderStatus.Processing, new TestWriteLine("Order is in processing state")
            {
                Message = "Processing"
            });
            order.AddCase(OrderStatus.Shipped, new TestSequence {
                Activities = { new TestWriteLine("Order is shipped to you")
                               {
                                   Message = "Order shipped"
                               } }
            });
            order.Hints.Add(0);
            order.Hints.Add(1);
            order.Hints.Add(2);

            List <OrderStatus> values = new List <OrderStatus>()
            {
                OrderStatus.NewOrder, OrderStatus.Processing, OrderStatus.Shipped
            };
            DelegateInArgument <OrderStatus> var = new DelegateInArgument <OrderStatus> {
                Name = "var"
            };

            TestForEach <OrderStatus> forEachAct = new TestForEach <OrderStatus>("ForEachAct")
            {
                Values          = values,
                CurrentVariable = var
            };
            TestSequence seq = new TestSequence("Seq in For Each");

            seq.Activities.Add(order);
            forEachAct.Body            = seq;
            order.ExpressionExpression = (env) => (OrderStatus)var.Get(env);

            forEachAct.HintIterationCount = 3;

            TestRuntime.RunAndValidateWorkflow(forEachAct);
        }
예제 #3
0
        public void NestedWhilesAndOtherLoops()
        {
            //  Test case description:
            //  Nested whiles deep up to 3-5 levels. Set valid conditions trace the order to be likewhile1 loop1 while2
            //  loop 1 while 3 loop1 while1 loop1 while2 loop1 whle3 loop2while1 loop1 while2 loop2 while3 loop1whlie1
            //  loop1 while2 loop2 while3 loop2…while1 loop2 while2 loop2 while3 loop2

            TestSequence     outerSequence = new TestSequence("sequence1");
            TestSequence     innerSequence = new TestSequence("inner seq");
            TestAssign <int> increment     = new TestAssign <int>("increase count");

            Variable <int> doWhileCounter = VariableHelper.CreateInitialized <int>("counter", 0);
            Variable <int> loopCounter    = VariableHelper.CreateInitialized <int>("loopcounter", 0);

            TestAssign <int> loopCounterIncrement = new TestAssign <int>("increase loop counter")
            {
                ToVariable      = loopCounter,
                ValueExpression = ((env) => ((int)loopCounter.Get(env)) + 1)
            };

            increment.ToVariable      = doWhileCounter;
            increment.ValueExpression = ((env) => ((int)doWhileCounter.Get(env)) + 1);

            TestForEach <string> foreachAct = new TestForEach <string>("ForEach")
            {
                Body               = innerSequence,
                ValuesExpression   = (context => new List <string>()
                {
                    "var1", "var2", "var3"
                }),
                HintIterationCount = 3,
            };

            TestDoWhile doWhile = new TestDoWhile("do while")
            {
                ConditionExpression = ((env) => ((int)doWhileCounter.Get(env)) < 9),
                Body = foreachAct,
                HintIterationCount = 3,
            };

            TestSequence     whileSequence   = new TestSequence("sequence1");
            TestSequence     innerIfSequence = new TestSequence("inner if sequence");
            TestAssign <int> whileIncrement  = new TestAssign <int>("increase count2");

            Variable <int> whileCounter = VariableHelper.CreateInitialized <int>("counter2", 0);

            TestSequence ifSequence = new TestSequence("ifSequence");


            TestWhile whileAct = new TestWhile("while")
            {
                ConditionExpression = ((env) => ((int)whileCounter.Get(env)) < 10),
                Body = ifSequence,
                HintIterationCount = 10,
            };

            TestWriteLine writeLine = new TestWriteLine("write hello")
            {
                Message = "Its a small world after all"
            };
            TestWriteLine writeLine2 = new TestWriteLine("write hello")
            {
                Message = "Its a small world after all"
            };

            whileIncrement.ToVariable      = whileCounter;
            whileIncrement.ValueExpression = ((env) => ((int)whileCounter.Get(env)) + 1);

            TestIf ifAct = new TestIf("ifact 1", HintThenOrElse.Else)
            {
                ConditionExpression = ((env) => ((int)whileCounter.Get(env)) > 10),
                ThenActivity        = new TestWriteLine("w1", "I'm a non-executing funny writeLine"),
                ElseActivity        = writeLine2,
            };
            TestIf ifAct2 = new TestIf("if act 2", HintThenOrElse.Then)
            {
                ConditionExpression = ((env) => ((int)whileCounter.Get(env)) < 10),
                ThenActivity        = innerIfSequence,
            };

            TestIf checkLoopCount = new TestIf("check loop count", HintThenOrElse.Then)
            {
                ConditionExpression = ((env) => ((int)loopCounter.Get(env)) == 90),
                ThenActivity        = writeLine,
            };

            ifSequence.Activities.Add(ifAct);
            ifSequence.Activities.Add(ifAct2);
            innerIfSequence.Activities.Add(whileIncrement);
            innerIfSequence.Activities.Add(loopCounterIncrement);
            whileSequence.Variables.Add(whileCounter);
            whileSequence.Activities.Add(whileAct);

            innerSequence.Activities.Add(increment);
            innerSequence.Activities.Add(whileSequence);
            outerSequence.Activities.Add(doWhile);
            outerSequence.Activities.Add(checkLoopCount);
            outerSequence.Variables.Add(doWhileCounter);
            outerSequence.Variables.Add(loopCounter);

            TestRuntime.RunAndValidateWorkflow(outerSequence);
        }