public void FlowSwitchWithAllCasesHavingSameElement() { TestFlowchart flowchart = new TestFlowchart(); Variable <int> counter = VariableHelper.CreateInitialized <int>("counter", 0); flowchart.Variables.Add(counter); TestIncrement increment = new TestIncrement("Inc", 1) { CounterVariable = counter }; TestWriteLine writeHello = new TestWriteLine("Hello", "Ola"); Dictionary <object, TestActivity> cases = new Dictionary <object, TestActivity>(); cases.Add(1, writeHello); cases.Add(2, writeHello); cases.Add(3, writeHello); List <int> hints = new List <int>() { 0, 1, 2, -1 }; flowchart.AddLink(new TestWriteLine("Start", "Flowchart Started"), increment); flowchart.AddSwitchLink(increment, cases, hints, e => counter.Get(e)); flowchart.AddLink(writeHello, increment); TestRuntime.RunAndValidateWorkflow(flowchart); }
public void FaultWhileExecutingInLoop() { TestFlowchart flowchart = new TestFlowchart(); Variable <int> counter = VariableHelper.CreateInitialized <int>(-3); counter.Name = "counter"; flowchart.Variables.Add(counter); List <HintTrueFalse> hints = new List <HintTrueFalse> { HintTrueFalse.True, HintTrueFalse.True, HintTrueFalse.Exception }; TestFlowConditional conditional = new TestFlowConditional(hints.ToArray()) { ConditionExpression = env => (counter.Get(env) - 1) / counter.Get(env) > 0 }; TestIncrement decByOne = new TestIncrement { CounterVariable = counter, IncrementCount = 1 }; flowchart.AddLink(new TestWriteLine("Start", "Start"), decByOne); flowchart.AddConditionalLink(decByOne, conditional, decByOne, null); TestRuntime.RunAndValidateAbortedException(flowchart, typeof(DivideByZeroException), null); }
public void SimpleWhileConditionTrue() { // Test case description: // Set condition to a valid rule and run with an activity in it. Condition is true - IMPLEMENTED IN BASIC WHILETEST TestSequence outerSequence = new TestSequence("sequence1"); TestSequence innerSequence = new TestSequence("Seq"); TestIncrement increment = new TestIncrement("test increment"); Variable <int> counter = VariableHelper.CreateInitialized <int>("counter", 0); TestWhile whileAct = new TestWhile("while act") { ConditionExpression = ((env) => ((int)counter.Get(env)) < 10), Body = innerSequence, HintIterationCount = 10, }; TestWriteLine writeLine = new TestWriteLine("write hello") { Message = "Its a small world after all" }; increment.CounterVariable = counter; innerSequence.Activities.Add(writeLine); innerSequence.Activities.Add(increment); outerSequence.Variables.Add(counter); outerSequence.Activities.Add(whileAct); TestRuntime.RunAndValidateWorkflow(outerSequence); }
public void FlowSwitchInLoopDefaultEvaluation() { TestFlowchart flowchart = new TestFlowchart(); Variable <int> counter = VariableHelper.CreateInitialized <int>(0); counter.Name = "counter"; flowchart.Variables.Add(counter); Dictionary <object, TestActivity> cases = new Dictionary <object, TestActivity>(); cases.Add(10, new TestWriteLine("Ten", "Ten")); cases.Add(11, new TestWriteLine("Eleven", "Eleven")); cases.Add(12, new TestWriteLine("Twelve", "Twelve")); cases.Add(13, new TestWriteLine("Thirteen", "Thirteen")); List <int> hints = new List <int>(); for (int i = 0; i < 10; i++) { hints.Add(-1); } hints.Add(0); TestIncrement incByOne = new TestIncrement { IncrementCount = 1, CounterVariable = counter }; TestFlowSwitch <object> flowSwitch = flowchart.AddSwitchLink <object>(new TestWriteLine("Start", "Flowchart started"), cases, hints, e => counter.Get(e), incByOne) as TestFlowSwitch <object>; flowchart.AddLink(incByOne, flowSwitch); TestRuntime.RunAndValidateWorkflow(flowchart); }
public void Flowchart_DoWhile() { TestFlowchart flowchart = new TestFlowchart(); Variable <int> counter = VariableHelper.CreateInitialized <int>(0); counter.Name = "counter"; flowchart.Variables.Add(counter); List <HintTrueFalse> hintsList = new List <HintTrueFalse>(); for (int i = 0; i < 9; i++) { hintsList.Add(HintTrueFalse.True); } hintsList.Add(HintTrueFalse.False); TestFlowConditional conditional = new TestFlowConditional(hintsList.ToArray()) { ConditionExpression = env => counter.Get(env) < 10 }; TestWriteLine start = new TestWriteLine("Start", "Flowchart Started"); TestIncrement incrementByOne = new TestIncrement() { CounterVariable = counter, IncrementCount = 1 }; flowchart.AddLink(start, incrementByOne); flowchart.AddConditionalLink(incrementByOne, conditional, incrementByOne, new TestWriteLine("Final", "End")); TestRuntime.RunAndValidateWorkflow(flowchart); }
public void ThreeActivitiesInOrJoin() { TestFlowchart flowchart = new TestFlowchart("Flow1"); Variable <int> counter = VariableHelper.CreateInitialized <int>(0); counter.Name = "counter"; flowchart.Variables.Add(counter); TestIncrement inc1 = new TestIncrement { CounterVariable = counter, IncrementCount = 1 }; TestIncrement inc2 = new TestIncrement { CounterVariable = counter, IncrementCount = 1 }; TestIncrement inc3 = new TestIncrement { CounterVariable = counter, IncrementCount = 1 }; TestParallel parallel = new TestParallel { Branches = { inc1, inc2, inc3 }, CompletionConditionExpression = env => counter.Get(env) == 1, HintNumberOfBranchesExecution = 1 }; flowchart.AddLink(parallel, new TestWriteLine("End", "The End")); TestRuntime.RunAndValidateWorkflow(flowchart); }
public void FlowSwitchInLoopSameCaseEvaluation() { TestFlowchart flowchart = new TestFlowchart(); Variable <int> switchVariable = VariableHelper.CreateInitialized <int>("switchVar", 0); Variable <int> ifVariable = VariableHelper.CreateInitialized <int>("ifVar", 0); flowchart.Variables.Add(switchVariable); flowchart.Variables.Add(ifVariable); TestIncrement incrementIfVariable = new TestIncrement("Inc", 1) { CounterVariable = ifVariable }; TestIncrement incrementSwitchVariable = new TestIncrement("IncSwitch", 1) { CounterVariable = switchVariable }; TestWriteLine writeBegin = new TestWriteLine("Loop", "Looping"); List <HintTrueFalse> hintsList = new List <HintTrueFalse>(); for (int i = 0; i < 5; i++) { hintsList.Add(HintTrueFalse.True); } hintsList.Add(HintTrueFalse.False); TestFlowConditional conditional = new TestFlowConditional(hintsList.ToArray()) { ConditionExpression = env => ifVariable.Get(env) < 5 }; Dictionary <object, TestActivity> cases = new Dictionary <object, TestActivity>(); cases.Add(0, writeBegin); List <int> hints = new List <int>(); for (int i = 0; i < 5; i++) { hints.Add(0); } hints.Add(-1); flowchart.AddLink(new TestWriteLine("Start", "Flowchart started"), writeBegin); flowchart.AddConditionalLink(writeBegin, conditional, incrementIfVariable, incrementSwitchVariable); TestFlowSwitch <object> flowSwitch = flowchart.AddSwitchLink <object>(incrementIfVariable, cases, hints, env => switchVariable.Get(env), new TestWriteLine("Default", "Default")) as TestFlowSwitch <object>; flowchart.AddLink(incrementSwitchVariable, flowSwitch); TestRuntime.RunAndValidateWorkflow(flowchart); }
public void WhileInfiniteLoopFaultAfterHundredLoops() { TestSequence outerSequence = new TestSequence("sequence1"); TestSequence innerSequence = new TestSequence("Seq"); TestIncrement increment = new TestIncrement("test increment"); TestSequence inNestedSequence = new TestSequence("Sequence in Nested while"); TestThrow <ArithmeticException> throwTestActivity = new TestThrow <ArithmeticException>(); Variable <int> counter = VariableHelper.CreateInitialized <int>("counter", 0); TestWhile whileAct = new TestWhile("while act") { ConditionExpression = ((env) => ((int)counter.Get(env)) < 200), Body = innerSequence, HintIterationCount = 200, }; inNestedSequence.Activities.Add(whileAct); inNestedSequence.Activities.Add(throwTestActivity); TestWhile whileActNested = new TestWhile("while act") { ConditionExpression = ((env) => (true)), Body = inNestedSequence, HintIterationCount = 200, }; TestWriteLine writeLine = new TestWriteLine("write hello") { Message = "Its a small world after all" }; increment.CounterVariable = counter; innerSequence.Activities.Add(writeLine); innerSequence.Activities.Add(increment); outerSequence.Variables.Add(counter); outerSequence.Activities.Add(whileActNested); TestRuntime.RunAndValidateAbortedException(outerSequence, typeof(ArithmeticException), new Dictionary <string, string>()); }
public void FlowSwitchWithNodePointingToParentFlowSwitch() { TestFlowchart flowchart = new TestFlowchart(); Variable <int> counter = VariableHelper.CreateInitialized <int>("counter", 0); flowchart.Variables.Add(counter); TestIncrement increment = new TestIncrement("Inc", 1) { CounterVariable = counter }; TestWriteLine w1 = new TestWriteLine("One", "Will execute on first iteration"); TestWriteLine w2 = new TestWriteLine("Two", "Will execute on second iteration"); TestWriteLine w3 = new TestWriteLine("Three", "Will execute on third iteration"); TestWriteLine w4 = new TestWriteLine("Four", "Will execute on final iteration"); Dictionary <int, TestActivity> cases = new Dictionary <int, TestActivity>(); cases.Add(1, w1); cases.Add(2, w2); cases.Add(3, w3); List <int> hints = new List <int>(); hints.Add(0); hints.Add(1); hints.Add(2); hints.Add(-1); flowchart.AddLink(new TestWriteLine("Start", "Flowchart Started"), increment); flowchart.AddSwitchLink <int>(increment, cases, hints, env => counter.Get(env), w4); flowchart.AddLink(w1, increment); flowchart.AddLink(w2, increment); flowchart.AddLink(w3, increment); TestRuntime.RunAndValidateWorkflow(flowchart); }
public void WhileWithException() { TestSequence outerSequence = new TestSequence("sequence1"); TestSequence innerSequence = new TestSequence("Seq"); TestIncrement increment = new TestIncrement("test increment"); TestThrow <ArithmeticException> throwArt = new TestThrow <ArithmeticException>("throw"); Variable <int> counter = VariableHelper.CreateInitialized <int>("counter", 0); TestWhile whileAct = new TestWhile("while act") { ConditionExpression = ((env) => ((int)counter.Get(env)) < 10), Body = innerSequence, HintIterationCount = 10, }; increment.CounterVariable = counter; innerSequence.Activities.Add(throwArt); innerSequence.Activities.Add(increment); outerSequence.Variables.Add(counter); outerSequence.Activities.Add(whileAct); TestRuntime.RunAndValidateAbortedException(outerSequence, typeof(ArithmeticException), new Dictionary <string, string>()); }