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); }
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); }
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); }