public void InitialTokenCancellation_WhileRunning()
        {
            var tokenSource = new CancellationTokenSource();
            var sequence    = new TestSequence(tokenSource.Token);

            sequence.ExpectConnect(null, StreamInitializationCause.WatchStarting);
            sequence.ProvideResponse(WatchResponseResult.Continue);
            sequence.WaitForCancellation();

            Task task = sequence.RunToStability();

            tokenSource.Cancel();
            // If it doesn't finish quickly, Task.Wait will time out and the assertion will fail.
            Assert.Throws <AggregateException>(() => task.Wait(s_timeout));
            Assert.Equal(TaskStatus.Canceled, task.Status);
        }
        public void StopTokenCancellation()
        {
            var sequence = new TestSequence();

            sequence.ExpectConnect(null, StreamInitializationCause.WatchStarting);
            sequence.ProvideResponse(WatchResponseResult.Continue);
            sequence.ProvideResponseHangingInStateMachine();

            Task task        = sequence.RunToStability();
            var  tokenSource = new CancellationTokenSource();

            sequence.WatchStream.Stop(tokenSource.Token);
            tokenSource.Cancel();
            AssertTaskIsCancelledSoon(task);
            sequence.Verify();
        }
Esempio n. 3
0
        public void ThrowFromOverloadedOperator()
        {
            TestSubtract <OverLoadOperatorThrowingType, OverLoadOperatorThrowingType, OverLoadOperatorThrowingType> sub = new TestSubtract <OverLoadOperatorThrowingType, OverLoadOperatorThrowingType, OverLoadOperatorThrowingType>
            {
                LeftExpression  = context => new OverLoadOperatorThrowingType(13),
                RightExpression = context => new OverLoadOperatorThrowingType(14),
            };

            OverLoadOperatorThrowingType.ThrowException = true;

            sub.ExpectedOutcome = Outcome.UncaughtException();

            TestSequence seq = TestExpressionTracer.GetTraceableBinaryExpressionActivity <OverLoadOperatorThrowingType, OverLoadOperatorThrowingType, OverLoadOperatorThrowingType>(sub, "12");

            TestRuntime.RunAndValidateAbortedException(seq, typeof(ArithmeticException), null);
        }
        public void SetUninitializedIndices()
        {
            //
            //  Test case description:
            //  Try executing ValueTypeIndexerReference activity without initializing indices. Validation exception
            //  expected.

            TheStruct valueType = new TheStruct();

            Variable <TheStruct> var = new Variable <TheStruct>()
            {
                Default = valueType, Name = "var"
            };
            TestValueTypeIndexerReference <TheStruct, int> valueTypeIndexerReference = new TestValueTypeIndexerReference <TheStruct, int>()
            {
                OperandLocationVariable = var,
            };

            int value = 321;
            TestAssign <int> testAssign = new TestAssign <int>()
            {
                ToLocation = valueTypeIndexerReference, Value = value
            };

            TestSequence seq = new TestSequence()
            {
                Variables  = { var },
                Activities =
                {
                    testAssign,
                    new TestWriteLine {
                        MessageExpression = ((ctx) => var.Get(ctx)[1].ToString()),HintMessage                                                     = value.ToString()
                    }
                }
            };

            string error = string.Format(ErrorStrings.IndicesAreNeeded, valueTypeIndexerReference.ProductActivity.GetType().Name, valueTypeIndexerReference.DisplayName);

            List <TestConstraintViolation> constraints = new List <TestConstraintViolation>
            {
                new TestConstraintViolation(
                    error,
                    valueTypeIndexerReference.ProductActivity)
            };

            TestRuntime.ValidateWorkflowErrors(seq, constraints, error);
        }
        public void TrySetItemNullOperand()
        {
            //
            //  Test case description:
            //  Try executing ValueTypeIndexerReference activity without initializing indices. Validation exception
            //  expected.

            TheStruct valueType = new TheStruct();

            Variable <TheStruct> var = new Variable <TheStruct>()
            {
                Default = valueType, Name = "var"
            };
            TestValueTypeIndexerReference <TheStruct, int> valueTypeIndexerReference = new TestValueTypeIndexerReference <TheStruct, int>()
            {
                Indices =
                {
                    new TestArgument <int>(Direction.In, null, 2)
                }
            };

            int value = 321;
            TestAssign <int> testAssign = new TestAssign <int>()
            {
                ToLocation = valueTypeIndexerReference, Value = value
            };

            TestSequence seq = new TestSequence()
            {
                Variables  = { var },
                Activities =
                {
                    testAssign,
                }
            };

            string error = string.Format(ErrorStrings.RequiredArgumentValueNotSupplied, "OperandLocation", valueTypeIndexerReference.ProductActivity.GetType().Name, valueTypeIndexerReference.DisplayName);

            List <TestConstraintViolation> constraints = new List <TestConstraintViolation>
            {
                new TestConstraintViolation(
                    error,
                    valueTypeIndexerReference.ProductActivity)
            };

            TestRuntime.ValidateWorkflowErrors(seq, constraints, error);
        }
