コード例 #1
0
 private static XDocument ToXDocument(IFeatureResult[] features)
 {
     return new XDocument(
         new XDeclaration("1.0", "utf-8", null),
         new XElement("TestResults",
             Enumerable.Repeat(ToSummaryXElement(features), 1).Concat(features.Select(ToXElement)).Cast<object>().ToArray()));
 }
コード例 #2
0
 /// <summary>
 /// Notifies that feature has finished.
 /// </summary>
 /// <param name="feature">Feature result.</param>
 public void NotifyFeatureFinished(IFeatureResult feature)
 {
     foreach (var notifier in Notifiers)
     {
         notifier.NotifyFeatureFinished(feature);
     }
 }
コード例 #3
0
        private static IHtmlNode GetFeatureSummary(IFeatureResult feature, int index)
        {
            var timeSummary = feature.GetScenarios().GetTestExecutionTimeSummary();

            return(Html.Tag(Html5Tag.Tr).Content(
                       Html.Tag(Html5Tag.Td).Content(
                           Html.Tag(Html5Tag.A).Href("#feature" + index).Content(feature.Info.Name.Format(StepNameDecorator)),
                           Html.Tag(Html5Tag.Span).Content(feature.Info.Labels.Select(GetLabel)).SkipEmpty()),

                       Html.Tag(Html5Tag.Td).Content(feature.GetScenarios().Count().ToString()),
                       Html.Tag(Html5Tag.Td).Content(feature.CountScenariosWithStatus(ExecutionStatus.Passed).ToString()),
                       GetNumericTagWithOptionalClass(Html5Tag.Td, "bypassedAlert", feature.CountScenariosWithStatus(ExecutionStatus.Bypassed)),
                       GetNumericTagWithOptionalClass(Html5Tag.Td, "failedAlert", feature.CountScenariosWithStatus(ExecutionStatus.Failed)),
                       GetNumericTagWithOptionalClass(Html5Tag.Td, "ignoredAlert", feature.CountScenariosWithStatus(ExecutionStatus.Ignored)),

                       Html.Tag(Html5Tag.Td).Content(feature.CountSteps().ToString()),
                       Html.Tag(Html5Tag.Td).Content(feature.CountStepsWithStatus(ExecutionStatus.Passed).ToString()),
                       GetNumericTagWithOptionalClass(Html5Tag.Td, "bypassedAlert", feature.CountStepsWithStatus(ExecutionStatus.Bypassed)),
                       GetNumericTagWithOptionalClass(Html5Tag.Td, "failedAlert", feature.CountStepsWithStatus(ExecutionStatus.Failed)),
                       GetNumericTagWithOptionalClass(Html5Tag.Td, "ignoredAlert", feature.CountStepsWithStatus(ExecutionStatus.Ignored)),
                       Html.Tag(Html5Tag.Td).Content(feature.CountStepsWithStatus(ExecutionStatus.NotRun).ToString()),

                       Html.Tag(Html5Tag.Td).Content(timeSummary.Duration.FormatPretty()),
                       Html.Tag(Html5Tag.Td).Class("hidden").Content(timeSummary.Duration.Ticks.ToString()),
                       Html.Tag(Html5Tag.Td).Content(timeSummary.Aggregated.FormatPretty()),
                       Html.Tag(Html5Tag.Td).Class("hidden").Content(timeSummary.Aggregated.Ticks.ToString()),
                       Html.Tag(Html5Tag.Td).Content(timeSummary.Average.FormatPretty()),
                       Html.Tag(Html5Tag.Td).Class("hidden").Content(timeSummary.Average.Ticks.ToString())
                       ));
        }
