Пример #1
0
        // <summary>
        // Prepares composite steps for validation
        // </summary>
        // <param name="stepCounter">StepCounter object to count optional and required steps</param>
        // <param name="parentIsOptional">Indicates if parent step is optional</param>
        // <param name="parentStep">parent step object</param>
        // <param name="indexInParent">index of this step inside its parent</param>
        private static void PrepareExpectedTrace(TraceGroup traceStep, bool parentIsOptional, TraceGroup parentStep, int indexInParent)
        {
            // set parent step reference for this step
            traceStep.parent        = parentStep;
            traceStep.indexInParent = indexInParent;

            bool optional = parentIsOptional || traceStep.Optional;

            // set parent step reference for children steps
            for (int i = 0; i < traceStep.Steps.Count; i++)
            {
                WorkflowTraceStep childStep = traceStep.Steps[i];

                if (childStep is TraceGroup)
                {
                    TraceValidator.PrepareExpectedTrace((TraceGroup)childStep, optional, traceStep, i);
                }
                else if (childStep is IActualTraceStep)
                {
                    if (optional || childStep.Optional)
                    {
                        TraceValidator.AddExpectedOptStepCount((IActualTraceStep)childStep);
                    }
                    else
                    {
                        TraceValidator.AddExpectedReqStepCount((IActualTraceStep)childStep);
                    }
                }
            }

            // declare & init endIndexes[] array
            traceStep.endIndexes = new int[traceStep.Steps.Count];
            for (int i = 0; i < traceStep.Steps.Count; i++)
            {
                traceStep.endIndexes[i] = -1;
            }
        }