Esempio n. 6
0
        public void ChangePropertyNameAfterOpened()
        {
            Variable <TheStruct> var = new Variable <TheStruct>()
            {
                Name    = "var",
                Default = new TheStruct()
            };

            TestValueTypePropertyReference <TheStruct, int> valueTypePropertyReference = new TestValueTypePropertyReference <TheStruct, int>()
            {
                PropertyName            = "PublicProperty",
                OperandLocationVariable = var
            };

            int value = 321;
            TestAssign <int> testAssign = new TestAssign <int>()
            {
                ToLocation = valueTypePropertyReference,
                Value      = value,
            };

            TestSequence sequence = new TestSequence()
            {
                Variables =
                {
                    var
                },
                Activities =
                {
                    new TestWriteLine("Start",            "Start"),
                    new TestBlockingActivity("Blocking"),
                    testAssign,
                },
            };

            using (TestWorkflowRuntime runtime = TestRuntime.CreateTestWorkflowRuntime(sequence))
            {
                runtime.ExecuteWorkflow();
                runtime.WaitForActivityStatusChange("Blocking", TestActivityInstanceState.Executing);

                valueTypePropertyReference.PropertyName = "PublicProperty1";

                runtime.ResumeBookMark("Blocking", null);

                runtime.WaitForCompletion(true);
            }
        }
Esempio n. 7
0
        public void DoWhileVariblesHaveSameName()
        {
            const string activityName = "activity";
            const string varibleName  = "counter";

            Variable <int> counter1 = VariableHelper.CreateInitialized <int>(varibleName, 0);
            Variable <int> counter2 = VariableHelper.CreateInitialized <int>(varibleName, 0);

            TestSequence outerSequence = new TestSequence(activityName)
            {
                Variables  = { counter1 },
                Activities =
                {
                    new TestDoWhile(activityName)
                    {
                        ConditionExpression = ((env) => ((int)counter1.Get(env)) < 3),
                        HintIterationCount  = 3,
                        Body = new TestSequence(activityName)
                        {
                            Activities =
                            {
                                new TestSequence(activityName)
                                {
                                    Variables  = { counter2     },
                                    Activities =
                                    {
                                        new TestWriteLine("Trace Counter 2", (env => counter2.Get(env).ToString()), "0"),
                                    }
                                },
                                new TestAssign <int>("Add One")
                                {
                                    ToVariable      = counter1,
                                    ValueExpression = ((env) => (((int)counter1.Get(env))) + 1),
                                },
                            }
                        }
                    },
                    new TestWriteLine("Trace Counter")
                    {
                        MessageExpression = (env => counter1.Get(env).ToString()),
                        HintMessage       = "3",
                    }
                }
            };

            TestRuntime.RunAndValidateWorkflow(outerSequence);
        }
