Example #1
0
        private static void FormatScenario(TextWriter writer, IScenarioResult scenario)
        {
            writer.WriteLine();
            writer.Write("\tScenario: ");
            writer.Write(scenario.Info.Name);
            FormatLabels(writer, scenario.Info.Labels);
            writer.Write(" - ");
            writer.Write(scenario.Status);

            if (scenario.ExecutionTime != null)
            {
                writer.Write(" (");
                writer.Write(scenario.ExecutionTime.Duration.FormatPretty());
                writer.Write(")");
            }
            writer.WriteLine();

            if (scenario.Info.Categories.Any())
            {
                writer.Write("\t\tCategories: ");
                writer.WriteLine(string.Join(", ", scenario.Info.Categories));
            }

            var commentBuilder = new StringBuilder();

            foreach (var step in scenario.GetSteps())
            {
                FormatStep(writer, step, commentBuilder);
            }
            FormatDetails(writer, scenario);
            FormatComments(writer, commentBuilder);
        }
Example #2
0
 /// <summary>
 /// Notifies that scenario has finished.
 /// </summary>
 /// <param name="scenario">Scenario result.</param>
 public void NotifyScenarioFinished(IScenarioResult scenario)
 {
     foreach (var notifier in _notifiers)
     {
         notifier.NotifyScenarioFinished(scenario);
     }
 }
        private static XElement ToXElement(IScenarioResult scenario)
        {
            var objects = new List <object>
            {
                new XAttribute("Status", scenario.Status.ToString()),
                new XAttribute("Name", scenario.Name)
            };

            if (!string.IsNullOrWhiteSpace(scenario.Label))
            {
                objects.Add(new XAttribute("Label", scenario.Label));
            }

            if (scenario.ExecutionStart != null)
            {
                objects.Add(new XAttribute("ExecutionStart", scenario.ExecutionStart));
            }
            if (scenario.ExecutionTime != null)
            {
                objects.Add(new XAttribute("ExecutionTime", scenario.ExecutionTime));
            }
            if (scenario.Categories.Any())
            {
                objects.Add(scenario.Categories.Select(c => new XElement("Category", new XAttribute("Name", c))).Cast <object>().ToArray());
            }
            objects.Add(scenario.Steps.Select(ToXElement).Cast <object>().ToArray());

            if (!string.IsNullOrWhiteSpace(scenario.StatusDetails))
            {
                objects.Add(new XElement("StatusDetails", scenario.StatusDetails));
            }

            return(new XElement("Scenario", objects));
        }
        private static void FormatScenario(StringBuilder builder, IScenarioResult scenario)
        {
            if (builder.Length > 0)
                builder.AppendLine();
            builder.Append("\tScenario: ");
            builder.Append(scenario.Name);
            if (!string.IsNullOrWhiteSpace(scenario.Label))
                builder.Append(" [").Append(scenario.Label).Append("]");
            builder.Append(" - ").Append(scenario.Status);

            if (scenario.ExecutionTime != null)
                builder.Append(" (").Append(scenario.ExecutionTime.FormatPretty()).Append(")");
            builder.AppendLine();

            if (scenario.Categories.Any())
                builder.Append("\t\tCategories: ").AppendLine(string.Join(", ", scenario.Categories));

            StringBuilder commentBuilder = new StringBuilder();
            foreach (var step in scenario.Steps)
            {
                FormatStep(builder, step);
                CollectComments(step, commentBuilder);
            }
            FormatDetails(builder, scenario);
            FormatComments(builder, commentBuilder);
        }
