public async Task RunAsync(bool passWhenNoAction)
        {
            if(outputWriter != null)
                outputWriter.WriteOutput();

            if (scenario.Steps.Count() == 0)
            {
                ProcessScenarioWhenThereAreNoSteps();
            }
            else
            {
                try 
                {
                    foreach (var step in scenario.Steps)
                    {
                        if(passWhenNoAction)
                        {
                            step.Outcome = Outcome.Passed;
                            statsCascader.CascadeStats(step, false);
                        }
                        else
                        {
                            if (step.ActionAsync == null && step.Action == null)
                            {
                                var notImplementedException = new NotImplementedException();
                                var ex = new StepNotImplementedException(step.Name, notImplementedException);
                                step.Outcome = Outcome.Failed;
                                step.Exception = ex;
                                step.Reason = "No Action";
                                statsCascader.CascadeStats(step, false);
                                throw ex; 
                            }
                            await stepExecutor.ExecuteStepAsync(step);
                        }
                    }
                }
                catch(Exception ex)
                {
                    foreach(var step in scenario.Steps)
                    {
                        if(step.Outcome == Outcome.NotRun)
                        {
                            step.Outcome = Outcome.Skipped;
                            step.Reason = "Previous Error";
                            statsCascader.CascadeStats(step, false);
                        }
                    }
                    throw;
                }
            }
        }
Exemple #2
0
        public async Task RunAsync(bool passWhenNoAction)
        {
            scenario.StartTime = DateTime.Now;
            if (outputWriter != null)
            {
                outputWriter.WriteOutput();
            }

            if (scenario.Steps.Count() == 0)
            {
                ProcessScenarioWhenThereAreNoSteps();
            }
            else
            {
                try
                {
                    foreach (var step in scenario.Steps)
                    {
                        if (passWhenNoAction)
                        {
                            step.Outcome   = Outcome.Passed;
                            step.Reason    = "Passed";
                            step.StartTime = DateTime.Now;
                            step.EndTime   = step.StartTime;
                            statsCascader.CascadeStepStats(step, false);
                        }
                        else
                        {
                            if (step.ActionAsync == null && step.Action == null)
                            {
                                var notImplementedException = new NotImplementedException();
                                var ex = new StepNotImplementedException(step.Name, notImplementedException);
                                step.StartTime = DateTime.Now;
                                step.EndTime   = step.StartTime;
                                step.Outcome   = Outcome.Failed;
                                step.Exception = ex;
                                step.Reason    = "Failed";
                                statsCascader.CascadeStepStats(step, false);
                                throw ex;
                            }
                            await stepExecutor.ExecuteStepAsync(step);
                        }
                    }
                }
                catch
                {
                    foreach (var step in scenario.Steps)
                    {
                        if (step.Outcome == Outcome.NotRun)
                        {
                            step.StartTime = DateTime.Now;
                            step.EndTime   = step.StartTime;
                            step.Outcome   = Outcome.Skipped;
                            step.Reason    = "Previous Error";
                            statsCascader.CascadeStepStats(step, false);
                        }
                    }
                    scenario.EndTime = DateTime.Now;
                    throw;
                }
            }
            scenario.EndTime = DateTime.Now;
        }