Esempio n. 8
0
        //[HostWorkflowAsWebService]
        public void IfInWhileSometimesIfThenTrueSometimesElseTrue()
        {
            Variable <int> counter = VariableHelper.CreateInitialized <int>("counter", 0);

            TestWriteLine writeTrue = new TestWriteLine("writeTrue");

            writeTrue.Message = "I say you are RIGHT!";

            TestWriteLine writeFalse = new TestWriteLine("writeFalse");

            writeFalse.Message = "I say you are WRONG!";

            TestIf ifAct = new TestIf("if act",
                                      HintThenOrElse.Then,
                                      HintThenOrElse.Else,
                                      HintThenOrElse.Then,
                                      HintThenOrElse.Else)
            {
                ConditionExpression = ((env) => ((int)counter.Get(env)) % 2 == 0),
                ThenActivity        = writeTrue,
                ElseActivity        = writeFalse,
            };

            TestAssign <int> increment = new TestAssign <int>("Add One");

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

            TestSequence sequence = new TestSequence("innerSequence");

            sequence.Activities.Add(ifAct);
            sequence.Activities.Add(increment);

            TestWhile whileAct = new TestWhile("while act")
            {
                ConditionExpression = (env) => ((int)counter.Get(env)) < 4,
                Body = sequence,
                HintIterationCount = 4,
            };

            TestSequence rootSequence = new TestSequence("rootSequence");

            rootSequence.Activities.Add(whileAct);
            rootSequence.Variables.Add(counter);

            TestRuntime.RunAndValidateWorkflow(rootSequence);
        }
        public void TrySettingReadOnlyField()
        {
            //
            //  Test case description:
            //  Try setting a read only field. Exception expected.

            TheStruct valueType = new TheStruct();

            Variable <TheStruct> var = new Variable <TheStruct>()
            {
                Default = valueType, Name = "var"
            };
            TestValueTypeFieldReference <TheStruct, int> valueTypeFieldReference = new TestValueTypeFieldReference <TheStruct, int>()
            {
                FieldName = "readonlyField",
                OperandLocationVariable = var,
            };

            int value = 321;
            TestAssign <int> testAssign = new TestAssign <int>()
            {
                ToLocation = valueTypeFieldReference, Value = value
            };

            TestSequence seq = new TestSequence()
            {
                Variables  = { var },
                Activities =
                {
                    testAssign,
                    new TestWriteLine {
                        MessageExpression = ((ctx) => var.Get(ctx).readonlyField.ToString()),HintMessage                                                                = value.ToString()
                    }
                }
            };

            string error = string.Format(ErrorStrings.MemberIsReadOnly, "readonlyField", typeof(TheStruct).Name);

            List <TestConstraintViolation> constraints = new List <TestConstraintViolation>
            {
                new TestConstraintViolation(
                    error,
                    valueTypeFieldReference.ProductActivity)
            };

            TestRuntime.ValidateWorkflowErrors(seq, constraints, error);
        }
        public void TrySetTypeWithoutIndexer()
        {
            //
            //  Test case description:
            //  Try setting indexer on type that does not support ‘this’ property. Validation exception is expected.

            int valueType = 0;

            Variable <int> var = new Variable <int>()
            {
                Default = valueType, Name = "var"
            };
            TestValueTypeIndexerReference <int, int> valueTypeIndexerReference = new TestValueTypeIndexerReference <int, int>()
            {
                OperandLocationVariable = var,
            };

            valueTypeIndexerReference.Indices.Add(new TestArgument <int>(Direction.In, null, 2));

            int value = 321;
            TestAssign <int> testAssign = new TestAssign <int>()
            {
                ToLocation = valueTypeIndexerReference,
                Value      = value,
            };

            TestSequence seq = new TestSequence()
            {
                Variables  = { var },
                Activities =
                {
                    testAssign
                }
            };

            string error = string.Format(ErrorStrings.SpecialMethodNotFound, "set_Item", typeof(int).Name);

            List <TestConstraintViolation> constraints = new List <TestConstraintViolation>
            {
                new TestConstraintViolation(
                    error,
                    valueTypeIndexerReference.ProductActivity)
            };

            TestRuntime.ValidateWorkflowErrors(seq, constraints, error);
        }
Esempio n. 11
0
        public void ThrowInSeq()
        {
            TestSequence seq = new TestSequence()
            {
                Activities =
                {
                    new TestWriteLine()
                    {
                        Message = "Hi"
                    },

                    new TestThrow <InvalidCastException>()
                },
            };

            TestRuntime.RunAndValidateAbortedException(seq, typeof(InvalidCastException), new Dictionary <string, string>());
        }
Esempio n. 12
0
        public void UnreachableActivityAfterThrow()
        {
            TestSequence seq = new TestSequence()
            {
                Activities =
                {
                    new TestThrow <MissingMemberException>(),

                    new TestWriteLine("WriteLine")
                    {
                        Message = "Unreachable activity"
                    },
                }
            };

            TestRuntime.RunAndValidateAbortedException(seq, typeof(MissingMemberException), new Dictionary <string, string>());
        }