コード例 #4
0
        private static IHtmlNode GetFeatureSummary(IFeatureResult feature, int index)
        {
            var testExecutionTime        = feature.Scenarios.GetTestExecutionTime();
            var testAverageExecutionTime = feature.Scenarios.GetTestAverageExecutionTime();

            return(Html.Tag(HtmlTextWriterTag.Tr).Content(
                       Html.Tag(HtmlTextWriterTag.Td).Content(
                           Html.Tag(HtmlTextWriterTag.A).Href("#feature" + index).Content(feature.Name),
                           GetLabel(feature.Label)),

                       Html.Tag(HtmlTextWriterTag.Td).Content(feature.Scenarios.Count().ToString()),
                       Html.Tag(HtmlTextWriterTag.Td).Content(feature.CountScenariosWithStatus(ResultStatus.Passed).ToString()),
                       GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "bypassedAlert", feature.CountScenariosWithStatus(ResultStatus.Bypassed)),
                       GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "failedAlert", feature.CountScenariosWithStatus(ResultStatus.Failed)),
                       GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "ignoredAlert", feature.CountScenariosWithStatus(ResultStatus.Ignored)),

                       Html.Tag(HtmlTextWriterTag.Td).Content(feature.CountSteps().ToString()),
                       Html.Tag(HtmlTextWriterTag.Td).Content(feature.CountStepsWithStatus(ResultStatus.Passed).ToString()),
                       GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "bypassedAlert", feature.CountStepsWithStatus(ResultStatus.Bypassed)),
                       GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "failedAlert", feature.CountStepsWithStatus(ResultStatus.Failed)),
                       GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "ignoredAlert", feature.CountStepsWithStatus(ResultStatus.Ignored)),
                       Html.Tag(HtmlTextWriterTag.Td).Content(feature.CountStepsWithStatus(ResultStatus.NotRun).ToString()),

                       Html.Tag(HtmlTextWriterTag.Td).Content(testExecutionTime.FormatPretty()),
                       Html.Tag(HtmlTextWriterTag.Td).Class("hidden").Content(testExecutionTime.Ticks.ToString()),
                       Html.Tag(HtmlTextWriterTag.Td).Content(testAverageExecutionTime.FormatPretty()),
                       Html.Tag(HtmlTextWriterTag.Td).Class("hidden").Content(testAverageExecutionTime.Ticks.ToString())
                       ));
        }
コード例 #5
0
        private static void FormatFeature(StringBuilder builder, IFeatureResult feature)
        {
            if (builder.Length > 0)
            {
                builder.AppendLine();
            }

            builder.Append("Feature: ");
            builder.Append(feature.Name);
            if (!string.IsNullOrWhiteSpace(feature.Label))
            {
                builder.Append(" [").Append(feature.Label).Append("]");
            }
            builder.AppendLine();

            if (!string.IsNullOrWhiteSpace(feature.Description))
            {
                builder.Append("\t").Append(feature.Description.Replace(Environment.NewLine, Environment.NewLine + "\t")).AppendLine();
            }

            foreach (var scenario in feature.Scenarios)
            {
                FormatScenario(builder, scenario);
            }
        }
コード例 #6
0
 private IHtmlNode GetFeatureDetails(IFeatureResult feature, int index)
 {
     return(Html.Tag(Html5Tag.Article).Class(GetFeatureClasses(feature)).Content(
                Html.Checkbox().Class("toggle toggleF").Id("toggle" + index).Checked(),
                Html.Tag(Html5Tag.Div).Class("header").Content(
                    Html.Tag(Html5Tag.H2).Id("feature" + index).Class("title").Content(
                        Html.Tag(Html5Tag.Label).For("toggle" + index).Content(GetCheckBoxTag(), Html.Text(feature.Info.Name.Format(StepNameDecorator))),
                        Html.Tag(Html5Tag.Span).Content(feature.Info.Labels.Select(GetLabel)).SkipEmpty(),
                        GetSmallLink("feature" + index)),
                    Html.Tag(Html5Tag.Div).Class("description").Content(feature.Info.Description)),
                Html.Tag(Html5Tag.Div).Class("scenarios").Content(
                    feature.GetScenarios().Select((s, i) => GetScenario(s, index, i)))));
 }
コード例 #7
0
 private IHtmlNode GetFeatureDetails(IFeatureResult feature, int index)
 {
     return(Html.Tag(Html5Tag.Article).Class(GetFeatureClasses(feature)).Content(
                Html.Checkbox().Class("toggle toggleF").Id("toggle" + index).Checked(),
                Html.Tag(HtmlTextWriterTag.Div).Class("header").Content(
                    Html.Tag(HtmlTextWriterTag.H2).Id("feature" + index).Class("title").Content(
                        Html.Tag(HtmlTextWriterTag.Label).For("toggle" + index).Content(GetCheckBoxTag(), Html.Text(feature.Name)),
                        GetLabel(feature.Label),
                        GetSmallLink("feature" + index)),
                    Html.Tag(HtmlTextWriterTag.Div).Class("description").Content(feature.Description)),
                Html.Tag(HtmlTextWriterTag.Div).Class("scenarios").Content(
                    feature.Scenarios.Select((s, i) => GetScenario(s, index, i)))));
 }