Example #5
0
        private static void FormatScenario(StringBuilder builder, IScenarioResult scenario)
        {
            if (builder.Length > 0)
            {
                builder.AppendLine();
            }
            builder.Append("\tScenario: ");
            builder.Append(scenario.Name);
            if (!string.IsNullOrWhiteSpace(scenario.Label))
            {
                builder.Append(" [").Append(scenario.Label).Append("]");
            }
            builder.Append(" - ").Append(scenario.Status);

            if (scenario.ExecutionTime != null)
            {
                builder.Append(" (").Append(scenario.ExecutionTime.FormatPretty()).Append(")");
            }
            builder.AppendLine();

            if (scenario.Categories.Any())
            {
                builder.Append("\t\tCategories: ").AppendLine(string.Join(", ", scenario.Categories));
            }

            StringBuilder commentBuilder = new StringBuilder();

            foreach (var step in scenario.Steps)
            {
                FormatStep(builder, step);
                CollectComments(step, commentBuilder);
            }
            FormatDetails(builder, scenario);
            FormatComments(builder, commentBuilder);
        }
Example #6
0
        private static XElement ToXElement(IScenarioResult scenario)
        {
            var objects = new List <object>
            {
                new XAttribute("Status", scenario.Status.ToString()),
                new XAttribute("Name", scenario.Info.Name),
                ToXElement(scenario.Info.Name)
            };

            objects.AddRange(scenario.Info.Labels.Select(label => new XElement("Label", new XAttribute("Name", label))));

            if (scenario.ExecutionTime != null)
            {
                objects.Add(new XAttribute("ExecutionStart", scenario.ExecutionTime.Start));
                objects.Add(new XAttribute("ExecutionTime", scenario.ExecutionTime.Duration));
            }
            if (scenario.Info.Categories.Any())
            {
                objects.AddRange(scenario.Info.Categories.Select(c => new XElement("Category", new XAttribute("Name", c))));
            }
            objects.AddRange(scenario.GetSteps().Select(s => ToXElement(s, "Step")));

            if (!string.IsNullOrWhiteSpace(scenario.StatusDetails))
            {
                objects.Add(new XElement("StatusDetails", scenario.StatusDetails));
            }

            return(new XElement("Scenario", objects));
        }
 public void NotifyScenarioFinished(IScenarioResult scenarioResult)
 {
     _scenariosFinished++;
     _scenariosPending--;
     if (scenarioResult.Status == ResultStatus.Failed)
         _scenariosFailed++;
     WriteProgress("{0}: {1}", scenarioResult.Status.ToString().ToUpperInvariant(), scenarioResult.Name);
 }
        private static void FormatDetails(StringBuilder builder, IScenarioResult scenario)
        {
            if (string.IsNullOrWhiteSpace(scenario.StatusDetails))
                return;

            builder.AppendLine("\t\tDetails:")
                   .Append("\t\t\t")
                   .Append(scenario.StatusDetails.Trim().Replace(Environment.NewLine, Environment.NewLine + "\t\t\t"))
                   .AppendLine();
        }
 public void NotifyScenarioFinished(IScenarioResult scenarioResult)
 {
     _scenariosFinished++;
     _scenariosPending--;
     if (scenarioResult.Status == ResultStatus.Failed)
     {
         _scenariosFailed++;
     }
     WriteProgress("{0}: {1}", scenarioResult.Status.ToString().ToUpperInvariant(), scenarioResult.Name);
 }
        /// <summary>
        /// Notifies that scenario has been finished with given status and optional details.
        /// </summary>
        public void NotifyScenarioFinished(IScenarioResult scenarioResult)
        {
            if (scenarioResult.ExecutionTime.HasValue)
                WriteLine("  SCENARIO RESULT: {0} after {1}", scenarioResult.Status, scenarioResult.ExecutionTime.FormatPretty());
            else
                WriteLine("  SCENARIO RESULT: {0}", scenarioResult.Status);

            if (!string.IsNullOrWhiteSpace(scenarioResult.StatusDetails))
                WriteLine("    {0}", scenarioResult.StatusDetails.Replace("\n", "\n    "));
        }
Example #11
0
        private static void FormatDetails(StringBuilder builder, IScenarioResult scenario)
        {
            if (string.IsNullOrWhiteSpace(scenario.StatusDetails))
            {
                return;
            }

            builder.AppendLine("\t\tDetails:")
            .Append("\t\t\t")
            .Append(scenario.StatusDetails.Trim().Replace(Environment.NewLine, Environment.NewLine + "\t\t\t"))
            .AppendLine();
        }