Esempio n. 13
0
        public void ThrowExceptionWithMessage()
        {
            // Initializing variable which we will use to catch the exception object
            DelegateInArgument <OperationCanceledException> op = new DelegateInArgument <OperationCanceledException>();
            //TestParameters.DisableXamlRoundTrip = true;
            TestSequence seq = new TestSequence("Outer Seq")
            {
                Activities =
                {
                    new TestTryCatch("Try catch finally")
                    {
                        Try = new TestSequence("Try Activity")
                        {
                            Activities =
                            {
                                new TestThrow <OperationCanceledException>("Throw Operation exception")
                                {
                                    ExceptionExpression = (context => new OperationCanceledException("We have set the message to overwrite exception message")),
                                    ExpectedOutcome     = Outcome.CaughtException(),
                                }
                            }
                        },
                        Catches =
                        {
                            new TestCatch <OperationCanceledException>()
                            {
                                ExceptionVariable = op,
                                Body = new TestSequence("Body of Catch")
                                {
                                    Activities =
                                    {
                                        new TestWriteLine("Writeline for exception message")
                                        {
                                            MessageExpression = (env) => op.Get(env).Message,
                                            HintMessage       = "We have set the message to overwrite exception message"
                                        }
                                    }
                                },
                            }
                        }
                    }
                }
            };

            TestRuntime.RunAndValidateWorkflow(seq);
        }
        public void TrySettingNullFieldName()
        {
            //
            //  Test case description:
            //  Try setting a null OperandLocation. Validation exception expected.

            TheStruct valueType = new TheStruct();

            Variable <TheStruct> var = new Variable <TheStruct>()
            {
                Default = valueType, Name = "var"
            };
            TestValueTypeFieldReference <TheStruct, int> valueTypeFieldReference = new TestValueTypeFieldReference <TheStruct, int>()
            {
                OperandLocationVariable = var
            };

            int value = 321;
            TestAssign <int> testAssign = new TestAssign <int>()
            {
                ToLocation = valueTypeFieldReference, Value = value
            };

            TestSequence seq = new TestSequence()
            {
                Variables  = { var },
                Activities =
                {
                    testAssign,
                    new TestWriteLine {
                        MessageExpression = ((ctx) => var.Get(ctx).publicField.ToString()),HintMessage                                                              = value.ToString()
                    }
                }
            };

            string error = string.Format(ErrorStrings.ActivityPropertyMustBeSet, "FieldName", valueTypeFieldReference.DisplayName);

            List <TestConstraintViolation> constraints = new List <TestConstraintViolation>
            {
                new TestConstraintViolation(
                    error,
                    valueTypeFieldReference.ProductActivity)
            };

            TestRuntime.ValidateWorkflowErrors(seq, constraints, error);
        }
Esempio n. 15
0
        public void EmptyTry()
        {
            // catch
            TestCatch <Exception>             testcatch1 = new TestCatch <Exception>();
            TestCatch <MemberAccessException> testcatch2 = new TestCatch <MemberAccessException>();

            TestCatch[] catches = new TestCatch[] { testcatch1, testcatch2 };

            // finally
            TestSequence finalSeq = new TestSequence();

            finalSeq.Activities.Add(new TestWriteLine("Final", "Final"));

            // Run test
            TestRuntime.RunAndValidateWorkflow(
                CreateTryCatchFinally(null, catches, finalSeq, WFType.SEQ, false));
        }
Esempio n. 16
0
        public void BasicIfTest()
        {
            TestSequence     outerSequence = new TestSequence("sequence1");
            TestSequence     innerSequence = new TestSequence("innerseq");
            TestAssign <int> increment     = new TestAssign <int>("Increment Counter");
            Variable <int>   counter       = VariableHelper.CreateInitialized <int>("counter", 0);

            TestSequence ifSequence = new TestSequence("ifSequence");


            TestDoWhile whileAct = new TestDoWhile("dowhile")
            {
                ConditionExpression = ((env) => ((int)counter.Get(env)) < 10),
                Body = ifSequence,
                HintIterationCount = 10,
            };

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

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

            TestIf ifAct = new TestIf("if act", HintThenOrElse.Else)
            {
                ConditionExpression = ((env) => ((int)counter.Get(env)) > 10),
                ThenActivity        = new TestWriteLine("NotExecuting Writeline", "Shouldnt appear on screen"),
                ElseActivity        = writeLine
            };

            TestIf ifAct2 = new TestIf("if act2", HintThenOrElse.Then)
            {
                ConditionExpression = ((env) => ((int)counter.Get(env)) < 10),
                ThenActivity        = innerSequence,
            };

            ifSequence.Activities.Add(ifAct);
            ifSequence.Activities.Add(ifAct2);
            innerSequence.Activities.Add(increment);
            outerSequence.Variables.Add(counter);
            outerSequence.Activities.Add(whileAct);

            TestRuntime.RunAndValidateWorkflow(outerSequence);
        }
