コード例 #1
0
        public void SetValueOfAnItemInMultiDimensionalIndexer()
        {
            //
            //  Test case description:
            //  Set value of an item in multi dimensional indexer.
            TheStruct valueType = new TheStruct();

            Variable <TheStruct> var = new Variable <TheStruct>()
            {
                Default = valueType, Name = "var"
            };
            Variable <int> varIndex2 = new Variable <int>()
            {
                Default = 2, Name = "varIndex2"
            };
            Variable <int> varIndex3 = new Variable <int>()
            {
                Default = 3, Name = "varIndex3"
            };

            TestValueTypeIndexerReference <TheStruct, int> valueTypeIndexerReference = new TestValueTypeIndexerReference <TheStruct, int>()
            {
                OperandLocationVariable = var
            };

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

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

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

            TestRuntime.RunAndValidateWorkflow(seq);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        public void TrySetReferenceTypeIndexer()
        {
            //
            //  Test case description:
            //  Try setting indexer on reference type. Validation exception is expected.

            Variable <TheClass> var = new Variable <TheClass>("var", context => new TheClass());
            TestValueTypeIndexerReference <TheClass, int> valueTypeIndexerReference = new TestValueTypeIndexerReference <TheClass, 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.TypeMustbeValueType, typeof(TheClass).Name);

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

            TestRuntime.ValidateWorkflowErrors(seq, constraints, error);
        }
コード例 #6
0
        public void ThrowFromIndexer()
        {
            //
            //  Test case description:
            //  Throw from ‘this’ property

            TheStruct valueType = new TheStruct();

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

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

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

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

            TestRuntime.RunAndValidateAbortedException(seq, typeof(Exception), null);
        }
コード例 #7
0
        public void SetIndexWithCompatibleType()
        {
            //
            //  Test case description:
            //  Try setting short indexed on integer indexer.

            TheStruct valueType = new TheStruct();

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

            valueTypeIndexerReference.Indices.Add(new TestArgument <short>(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,
                    new TestWriteLine {
                        MessageExpression = ((ctx) => var.Get(ctx)[2].ToString()),HintMessage                                                     = value.ToString()
                    }
                }
            };

            TestRuntime.RunAndValidateWorkflow(seq);
        }
コード例 #8
0
        public void SetDelegateArgument()
        {
            // for using delegate argument

            TheStruct valueType             = new TheStruct();
            int       indiceValue           = 2;
            DelegateInArgument <int> indice = new DelegateInArgument <int>();
            Variable <TheStruct>     var    = VariableHelper.CreateInitialized <TheStruct>("var", valueType);
            TestValueTypeIndexerReference <TheStruct, int> valueTypeIndexerReference = new TestValueTypeIndexerReference <TheStruct, int>()
            {
                OperandLocationVariable = var,
            };

            valueTypeIndexerReference.Indices.Add(new TestArgument <int>(Direction.In, null, (env) => indice.Get(env)));

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

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

            CoreWf.Statements.Sequence outerSeq = new CoreWf.Statements.Sequence()
            {
                Variables =
                {
                    var
                },
                Activities =
                {
                    new InvokeAction <int>()
                    {
                        Argument = indiceValue,
                        Action   = new ActivityAction <int>()
                        {
                            Argument = indice,
                            Handler  = seq.ProductActivity
                        }
                    }
                }
            };

            TestCustomActivity testActivity = TestCustomActivity <CoreWf.Statements.Sequence> .CreateFromProduct(outerSeq);

            UnorderedTraces traces = new UnorderedTraces()
            {
                Steps =
                {
                    new UserTrace(value.ToString())
                }
            };

            testActivity.ActivitySpecificTraces.Add(traces);
            ExpectedTrace expectedTrace = testActivity.GetExpectedTrace();

            expectedTrace.AddIgnoreTypes(typeof(ActivityTrace));

            TestRuntime.RunAndValidateWorkflow(testActivity, expectedTrace);
        }