コード例 #8
0
        public void SetUp()
        {
            _formatter = new Mock <IReportFormatter>();
            _feature   = TestResults.CreateFeatureResult("name", "description", "label", TestResults.CreateScenarioResult("abc", "def", _expectedExecutionStartOffset, TimeSpan.Zero, new string[0], TestResults.CreateStepResult(ExecutionStatus.Passed)));
            _formatter.Setup(f => f.Format(It.IsAny <Stream>(), It.Is <IFeatureResult[]>(l => l.Contains(_feature)))).Callback(
                (Stream s, IFeatureResult[] results) =>
            {
                using (var writer = new StreamWriter(s))
                    writer.Write(ExpectedContentText);
            });

            _realDirPath = _dirPath = null;
        }
コード例 #9
0
        private static XElement ToXElement(IFeatureResult feature)
        {
            var objects = new List<object> { new XAttribute("Name", feature.Name) };

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

            if (!string.IsNullOrWhiteSpace(feature.Description))
                objects.Add(new XElement("Description", feature.Description));

            objects.Add(feature.Scenarios.Select(ToXElement).Cast<object>().ToArray());

            return new XElement("Feature", objects);
        }
コード例 #10
0
        private static string GetFeatureClasses(IFeatureResult feature)
        {
            var builder = new StringBuilder("feature");

            foreach (var result in Enum.GetValues(typeof(ResultStatus)).Cast <ResultStatus>().Where(result => feature.CountScenariosWithStatus(result) > 0))
            {
                builder.Append(" ").Append(GetStatusClass(result));
            }

            if (!feature.Scenarios.Any())
            {
                builder.Append(" ").Append(GetStatusClass(ResultStatus.NotRun));
            }

            return(builder.ToString());
        }
コード例 #11
0
        private static void FormatFeature(StringBuilder builder, IFeatureResult feature)
        {
            if (builder.Length > 0)
                builder.AppendLine();

            builder.Append("Feature: ");
            builder.Append(feature.Name);
            if (!string.IsNullOrWhiteSpace(feature.Label))
                builder.Append(" [").Append(feature.Label).Append("]");
            builder.AppendLine();

            if (!string.IsNullOrWhiteSpace(feature.Description))
                builder.Append("\t").Append(feature.Description.Replace(Environment.NewLine, Environment.NewLine + "\t")).AppendLine();

            foreach (var scenario in feature.Scenarios)
                FormatScenario(builder, scenario);
        }
コード例 #12
0
        private static XElement ToXElement(IFeatureResult feature)
        {
            var objects = new List <object> {
                new XAttribute("Name", feature.Info.Name)
            };

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

            if (!string.IsNullOrWhiteSpace(feature.Info.Description))
            {
                objects.Add(new XElement("Description", feature.Info.Description));
            }

            objects.AddRange(feature.GetScenarios().Select(ToXElement));

            return(new XElement("Feature", objects));
        }
コード例 #13
0
        private static XElement ToXElement(IFeatureResult feature)
        {
            var objects = new List <object> {
                new XAttribute("Name", feature.Name)
            };

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

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

            objects.Add(feature.Scenarios.Select(ToXElement).Cast <object>().ToArray());

            return(new XElement("Feature", objects));
        }
コード例 #14
0
        private static void FormatFeature(TextWriter writer, IFeatureResult feature)
        {
            writer.WriteLine();
            writer.Write("Feature: ");
            writer.Write(feature.Info.Name);
            FormatLabels(writer, feature.Info.Labels);

            writer.WriteLine();

            if (!string.IsNullOrWhiteSpace(feature.Info.Description))
            {
                writer.Write("\t");
                writer.Write(feature.Info.Description.Replace(Environment.NewLine, Environment.NewLine + "\t"));
                writer.WriteLine();
            }

            foreach (var scenario in feature.GetScenariosOrderedByName())
            {
                FormatScenario(writer, scenario);
            }
        }