Esempio n. 17
0
        public void TrySettingPropertyWithoutSetter()
        {
            //
            //  Test case description:
            //  Try setting a property which does not have a setter. Exception expected.

            TheStruct valueType = new TheStruct();

            Variable <TheStruct> var = new Variable <TheStruct>()
            {
                Default = valueType, Name = "var"
            };
            TestValueTypePropertyReference <TheStruct, int> valueTypePropertyReference = new TestValueTypePropertyReference <TheStruct, int>()
            {
                PropertyName            = "PropertyWithoutSetter",
                OperandLocationVariable = var,
            };

            int value = 321;
            TestAssign <int> testAssign = new TestAssign <int>()
            {
                ToLocation      = valueTypePropertyReference,
                Value           = value,
                ExpectedOutcome = Outcome.UncaughtException(typeof(InvalidOperationException)),
            };

            TestSequence seq = new TestSequence()
            {
                Variables  = { var },
                Activities =
                {
                    testAssign,
                }
            };

            string error = string.Format(ErrorStrings.MemberIsReadOnly, "PropertyWithoutSetter", typeof(TheStruct));

            List <TestConstraintViolation> constraints = new List <TestConstraintViolation>
            {
                new TestConstraintViolation(
                    error,
                    valueTypePropertyReference.ProductActivity)
            };

            TestRuntime.ValidateWorkflowErrors(seq, constraints, error);
        }
Esempio n. 18
0
        public void TestAbortLoad()
        {
            Variable <int> value    = VariableHelper.Create <int>("value");
            TestSequence   sequence = new TestSequence()
            {
                Variables  = { value },
                Activities =
                {
                    new TestAssign <int>()
                    {
                        ToVariable = value,
                        Value      = 100
                    },
                    new TestPersist(),
                    new TestReadLine <int>("Read", "Read")
                    {
                        BookmarkValue = value
                    },
                    new TestWriteLine("AfterAbort")
                    {
                        MessageExpression = (env) => value.Get(env).ToString(),
                        HintMessage       = "9999"
                    }
                }
            };

            JsonFileInstanceStore.FileInstanceStore jsonStore = new JsonFileInstanceStore.FileInstanceStore(".\\~");
            TestWorkflowRuntime runtime = TestRuntime.CreateTestWorkflowRuntime(sequence, null, jsonStore, PersistableIdleAction.Persist);

            runtime.ExecuteWorkflow();
            runtime.WaitForActivityStatusChange("Read", TestActivityInstanceState.Executing);
            runtime.PersistWorkflow();
            runtime.AbortWorkflow("Abort Workflow");
            //Wait Sometime to Handle to free
            Thread.CurrentThread.Join((int)TimeSpan.FromSeconds(4).TotalMilliseconds);
            //Load Workflow from Last Persistence Point
            runtime.LoadWorkflow();
            runtime.ResumeBookMark("Read", 9999);
            runtime.WaitForActivityStatusChange("AfterAbort", TestActivityInstanceState.Closed);

            //Wait for the second completion trace
            TestTraceManager.Instance.WaitForTrace(runtime.CurrentWorkflowInstanceId, new SynchronizeTrace(RemoteWorkflowRuntime.CompletedOrAbortedHandlerCalled), 1);

            //Call Abort on Completed Workflow, this should not throw exception
            runtime.AbortWorkflow("Abort on Completed Workflow");
        }
Esempio n. 19
0
        public void SetIndexNegative()
        {
            Variable <string[]>         array     = new Variable <string[]>("array", context => new string[] { "Ola" });
            TestArrayItemValue <string> itemValue = new TestArrayItemValue <string>
            {
                ArrayVariable   = array,
                Index           = -1,
                ExpectedOutcome = Outcome.UncaughtException()
            };
            TestSequence testSequence = new TestSequence
            {
                Variables  = { array },
                Activities = { itemValue }
            };

            TestRuntime.RunAndValidateAbortedException(testSequence, typeof(IndexOutOfRangeException), null);
        }