Example #12
0
        private static void FormatDetails(TextWriter writer, IScenarioResult scenario)
        {
            if (string.IsNullOrWhiteSpace(scenario.StatusDetails))
            {
                return;
            }

            writer.WriteLine("\t\tDetails:");
            writer.Write("\t\t\t");
            writer.Write(scenario.StatusDetails.Trim().Replace(Environment.NewLine, Environment.NewLine + "\t\t\t"));
            writer.WriteLine();
        }
Example #13
0
        /// <summary>
        /// Notifies that scenario has finished.
        /// </summary>
        /// <param name="scenario">Scenario result.</param>
        public void NotifyScenarioFinished(IScenarioResult scenario)
        {
            var scenarioText = scenario.ExecutionTime != null
                ? $"  SCENARIO RESULT: {scenario.Status} after {scenario.ExecutionTime.Duration.FormatPretty()}"
                : $"  SCENARIO RESULT: {scenario.Status}";

            var scenarioDetails = !string.IsNullOrWhiteSpace(scenario.StatusDetails)
                ? $"{Environment.NewLine}    {scenario.StatusDetails.Replace(Environment.NewLine, Environment.NewLine + "    ")}"
                : string.Empty;

            _onNotify(scenarioText + scenarioDetails);
        }
        /// <summary>
        /// Notifies that scenario has been finished with given status and optional details.
        /// </summary>
        public void NotifyScenarioFinished(IScenarioResult scenarioResult)
        {
            if (scenarioResult.ExecutionTime.HasValue)
            {
                WriteLine("  SCENARIO RESULT: {0} after {1}", scenarioResult.Status, scenarioResult.ExecutionTime.FormatPretty());
            }
            else
            {
                WriteLine("  SCENARIO RESULT: {0}", scenarioResult.Status);
            }

            if (!string.IsNullOrWhiteSpace(scenarioResult.StatusDetails))
            {
                WriteLine("    {0}", scenarioResult.StatusDetails.Replace("\n", "\n    "));
            }
        }
Example #15
0
 private void WriteScenario(HtmlTextWriter writer, IScenarioResult scenario)
 {
     WriteTag(writer, HtmlTextWriterTag.Div, "scenario", () =>
     {
         WriteTag(writer, HtmlTextWriterTag.Div, "title", () =>
         {
             WriteStatus(writer, scenario.Status);
             WriteTag(writer, HtmlTextWriterTag.Span, "label", scenario.Label);
             writer.Write(scenario.Name);
         });
         foreach (var step in scenario.Steps)
         {
             WriteStep(writer, step);
         }
         WriteTag(writer, HtmlTextWriterTag.Div, "details", scenario.StatusDetails);
     });
 }
Example #16
0
 private void FormatScenario(StringBuilder builder, IScenarioResult scenario)
 {
     if (builder.Length > 0)
     {
         builder.AppendLine();
     }
     builder.Append("\tScenario: ");
     if (!string.IsNullOrWhiteSpace(scenario.Label))
     {
         builder.Append("[").Append(scenario.Label).Append("] ");
     }
     builder.Append(scenario.Name).Append(" - ").Append(scenario.Status).AppendLine();
     foreach (var step in scenario.Steps)
     {
         builder.Append("\t\tStep ")
         .Append(step.Number).Append(": ")
         .Append(step.Name).Append(" - ").AppendLine(step.Status.ToString());
     }
     FormatDetails(builder, scenario);
 }