コード例 #15
0
        private static XElement ToSummaryXElement(IFeatureResult[] features)
        {
            var objects = new List<object>
            {
                new XAttribute("TestExecutionStart", features.GetTestExecutionStartTime()),
                new XAttribute("TestExecutionTime", features.GetTestExecutionTime()),
                new XElement("Features", new object[] {new XAttribute("Count", features.Length)}),
                new XElement("Scenarios", new XAttribute("Count", features.CountScenarios()),
                    new XAttribute("Passed", features.CountScenariosWithStatus(ResultStatus.Passed)),
                    new XAttribute("Bypassed", features.CountScenariosWithStatus(ResultStatus.Bypassed)),
                    new XAttribute("Failed", features.CountScenariosWithStatus(ResultStatus.Failed)),
                    new XAttribute("Ignored", features.CountScenariosWithStatus(ResultStatus.Ignored))),
                new XElement("Steps", new XAttribute("Count", features.CountSteps()),
                    new XAttribute("Passed", features.CountStepsWithStatus(ResultStatus.Passed)),
                    new XAttribute("Bypassed", features.CountStepsWithStatus(ResultStatus.Bypassed)),
                    new XAttribute("Failed", features.CountStepsWithStatus(ResultStatus.Failed)),
                    new XAttribute("Ignored", features.CountStepsWithStatus(ResultStatus.Ignored)),
                    new XAttribute("NotRun", features.CountStepsWithStatus(ResultStatus.NotRun)))
            };

            return new XElement("Summary", objects);
        }
コード例 #16
0
 private void WriteFeature(HtmlTextWriter writer, IFeatureResult feature)
 {
     WriteTag(writer, HtmlTextWriterTag.Div, "feature", () =>
     {
         WriteTag(writer, HtmlTextWriterTag.Div, "header", () =>
         {
             WriteTag(writer, HtmlTextWriterTag.Div, "title", () =>
             {
                 WriteTag(writer, HtmlTextWriterTag.Span, "label", feature.Label);
                 writer.Write(feature.Name);
             });
             WriteTag(writer, HtmlTextWriterTag.Div, "description", feature.Description);
         });
         WriteTag(writer, HtmlTextWriterTag.Div, "scenarios", () =>
         {
             foreach (var scenario in feature.Scenarios)
             {
                 WriteScenario(writer, scenario);
             }
         });
     });
 }
コード例 #17
0
        private static IHtmlNode GetFeatureSummary(IFeatureResult feature, int index)
        {
            var testExecutionTime = feature.Scenarios.GetTestExecutionTime();
            var testAverageExecutionTime = feature.Scenarios.GetTestAverageExecutionTime();

            return Html.Tag(HtmlTextWriterTag.Tr).Content(
                Html.Tag(HtmlTextWriterTag.Td).Content(
                    Html.Tag(HtmlTextWriterTag.A).Href("#feature" + index).Content(feature.Name),
                    GetLabel(feature.Label)),

                Html.Tag(HtmlTextWriterTag.Td).Content(feature.Scenarios.Count().ToString()),
                Html.Tag(HtmlTextWriterTag.Td).Content(feature.CountScenariosWithStatus(ResultStatus.Passed).ToString()),
                GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "bypassedAlert", feature.CountScenariosWithStatus(ResultStatus.Bypassed)),
                GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "failedAlert", feature.CountScenariosWithStatus(ResultStatus.Failed)),
                GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "ignoredAlert", feature.CountScenariosWithStatus(ResultStatus.Ignored)),

                Html.Tag(HtmlTextWriterTag.Td).Content(feature.CountSteps().ToString()),
                Html.Tag(HtmlTextWriterTag.Td).Content(feature.CountStepsWithStatus(ResultStatus.Passed).ToString()),
                GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "bypassedAlert", feature.CountStepsWithStatus(ResultStatus.Bypassed)),
                GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "failedAlert", feature.CountStepsWithStatus(ResultStatus.Failed)),
                GetNumericTagWithOptionalClass(HtmlTextWriterTag.Td, "ignoredAlert", feature.CountStepsWithStatus(ResultStatus.Ignored)),
                Html.Tag(HtmlTextWriterTag.Td).Content(feature.CountStepsWithStatus(ResultStatus.NotRun).ToString()),

                Html.Tag(HtmlTextWriterTag.Td).Content(testExecutionTime.FormatPretty()),
                Html.Tag(HtmlTextWriterTag.Td).Class("hidden").Content(testExecutionTime.Ticks.ToString()),
                Html.Tag(HtmlTextWriterTag.Td).Content(testAverageExecutionTime.FormatPretty()),
                Html.Tag(HtmlTextWriterTag.Td).Class("hidden").Content(testAverageExecutionTime.Ticks.ToString())
                );
        }