Esempio n. 20
0
        /// <summary>
        /// Exception is thrown in try and caught.
        /// Exception is thrown in try and caught. Catch contains a base of thrown child exception.
        /// </summary>
        /// Disabled and failed in desktop
        //[Fact]
        public void InheritedExceptions2()
        {
            // try
            TestSequence trySeq = new TestSequence();

            trySeq.Activities.Add(new TestWriteLine("Try", "Try"));
            trySeq.Activities.Add(new TestThrow <ArgumentException>("TestThrow1"));

            // catch
            TestCatch[] catches = new TestCatch[] { new TestCatch <Exception>() };
            catches[0].HintHandleException = true;

            // create and run
            TestActivity act = CreateTryCatchFinally(trySeq, catches, null, WFType.SEQ, true);

            TestRuntime.RunAndValidateWorkflow(act);
        }
Esempio n. 21
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);
        }
        public void TrySettingFieldOfNonExistentField()
        {
            //
            //  Test case description:
            //  Try setting value of a field in a type which does not exist. Validation exception expected.

            TheStruct valueType = new TheStruct();

            Variable <TheStruct> var = new Variable <TheStruct>()
            {
                Default = valueType, Name = "var"
            };
            TestValueTypeFieldReference <TheStruct, int> valueTypeFieldReference = new TestValueTypeFieldReference <TheStruct, int>()
            {
                FieldName = "NonExistField",
                OperandLocationVariable = var,
            };

            int value = 321;
            TestAssign <int> testAssign = new TestAssign <int>()
            {
                ToLocation = valueTypeFieldReference, Value = value
            };

            TestSequence seq = new TestSequence()
            {
                Variables  = { var },
                Activities =
                {
                    testAssign,
                }
            };

            string error = string.Format(ErrorStrings.MemberNotFound, "NonExistField", typeof(TheStruct).Name);

            List <TestConstraintViolation> constraints = new List <TestConstraintViolation>
            {
                new TestConstraintViolation(
                    error,
                    valueTypeFieldReference.ProductActivity)
            };


            TestRuntime.ValidateWorkflowErrors(seq, constraints, error);
        }
Esempio n. 23
0
        public void CompletionConditionCancelsRestOfBranches()
        {
            Variable <bool> cancelIt = new Variable <bool> {
                Name = "cancelIt", Default = false
            };
            DelegateInArgument <int> i = new DelegateInArgument <int>()
            {
                Name = "i"
            };

            TestWriteLine w1 = new TestWriteLine("w1", "write1")
            {
                HintMessageList = { "write1", "write1", "write1" }
            };
            TestAssign <bool> a1 = new TestAssign <bool>
            {
                Value      = true,
                ToVariable = cancelIt,
            };

            TestIf decide = new TestIf(HintThenOrElse.Else, HintThenOrElse.Else, HintThenOrElse.Then)
            {
                ConditionExpression = ((ctx) => i.Get(ctx) < 5),
                ThenActivity        = a1,
                ElseActivity        = w1,
            };

            TestParallelForEach <int> foreachAct = new TestParallelForEach <int>("foreach")
            {
                HintValues         = new int[] { 1, 2, 3, 4, 5, 6 },
                ValuesExpression   = (context => new int[] { 1, 2, 3, 4, 5, 6 }),
                CurrentVariable    = i,
                HintIterationCount = 3,
                Body = decide,
                CompletionConditionVariable = cancelIt,
            };

            TestSequence sequence = new TestSequence
            {
                Activities = { foreachAct },
                Variables  = { cancelIt },
            };

            TestRuntime.RunAndValidateWorkflow(sequence);
        }