Example #17
0
        private IHtmlNode GetScenario(IScenarioResult scenario, int featureIndex, int scenarioIndex)
        {
            var toggleId   = string.Format("toggle{0}_{1}", featureIndex, scenarioIndex);
            var scenarioId = string.Format("scenario{0}_{1}", featureIndex, scenarioIndex + 1);

            return(Html.Tag(HtmlTextWriterTag.Div).Class("scenario " + GetStatusClass(scenario.Status)).Attribute("data-categories", GetScenarioCategories(scenario)).Content(
                       Html.Checkbox().Id(toggleId).Class("toggle toggleS").Checked(),
                       Html.Tag(HtmlTextWriterTag.H3).Id(scenarioId).Class("title").Content(
                           Html.Tag(HtmlTextWriterTag.Label).For(toggleId).Content(
                               GetCheckBoxTag(),
                               GetStatus(scenario.Status),
                               Html.Text(scenario.Name)),
                           GetLabel(scenario.Label),
                           GetDuration(scenario.ExecutionTime),
                           GetSmallLink(scenarioId)),
                       Html.Tag(HtmlTextWriterTag.Div).Class("categories").Content(string.Join(", ", scenario.Categories)).SkipEmpty(),
                       Html.Tag(HtmlTextWriterTag.Div).Content(scenario.Steps.Select(GetStep)),
                       GetStatusDetails(scenario.StatusDetails),
                       GetComments(scenario.Steps),
                       Html.Br()));
        }
Example #18
0
        private IHtmlNode GetScenario(IScenarioResult scenario, int featureIndex, int scenarioIndex)
        {
            var toggleId   = $"toggle{featureIndex}_{scenarioIndex}";
            var scenarioId = $"scenario{featureIndex}_{scenarioIndex + 1}";

            return(Html.Tag(Html5Tag.Div).Class("scenario " + GetStatusClass(scenario.Status)).Attribute("data-categories", GetScenarioCategories(scenario)).Content(
                       Html.Checkbox().Id(toggleId).Class("toggle toggleS").Checked(),
                       Html.Tag(Html5Tag.H3).Id(scenarioId).Class("title").Content(
                           Html.Tag(Html5Tag.Label).For(toggleId).Content(
                               GetCheckBoxTag(),
                               GetStatus(scenario.Status),
                               Html.Text(scenario.Info.Name.Format(StepNameDecorator))),
                           Html.Tag(Html5Tag.Span).Content(scenario.Info.Labels.Select(GetLabel)).SkipEmpty(),
                           GetDuration(scenario.ExecutionTime),
                           GetSmallLink(scenarioId)),
                       Html.Tag(Html5Tag.Div).Class("categories").Content(string.Join(", ", scenario.Info.Categories)).SkipEmpty(),
                       Html.Tag(Html5Tag.Div).Content(scenario.GetSteps().Select(GetStep)),
                       GetStatusDetails(scenario.StatusDetails),
                       GetComments(scenario.GetAllSteps()),
                       Html.Br()));
        }
Example #19
0
        private XElement ToXElement(IScenarioResult scenario)
        {
            var objects = new List <object>
            {
                new XAttribute("Status", scenario.Status.ToString()),
                new XAttribute("Name", scenario.Name)
            };

            if (!string.IsNullOrWhiteSpace(scenario.Label))
            {
                objects.Add(new XAttribute("Label", scenario.Label));
            }

            objects.Add(scenario.Steps.Select(ToXElement).Cast <object>().ToArray());

            if (!string.IsNullOrWhiteSpace(scenario.StatusDetails))
            {
                objects.Add(new XElement("StatusDetails", scenario.StatusDetails));
            }

            return(new XElement("Scenario", objects));
        }
        private static XElement ToXElement(IScenarioResult scenario)
        {
            var objects = new List<object>
            {
                new XAttribute("Status", scenario.Status.ToString()),
                new XAttribute("Name", scenario.Name)
            };

            if (!string.IsNullOrWhiteSpace(scenario.Label))
                objects.Add(new XAttribute("Label", scenario.Label));

            if (scenario.ExecutionStart != null)
                objects.Add(new XAttribute("ExecutionStart", scenario.ExecutionStart));
            if (scenario.ExecutionTime != null)
                objects.Add(new XAttribute("ExecutionTime", scenario.ExecutionTime));
            if (scenario.Categories.Any())
                objects.Add(scenario.Categories.Select(c => new XElement("Category", new XAttribute("Name", c))).Cast<object>().ToArray());
            objects.Add(scenario.Steps.Select(ToXElement).Cast<object>().ToArray());

            if (!string.IsNullOrWhiteSpace(scenario.StatusDetails))
                objects.Add(new XElement("StatusDetails", scenario.StatusDetails));

            return new XElement("Scenario", objects);
        }