コード例 #18
0
 public HtmlResultTextWriter(Stream outputStream, IFeatureResult[] features)
 {
     _writer = new HtmlTextWriter(new StreamWriter(outputStream), "");
     _features = features;
     _categories = GroupCategories(features);
 }
コード例 #19
0
 public void AddResult(IFeatureResult result)
 {
     _results.Add(result);
 }
コード例 #20
0
 /// <summary>
 /// Counts all steps with given status.
 /// </summary>
 public static int CountStepsWithStatus(this IFeatureResult result, ResultStatus resultStatus)
 {
     return(result.Scenarios.Sum(s => s.CountStepsWithStatus(resultStatus)));
 }
コード例 #21
0
 /// <summary>
 /// Adds feature to aggregator.
 /// </summary>
 /// <param name="feature">Feature to aggregate.</param>
 public void AddFeature(IFeatureResult feature)
 {
     VerifyFinishedState();
     Aggregator.AddFeature(feature);
 }
コード例 #22
0
 /// <summary>
 /// Aggregates given feature result.
 /// </summary>
 /// <param name="featureResult">Feature result to aggregate.</param>
 public void Aggregate(IFeatureResult featureResult)
 {
     _results.Enqueue(featureResult);
 }
コード例 #23
0
 public void NotifyFeatureFinished(IFeatureResult feature)
 {
     _notifications.Add($"Feature Finish: {FormatFeature(feature.Info)} | Scenarios:{feature.GetScenarios().Count()}");
 }
コード例 #24
0
        private static string GetFeatureClasses(IFeatureResult feature)
        {
            var builder = new StringBuilder("feature");
            foreach (var result in Enum.GetValues(typeof(ResultStatus)).Cast<ResultStatus>().Where(result => feature.CountScenariosWithStatus(result) > 0))
                builder.Append(" ").Append(GetStatusClass(result));

            if (!feature.Scenarios.Any())
                builder.Append(" ").Append(GetStatusClass(ResultStatus.NotRun));

            return builder.ToString();
        }
コード例 #25
0
 public void AddResult(IFeatureResult result)
 {
     _results.Add(result);
 }
コード例 #26
0
 /// <summary>
 /// Adds feature to aggregator.
 /// </summary>
 /// <param name="feature">Feature to aggregate.</param>
 public void AddFeature(IFeatureResult feature)
 {
     Aggregator.AddFeature(feature);
 }
コード例 #27
0
 public void AddFeature(IFeatureResult feature)
 {
     _results.Add(feature);
 }
コード例 #28
0
 /// <summary>
 /// Does nothing.
 /// </summary>
 public void NotifyFeatureFinished(IFeatureResult feature)
 {
 }
コード例 #29
0
        private static void FormatSummary(StringBuilder builder, IFeatureResult[] features)
        {
            builder.AppendLine("Summary:");
            var summary = new Dictionary<string, object>
            {
                {"Test execution start time", features.GetTestExecutionStartTime().ToString("yyyy-MM-dd HH:mm:ss UTC")},
                {"Test execution time", features.GetTestExecutionTime().FormatPretty()},
                {"Number of features", features.Length},
                {"Number of scenarios", features.CountScenarios()},
                {"Passed scenarios", features.CountScenariosWithStatus(ResultStatus.Passed)},
                {"Bypassed scenarios", features.CountScenariosWithStatus(ResultStatus.Bypassed)},
                {"Failed scenarios", features.CountScenariosWithStatus(ResultStatus.Failed)},
                {"Ignored scenarios", features.CountScenariosWithStatus(ResultStatus.Ignored)},
                {"Number of steps", features.CountSteps()},
                {"Passed steps", features.CountStepsWithStatus(ResultStatus.Passed)},
                {"Bypassed steps", features.CountStepsWithStatus(ResultStatus.Bypassed)},
                {"Failed steps", features.CountStepsWithStatus(ResultStatus.Failed)},
                {"Ignored steps", features.CountStepsWithStatus(ResultStatus.Ignored)},
                {"Not Run steps", features.CountStepsWithStatus(ResultStatus.NotRun)}
            };

            var maxLength = summary.Keys.Max(k => k.Length);
            var format = string.Format("\t{{0,-{0}}}: {{1}}", maxLength);
            foreach (var row in summary)
                builder.AppendFormat(format, row.Key, row.Value).AppendLine();
        }