Esempio n. 24
0
        public void BasicSequenceNoVariables()
        {
            //  Test case description:
            //  Sequence activity without any variables

            TestSequence sequence = new TestSequence("Sequence1");

            TestSequence sequence2 = new TestSequence("InnerSequence1");
            TestSequence sequence3 = new TestSequence("InnerSequence2");
            TestSequence sequence4 = new TestSequence("InnerSequence3");
            TestSequence sequence5 = new TestSequence("InnerSequence4");

            TestSequence sequence6 = new TestSequence("seq5");
            TestSequence sequence7 = new TestSequence("seq6");
            TestSequence sequence8 = new TestSequence("seq7");
            TestSequence sequence9 = new TestSequence("seq8");

            TestWriteLine writeLine1 = new TestWriteLine("Hello One");

            writeLine1.Message = string.Format("Hello world in {0} , {1} , {2}!", sequence.DisplayName, sequence2.DisplayName, sequence6.DisplayName);
            TestWriteLine writeLine2 = new TestWriteLine("Hello Two");

            writeLine2.Message = string.Format("Hello world in {0} , {1} , {2}!", sequence.DisplayName, sequence3.DisplayName, sequence7.DisplayName);
            TestWriteLine writeLine3 = new TestWriteLine("Hello Three");

            writeLine3.Message = string.Format("Hello world in {0} , {1} , {2}!", sequence.DisplayName, sequence4.DisplayName, sequence8.DisplayName);
            TestWriteLine writeLine4 = new TestWriteLine("Hello Four");

            writeLine4.Message = string.Format("Hello world in {0} , {1} , {2}!", sequence.DisplayName, sequence5.DisplayName, sequence9.DisplayName);

            sequence6.Activities.Add(writeLine1);
            sequence7.Activities.Add(writeLine2);
            sequence8.Activities.Add(writeLine3);
            sequence9.Activities.Add(writeLine4);
            sequence2.Activities.Add(sequence6);
            sequence3.Activities.Add(sequence7);
            sequence4.Activities.Add(sequence8);
            sequence5.Activities.Add(sequence9);
            sequence.Activities.Add(sequence2);
            sequence.Activities.Add(sequence3);
            sequence.Activities.Add(sequence4);
            sequence.Activities.Add(sequence5);

            TestRuntime.RunAndValidateWorkflow(sequence);
        }
        public void TrySettingValueOfFieldNameNull()
        {
            //
            //  Test case description:
            //  Try executing ValueTypeFieldReference activity by setting FieldName to null. Validation exception
            //  expected.

            TheStruct valueType = new TheStruct();

            Variable <TheStruct> var = new Variable <TheStruct>()
            {
                Default = valueType, Name = "var"
            };
            TestValueTypeFieldReference <TheStruct, int> valueTypeFieldReference = new TestValueTypeFieldReference <TheStruct, int>()
            {
                FieldName = null,
                OperandLocationVariable = var,
            };

            int value = 321;
            TestAssign <int> testAssign = new TestAssign <int>()
            {
                ToLocation = valueTypeFieldReference, Value = value
            };

            TestSequence seq = new TestSequence()
            {
                Variables  = { var },
                Activities =
                {
                    testAssign,
                }
            };

            string error = string.Format(ErrorStrings.ActivityPropertyMustBeSet, "FieldName", valueTypeFieldReference.DisplayName);

            List <TestConstraintViolation> constraints = new List <TestConstraintViolation>
            {
                new TestConstraintViolation(
                    error,
                    valueTypeFieldReference.ProductActivity)
            };

            TestRuntime.ValidateWorkflowErrors(seq, constraints, error);
        }
Esempio n. 26
0
    public void AddLogDetail(TestBlock testBlock, int sequenceIndex)
    {
        if (isTest)
        {
            return;
        }

        TestSequence testSequence = testBlock.Sequences[sequenceIndex];

        logDataDetail += "\n" + string.Join(", ", new string[] { testBlock.ParticipantCode, testBlock.BlockCode, StudyNumber.ToString(),
                                                                 testBlock.ConditionCode, testSequence.SequenceNumber.ToString(),
                                                                 testSequence.IndexOfDifficulty.ToString(), testSequence.TargetWidth.ToString(), testSequence.TargetAmplitude.ToString(),
                                                                 testSequence.EffecttiveIndexOfDifficulty.ToString(), testSequence.EffectiveTargetWidth.ToString(), testSequence.EffectiveAmplitude.ToString(),
                                                                 testSequence.StartTime.ToString("MM/dd/yyyy hh:mm:ss.fff tt"), "Cardboard", testBlock.ErrorThreshold.ToString(),
                                                                 testBlock.SelectedControlMethod.ToString(), testBlock.SelectedConfirmationMethod.ToString(),
                                                                 testBlock.DwellTime.ToString(), testBlock.Timeout.ToString(), testBlock.MouseSensivity.ToString(),
                                                                 testSequence.MovementTime.ToString(), testSequence.ErrorRate.ToString(), testSequence.Throughput.ToString(), testSequence.RotationSumDegree.ToString() });
    }