Example #21
0
 private string GetScenarioCategories(IScenarioResult scenario)
 {
     return(GetScenarioCategories(scenario.Categories));
 }
Example #22
0
        public void It_should_wire_steps_scenario_and_feature_infos()
        {
            IFeatureInfo    featureInfo      = null;
            IFeatureResult  featureResult    = null;
            IScenarioInfo   scenarioInfo     = null;
            IScenarioResult scenarioResult   = null;
            var             stepInfos        = new List <IStepInfo>();
            var             stepResults      = new List <IStepResult>();
            var             featureNotifier  = new Mock <IFeatureProgressNotifier>();
            var             scenarioNotifier = new Mock <IScenarioProgressNotifier>();

            featureNotifier.Setup(x => x.NotifyFeatureStart(It.IsAny <IFeatureInfo>()))
            .Callback((IFeatureInfo x) => featureInfo = x);
            featureNotifier.Setup(x => x.NotifyFeatureFinished(It.IsAny <IFeatureResult>()))
            .Callback((IFeatureResult x) => featureResult = x);
            scenarioNotifier.Setup(x => x.NotifyScenarioStart(It.IsAny <IScenarioInfo>()))
            .Callback((IScenarioInfo x) => scenarioInfo = x);
            scenarioNotifier.Setup(x => x.NotifyScenarioFinished(It.IsAny <IScenarioResult>()))
            .Callback((IScenarioResult x) => scenarioResult = x);
            scenarioNotifier.Setup(x => x.NotifyStepStart(It.IsAny <IStepInfo>()))
            .Callback((IStepInfo x) => stepInfos.Add(x));
            scenarioNotifier.Setup(x => x.NotifyStepFinished(It.IsAny <IStepResult>()))
            .Callback((IStepResult x) => stepResults.Add(x));

            var feature = new TestableFeatureRunnerRepository(featureNotifier.Object, fixture => scenarioNotifier.Object)
                          .GetRunnerFor(GetType());
            var runner = feature.GetBddRunner(this);

            try
            {
                runner.Test().TestGroupScenario(Composite_group);
            }
            catch { }
            feature.Dispose();

            Assert.That(featureInfo, Is.Not.Null);
            Assert.That(featureInfo.RuntimeId, Is.Not.EqualTo(Guid.Empty), "Feature should have unique RuntimeId");
            Assert.That(featureResult.Info, Is.SameAs(featureInfo));

            Assert.That(scenarioInfo, Is.Not.Null);
            Assert.That(scenarioInfo.RuntimeId, Is.Not.EqualTo(Guid.Empty), "Scenario should have unique RuntimeId");
            Assert.That(scenarioResult.Info, Is.SameAs(scenarioInfo));
            Assert.That(scenarioInfo.Parent, Is.SameAs(featureInfo));

            Assert.That(stepInfos.Select(x => x.RuntimeId).Distinct().Count(), Is.EqualTo(9), "Each step should have unique RuntimeId");
            Assert.That(stepInfos[0].Parent, Is.SameAs(scenarioInfo));
            Assert.That(stepInfos[1].Parent, Is.SameAs(stepInfos[0]));
            Assert.That(stepInfos[2].Parent, Is.SameAs(stepInfos[1]));
            Assert.That(stepInfos[3].Parent, Is.SameAs(stepInfos[1]));
            Assert.That(stepInfos[4].Parent, Is.SameAs(stepInfos[1]));
            Assert.That(stepInfos[5].Parent, Is.SameAs(stepInfos[0]));
            Assert.That(stepInfos[6].Parent, Is.SameAs(stepInfos[5]));
            Assert.That(stepInfos[7].Parent, Is.SameAs(stepInfos[5]));
            Assert.That(stepInfos[8].Parent, Is.SameAs(stepInfos[5]));

            Assert.That(stepResults[0].Info, Is.SameAs(stepInfos[2]), "1.1.1");
            Assert.That(stepResults[1].Info, Is.SameAs(stepInfos[3]), "1.1.2");
            Assert.That(stepResults[2].Info, Is.SameAs(stepInfos[4]), "1.1.3");
            Assert.That(stepResults[3].Info, Is.SameAs(stepInfos[1]), "1.1");
            Assert.That(stepResults[4].Info, Is.SameAs(stepInfos[6]), "1.2.1");
            Assert.That(stepResults[5].Info, Is.SameAs(stepInfos[7]), "1.2.2");
            Assert.That(stepResults[6].Info, Is.SameAs(stepInfos[8]), "1.2.3");
            Assert.That(stepResults[7].Info, Is.SameAs(stepInfos[5]), "1.2");
            Assert.That(stepResults[8].Info, Is.SameAs(stepInfos[0]), "1");
        }