コード例 #30
0
 /// <summary>
 /// Adds feature to aggregator.
 /// </summary>
 /// <param name="feature">Feature to aggregate.</param>
 public void AddFeature(IFeatureResult feature)
 {
     VerifyFinishedState();
     Aggregator.AddFeature(feature);
 }
コード例 #31
0
 /// <summary>
 /// Returns scenarios ordered by name.
 /// </summary>
 public static IEnumerable <IScenarioResult> GetScenariosOrderedByName(this IFeatureResult feature)
 {
     return(feature.GetScenarios().OrderBy(s => s.Info.Name.ToString(), StringComparer.OrdinalIgnoreCase));
 }
コード例 #32
0
		/// <summary>
		/// Aggregates given feature.
		/// </summary>
		/// <param name="feature">Feature to aggregate.</param>
		public void AddFeature(IFeatureResult feature)
		{
			_summary.AddResult(feature);
		}
コード例 #33
0
 /// <summary>
 /// Counts all steps.
 /// </summary>
 public static int CountSteps(this IFeatureResult result)
 {
     return(result.GetScenarios().SelectMany(s => s.GetAllSteps()).Count());
 }
コード例 #34
0
 public void AddFeature(IFeatureResult feature)
 {
     _results.Add(feature);
 }
コード例 #35
0
 /// <summary>
 /// Counts all steps with given status.
 /// </summary>
 public static int CountStepsWithStatus(this IFeatureResult result, ExecutionStatus status)
 {
     return(result.GetScenarios().Sum(s => s.CountStepsWithStatus(status)));
 }
コード例 #36
0
 public void NotifyFeatureFinished(IFeatureResult feature)
 {
     _notifier.NotifyFeatureFinished(feature);
 }
コード例 #37
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");
        }
コード例 #38
0
 /// <summary>
 /// Counts all steps.
 /// </summary>
 public static int CountSteps(this IFeatureResult result)
 {
     return(result.Scenarios.SelectMany(s => s.Steps).Count());
 }
コード例 #39
0
 private IHtmlNode GetFeatureDetails(IFeatureResult feature, int index)
 {
     return Html.Tag(Html5Tag.Article).Class(GetFeatureClasses(feature)).Content(
         Html.Checkbox().Class("toggle toggleF").Id("toggle" + index).Checked(),
         Html.Tag(HtmlTextWriterTag.Div).Class("header").Content(
             Html.Tag(HtmlTextWriterTag.H2).Id("feature" + index).Class("title").Content(
                 Html.Tag(HtmlTextWriterTag.Label).For("toggle" + index).Content(GetCheckBoxTag(), Html.Text(feature.Name)),
                 GetLabel(feature.Label),
                 GetSmallLink("feature" + index)),
             Html.Tag(HtmlTextWriterTag.Div).Class("description").Content(feature.Description)),
         Html.Tag(HtmlTextWriterTag.Div).Class("scenarios").Content(
             feature.Scenarios.Select((s, i) => GetScenario(s, index, i))));
 }
コード例 #40
0
 /// <summary>
 /// Notifies that feature has finished.
 /// </summary>
 /// <param name="feature">Feature result.</param>
 public void NotifyFeatureFinished(IFeatureResult feature)
 {
     _onNotify($"FEATURE FINISHED: {feature.Info.Name}");
 }
コード例 #41
0
 /// <summary>
 /// Aggregates given feature.
 /// </summary>
 /// <param name="feature">Feature to aggregate.</param>
 public void AddFeature(IFeatureResult feature)
 {
     _summary.AddResult(feature);
 }