Esempio n. 27
0
        public void FlowStepActionToNestedActivityInSequence()
        {
            TestFlowchart flowchart = new TestFlowchart();

            TestWriteLine w1 = new TestWriteLine("w1", "w1");
            TestWriteLine w2 = new TestWriteLine("w2", "w2");
            TestWriteLine w3 = new TestWriteLine("w3", "w3");

            TestSequence seq = new TestSequence();

            seq.Activities.Add(w2);

            flowchart.AddLink(w1, seq);
            flowchart.AddLink(seq, w3);
            flowchart.AddLink(w3, w2);

            TestRuntime.ValidateInstantiationException(flowchart, string.Format(ErrorStrings.ActivityCannotBeReferencedWithoutTarget, w2.DisplayName, seq.DisplayName, flowchart.DisplayName));
        }
Esempio n. 28
0
    public void AddLogTrial(TestBlock testBlock, int sequenceIndex, int trialNumber)
    {
        if (isTest)
        {
            return;
        }

        TestSequence testSequence = testBlock.Sequences[sequenceIndex];
        TestTrial    trial        = testSequence.Trials[trialNumber];

        logDataTrials += "\n" + string.Join(", ", new string[] { testBlock.ParticipantCode, testBlock.BlockCode, StudyNumber.ToString(),
                                                                 testBlock.ConditionCode, testBlock.MouseSensivity.ToString(), testSequence.SequenceNumber.ToString(),
                                                                 trial.TrialNumber.ToString(), trial.TargetAngle.ToString(),
                                                                 trial.StartTime.ToString("MM/dd/yyyy hh:mm:ss.fff tt"),
                                                                 trial.TotalCursorMovement.ToString(), trial.TimeToActivate.ToString(),
                                                                 trial.TimeToFixate.ToString(), trial.TargetCenterError.x.ToString(), trial.TargetCenterError.y.ToString(),
                                                                 trial.TimedOut.ToString(), trial.Error.ToString() });
    }
Esempio n. 29
0
        public void CatchBothUnhandledExceptionHandlerAndInCatch()
        {
            // try
            // Throws a handled exception, then a caught exception
            TestSequence trySeq = new TestSequence("Try")
            {
                Activities =
                {
                    new TestThrow <FormatException>("ThrowFormat")
                    {
                        ExceptionExpression = (context => new FormatException(CustomUtility.CustomMessage)),
                        ExpectedOutcome     = Outcome.HandledException(),
                    },
                },

                ExpectedOutcome = Outcome.Canceled
            };

            // catch
            // Should not catch anything
            TestCatch[] catches = new TestCatch[]
            {
                new TestCatch <ArgumentException>()
                {
                }
            };

            // finally
            // Just confirm it executed
            TestWriteLine finalSeq = new TestWriteLine("Final", "Final");

            // Run test
            TestActivity act = CreateTryCatchFinally(trySeq, catches, finalSeq, WFType.SEQ, false);


            // Run and validate trace
            using (TestWorkflowRuntime runtime = TestRuntime.CreateTestWorkflowRuntime(act))
            {
                // Add the unhandled handler
                runtime.WorkflowRuntimeAdapterType = typeof(AddHandleExceptionRuntimeAdapter);
                runtime.ExecuteWorkflow();
                runtime.GetWatcher().WaitForWorkflowCanceled();
            }
        }
Esempio n. 30
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>();

            switchAct.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);

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

            TestForEach <string> forEachAct = new TestForEach <string>();

            forEachAct.Values             = values;
            forEachAct.CurrentVariable    = arg;
            forEachAct.HintIterationCount = 2;
            forEachAct.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);
        }
Esempio n. 31
0
        /// <summary>
        /// Reads a sequence set from a textual file.
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        private List<TestSequence> ReadSequencesFromFile(string p)
        {
            List<TestSequence> sequences = new List<TestSequence>();

            //reads file contents
            string line;
            TextReader reader = new StreamReader(p);

            //iterates through lines
            while((line = reader.ReadLine()) != null){

                //turn sequence into a list
                TestSequence seq = new TestSequence();
                seq.Path = line.Split(',').ToList();

                if(seq.Path.Count > 1)
                    sequences.Add(seq);
            }

            reader.Dispose();
            return sequences;
        }