Example #23
0
 public void AddScenario(IScenarioResult scenario)
 {
     _scenarios.Add(scenario);
 }
Example #24
0
 public void NotifyScenarioFinished(IScenarioResult scenario)
 {
     _manager.CaptureScenarioResult(scenario.Status);
     _notifier.NotifyScenarioFinished(scenario);
     _manager.FinishScenario();
 }
Example #25
0
 /// <inheritdoc />
 public bool Equal(IScenarioResult other)
 {
     return(Result == other.Result);
 }
Example #26
0
 /// <summary>
 /// Does nothing.
 /// </summary>
 public void NotifyScenarioFinished(IScenarioResult scenario)
 {
 }
Example #27
0
 public void NotifyScenarioFinished(IScenarioResult scenario)
 {
     _results.Enqueue(scenario);
 }
 public void NotifyScenarioFinished(IScenarioResult scenario)
 {
     _notifications.Add($"Scenario Finish: {FormatScenario(scenario.Info)} | Status:{scenario.Status} | ExecutionTimePresent:{scenario.ExecutionTime != null} | Steps:{scenario.GetSteps().Count()} | Details:{scenario.StatusDetails}");
 }
 /// <summary>
 /// Notifies that scenario has been finished with given status and optional details.
 /// </summary>
 /// <param name="scenarioResult">Scenario result</param>
 public void NotifyScenarioFinished(IScenarioResult scenarioResult)
 {
     foreach (var notifier in Notifiers)
         notifier.NotifyScenarioFinished(scenarioResult);
 }
Example #30
0
 public void AddScenario(IScenarioResult scenario)
 {
     _scenarios.Add(scenario);
 }
Example #31
0
 public void NotifyScenarioFinished(IScenarioResult scenarioResult)
 {
 }
Example #32
0
 public void AddScenario(IScenarioResult scenario)
 {
     _scenarios.Enqueue(scenario);
 }
Example #33
0
 /// <summary>
 /// Counts all steps with given status.
 /// </summary>
 public static int CountStepsWithStatus(this IScenarioResult result, ResultStatus resultStatus)
 {
     return(result.Steps.Count(s => s.Status == resultStatus));
 }
Example #34
0
 /// <summary>
 /// Returns all the steps with their sub steps, belonging to scenario.
 /// </summary>
 public static IEnumerable <IStepResult> GetAllSteps(this IScenarioResult scenario)
 {
     return(scenario.GetSteps().SelectMany(x => x.GetAllSteps()));
 }
Example #35
0
 /// <summary>
 /// Counts all steps with given status.
 /// </summary>
 public static int CountStepsWithStatus(this IScenarioResult result, ExecutionStatus status)
 {
     return(result.GetAllSteps().Count(s => s.Status == status));
 }
Example #36
0
 public ExperimentResult(IScenario scenario, IScenarioResult result)
 {
     Scenario       = scenario;
     ScenarioResult = result;
 }