コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: WhileActivity.cs プロジェクト: sunxiaotianmg/CoreWF
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
ファイル: Loops.cs プロジェクト: sunxiaotianmg/CoreWF
        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);
        }
コード例 #8
0
ファイル: WhileActivity.cs プロジェクト: sunxiaotianmg/CoreWF
        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>());
        }
コード例 #9
0
        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);
        }
コード例 #10
0
ファイル: WhileActivity.cs プロジェクト: sunxiaotianmg/CoreWF
        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>());
        }