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())); }
/// <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); } }
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()) )); }
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()) )); }
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); } }
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))))); }
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))))); }
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; }
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); }
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()); }
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); }
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)); }
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)); }
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); } }
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); }
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); } }); }); }
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()) ); }
public HtmlResultTextWriter(Stream outputStream, IFeatureResult[] features) { _writer = new HtmlTextWriter(new StreamWriter(outputStream), ""); _features = features; _categories = GroupCategories(features); }
public void AddResult(IFeatureResult result) { _results.Add(result); }
/// <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))); }
/// <summary> /// Adds feature to aggregator. /// </summary> /// <param name="feature">Feature to aggregate.</param> public void AddFeature(IFeatureResult feature) { VerifyFinishedState(); Aggregator.AddFeature(feature); }
/// <summary> /// Aggregates given feature result. /// </summary> /// <param name="featureResult">Feature result to aggregate.</param> public void Aggregate(IFeatureResult featureResult) { _results.Enqueue(featureResult); }
public void NotifyFeatureFinished(IFeatureResult feature) { _notifications.Add($"Feature Finish: {FormatFeature(feature.Info)} | Scenarios:{feature.GetScenarios().Count()}"); }
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(); }
/// <summary> /// Adds feature to aggregator. /// </summary> /// <param name="feature">Feature to aggregate.</param> public void AddFeature(IFeatureResult feature) { Aggregator.AddFeature(feature); }
public void AddFeature(IFeatureResult feature) { _results.Add(feature); }
/// <summary> /// Does nothing. /// </summary> public void NotifyFeatureFinished(IFeatureResult feature) { }
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(); }
/// <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)); }
/// <summary> /// Aggregates given feature. /// </summary> /// <param name="feature">Feature to aggregate.</param> public void AddFeature(IFeatureResult feature) { _summary.AddResult(feature); }
/// <summary> /// Counts all steps. /// </summary> public static int CountSteps(this IFeatureResult result) { return(result.GetScenarios().SelectMany(s => s.GetAllSteps()).Count()); }
/// <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))); }
public void NotifyFeatureFinished(IFeatureResult feature) { _notifier.NotifyFeatureFinished(feature); }
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"); }
/// <summary> /// Counts all steps. /// </summary> public static int CountSteps(this IFeatureResult result) { return(result.Scenarios.SelectMany(s => s.Steps).Count()); }
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)))); }
/// <summary> /// Notifies that feature has finished. /// </summary> /// <param name="feature">Feature result.</param> public void NotifyFeatureFinished(IFeatureResult feature) { _onNotify($"FEATURE FINISHED: {feature.Info.Name}"); }