From b8dcf35165837a0646ba802e0e562cbf7723f570 Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Thu, 30 Aug 2018 23:38:20 -0600 Subject: [PATCH] Add report for suite results --- src/spectator/report.cr | 27 ++++++++++++++++++++ src/spectator/reporters/reporter.cr | 2 +- src/spectator/reporters/standard_reporter.cr | 2 +- src/spectator/runner.cr | 17 +++++++----- 4 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 src/spectator/report.cr diff --git a/src/spectator/report.cr b/src/spectator/report.cr new file mode 100644 index 0000000..22a5ba7 --- /dev/null +++ b/src/spectator/report.cr @@ -0,0 +1,27 @@ +module Spectator + class Report + getter runtime : Time::Span + + @results : Array(ExampleResult) + + def initialize(results : Enumerable(ExampleResult), @runtime) + @results = results.to_a + end + + def successful_examples + @results.select { |result| result.successful? } + end + + def failed_examples + @results.select { |result| result.failed? } + end + + def example_runtime + @results.map { |result| result.elapsed }.sum + end + + def overhead_time + @runtime - example_runtime + end + end +end diff --git a/src/spectator/reporters/reporter.cr b/src/spectator/reporters/reporter.cr index e274cac..51a5b4e 100644 --- a/src/spectator/reporters/reporter.cr +++ b/src/spectator/reporters/reporter.cr @@ -2,7 +2,7 @@ module Spectator module Reporters abstract class Reporter abstract def start_suite - abstract def end_suite + abstract def end_suite(report : Report) abstract def start_example(example : Example) abstract def end_example(result : ExampleResult) end diff --git a/src/spectator/reporters/standard_reporter.cr b/src/spectator/reporters/standard_reporter.cr index 221cc63..d20910c 100644 --- a/src/spectator/reporters/standard_reporter.cr +++ b/src/spectator/reporters/standard_reporter.cr @@ -7,7 +7,7 @@ module Spectator def start_suite end - def end_suite + def end_suite(report : Report) puts end diff --git a/src/spectator/runner.cr b/src/spectator/runner.cr index 694b27f..d16d2b9 100644 --- a/src/spectator/runner.cr +++ b/src/spectator/runner.cr @@ -9,13 +9,18 @@ module Spectator end def run : Nil - @reporter.start_suite - sorted_examples.each do |example| - @reporter.start_example(example) - result = run_example(example) - @reporter.end_example(result) + results = [] of ExampleResult + elapsed = Time.measure do + @reporter.start_suite + results = sorted_examples.map do |example| + @reporter.start_example(example) + run_example(example).tap do |result| + @reporter.end_example(result) + end + end end - @reporter.end_suite + report = Report.new(results, elapsed) + @reporter.end_suite(report) end private def sorted_examples