2019-02-14 21:25:46 +00:00
|
|
|
require "./spec_helper"
|
|
|
|
|
|
|
|
def new_passing_result
|
|
|
|
example = PassingExample.create
|
|
|
|
elapsed = Time::Span.new(nanoseconds: 1_000_000)
|
|
|
|
expectations = Spectator::Expectations::ExampleExpectations.new([] of Spectator::Expectations::Expectation)
|
|
|
|
Spectator::SuccessfulResult.new(example, elapsed, expectations)
|
|
|
|
end
|
|
|
|
|
|
|
|
def new_failure_result(result_type : Spectator::Result.class = Spectator::FailedResult)
|
|
|
|
example = FailingExample.create # Doesn't matter what type of example is used here.
|
|
|
|
elapsed = Time::Span.new(nanoseconds: 1_000_000)
|
|
|
|
expectations = Spectator::Expectations::ExampleExpectations.new([] of Spectator::Expectations::Expectation)
|
|
|
|
error = Exception.new("foobar")
|
|
|
|
result_type.new(example, elapsed, expectations, error)
|
|
|
|
end
|
|
|
|
|
2019-03-23 20:38:51 +00:00
|
|
|
def new_results(successful_count = 5, failed_count = 5, error_count = 5, pending_count = 5)
|
|
|
|
total = successful_count + failed_count + error_count + pending_count
|
|
|
|
results = Array(Spectator::Result).new(total)
|
2019-02-14 21:25:46 +00:00
|
|
|
successful_count.times { results << new_passing_result }
|
|
|
|
failed_count.times { results << new_failure_result }
|
|
|
|
error_count.times { results << new_failure_result(Spectator::ErroredResult) }
|
|
|
|
pending_count.times { results << new_pending_result }
|
2019-03-23 20:38:51 +00:00
|
|
|
results
|
|
|
|
end
|
2019-02-14 21:25:46 +00:00
|
|
|
|
2019-03-23 20:38:51 +00:00
|
|
|
def new_report(successful_count = 5, failed_count = 5, error_count = 5, pending_count = 5, overhead_time = 1_000_000i64, fail_blank = false)
|
|
|
|
results = new_results(successful_count, failed_count, error_count, pending_count)
|
2019-02-17 20:40:10 +00:00
|
|
|
example_runtime = results.compact_map(&.as?(Spectator::FinishedResult)).sum(&.elapsed)
|
2019-02-14 21:25:46 +00:00
|
|
|
total_runtime = example_runtime + Time::Span.new(nanoseconds: overhead_time)
|
2019-03-22 19:41:46 +00:00
|
|
|
Spectator::Report.new(results, total_runtime, fail_blank: fail_blank)
|
2019-02-14 21:25:46 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
describe Spectator::Report do
|
2019-03-23 20:38:51 +00:00
|
|
|
describe "#initialize(results)" do
|
|
|
|
describe "#runtime" do
|
|
|
|
it "is the sum of all results' runtimes" do
|
|
|
|
results = new_results
|
|
|
|
runtime = results.compact_map(&.as?(Spectator::FinishedResult)).sum(&.elapsed)
|
|
|
|
report = Spectator::Report.new(results)
|
|
|
|
report.runtime.should eq(runtime)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-03-23 20:44:00 +00:00
|
|
|
describe "#each" do
|
|
|
|
it "yields all results" do
|
|
|
|
results = new_results
|
|
|
|
report = Spectator::Report.new(results)
|
|
|
|
# The `#each` method is tested through `Enumerable#to_a`.
|
|
|
|
report.to_a.should eq(results)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-02-14 21:25:46 +00:00
|
|
|
describe "#runtime" do
|
|
|
|
it "is the expected value" do
|
|
|
|
span = Time::Span.new(10, 10, 10)
|
|
|
|
report = Spectator::Report.new([] of Spectator::Result, span)
|
|
|
|
report.runtime.should eq(span)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#example_count" do
|
|
|
|
it "is the expected value" do
|
|
|
|
report = new_report(5, 4, 3, 2)
|
|
|
|
report.example_count.should eq(14)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-03-22 19:41:46 +00:00
|
|
|
describe "#examples_ran" do
|
|
|
|
it "is the number of non-skipped examples" do
|
|
|
|
report = new_report(5, 4, 3, 2)
|
|
|
|
report.examples_ran.should eq(12)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-02-14 21:25:46 +00:00
|
|
|
describe "#successful_count" do
|
|
|
|
it "is the expected value" do
|
|
|
|
report = new_report(5, 4, 3, 2)
|
|
|
|
report.successful_count.should eq(5)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#failed_count" do
|
|
|
|
it "is the expected value" do
|
|
|
|
report = new_report(5, 4, 3, 2)
|
|
|
|
report.failed_count.should eq(7)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#error_count" do
|
|
|
|
it "is the expected value" do
|
|
|
|
report = new_report(5, 4, 3, 2)
|
|
|
|
report.error_count.should eq(3)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#pending_count" do
|
|
|
|
it "is the expected value" do
|
|
|
|
report = new_report(5, 4, 3, 2)
|
|
|
|
report.pending_count.should eq(2)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-03-22 06:05:53 +00:00
|
|
|
describe "#remaining_count" do
|
|
|
|
it "is the expected value" do
|
|
|
|
results = [] of Spectator::Result
|
|
|
|
remaining = 5
|
|
|
|
report = Spectator::Report.new(results, Time::Span.zero, remaining)
|
|
|
|
report.remaining_count.should eq(remaining)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-02-22 22:09:55 +00:00
|
|
|
describe "#failed?" do
|
|
|
|
context "with a failed test suite" do
|
|
|
|
it "is true" do
|
|
|
|
report = new_report(5, 4, 3, 2)
|
|
|
|
report.failed?.should be_true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "with a passing test suite" do
|
|
|
|
it "is false" do
|
|
|
|
report = new_report(5, 0, 0, 0)
|
|
|
|
report.failed?.should be_false
|
|
|
|
end
|
|
|
|
end
|
2019-03-22 19:41:46 +00:00
|
|
|
|
|
|
|
context "with fail-blank enabled" do
|
|
|
|
context "when no tests run" do
|
|
|
|
it "is true" do
|
|
|
|
report = new_report(0, 0, 0, 5, fail_blank: true)
|
|
|
|
report.failed?.should be_true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when tests run" do
|
|
|
|
context "and there are failures" do
|
|
|
|
it "is true" do
|
|
|
|
report = new_report(5, 4, 3, 2, fail_blank: true)
|
|
|
|
report.failed?.should be_true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "and there are no failures" do
|
|
|
|
it "is false" do
|
|
|
|
report = new_report(5, 0, 0, 2, fail_blank: true)
|
|
|
|
report.failed?.should be_false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2019-02-22 22:09:55 +00:00
|
|
|
end
|
|
|
|
|
2019-03-22 06:05:53 +00:00
|
|
|
describe "#remaining?" do
|
|
|
|
context "with remaining tests" do
|
|
|
|
it "is true" do
|
|
|
|
results = [] of Spectator::Result
|
|
|
|
report = Spectator::Report.new(results, Time::Span.zero, 5)
|
|
|
|
report.remaining?.should be_true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "without remaining tests" do
|
|
|
|
it "is false" do
|
|
|
|
results = [] of Spectator::Result
|
|
|
|
report = Spectator::Report.new(results, Time::Span.zero, 0)
|
|
|
|
report.remaining?.should be_false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-02-14 21:25:46 +00:00
|
|
|
describe "#failures" do
|
|
|
|
it "returns the expected results" do
|
|
|
|
results = Array.new(5) { new_failure_result.as(Spectator::Result) }
|
|
|
|
report = Spectator::Report.new(results, Time::Span.zero)
|
2019-02-18 03:09:13 +00:00
|
|
|
report.failures.to_a.should eq(results)
|
2019-02-14 21:25:46 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it "includes errors" do
|
|
|
|
results = Array(Spectator::Result).new(5) do |index|
|
|
|
|
if index.odd?
|
|
|
|
new_failure_result
|
|
|
|
else
|
|
|
|
new_failure_result(Spectator::ErroredResult)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
report = Spectator::Report.new(results, Time::Span.zero)
|
2019-02-18 03:09:13 +00:00
|
|
|
report.failures.to_a.should eq(results)
|
2019-02-14 21:25:46 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#errors" do
|
|
|
|
it "returns the expected results" do
|
|
|
|
results = Array.new(5) { new_failure_result(Spectator::ErroredResult).as(Spectator::Result) }
|
|
|
|
report = Spectator::Report.new(results, Time::Span.zero)
|
2019-02-18 03:09:13 +00:00
|
|
|
report.errors.to_a.should eq(results)
|
2019-02-14 21:25:46 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it "does not include failures" do
|
|
|
|
results = Array(Spectator::Result).new(5) do |index|
|
|
|
|
if index.odd?
|
|
|
|
new_failure_result
|
|
|
|
else
|
|
|
|
new_failure_result(Spectator::ErroredResult)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
report = Spectator::Report.new(results, Time::Span.zero)
|
|
|
|
errors_only = results.select(&.is_a?(Spectator::ErroredResult))
|
2019-02-18 03:09:13 +00:00
|
|
|
report.errors.to_a.should eq(errors_only)
|
2019-02-14 21:25:46 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#example_runtime" do
|
|
|
|
it "is the sum of all example run-times" do
|
|
|
|
passing_results = Array.new(5) { new_passing_result }
|
|
|
|
runtime = passing_results.sum(&.elapsed)
|
|
|
|
results = passing_results.map(&.as(Spectator::Result))
|
|
|
|
total_runtime = runtime + Time::Span.new(nanoseconds: 1_234_567)
|
|
|
|
report = Spectator::Report.new(results, total_runtime)
|
|
|
|
report.example_runtime.should eq(runtime)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#overhead_time" do
|
|
|
|
it "is the difference between total runtime and the sum of all example run-times" do
|
|
|
|
passing_results = Array.new(5) { new_passing_result }
|
|
|
|
runtime = passing_results.sum(&.elapsed)
|
|
|
|
results = passing_results.map(&.as(Spectator::Result))
|
|
|
|
overhead = Time::Span.new(nanoseconds: 1_234_567)
|
|
|
|
total_runtime = runtime + overhead
|
|
|
|
report = Spectator::Report.new(results, total_runtime)
|
|
|
|
report.overhead_time.should eq(overhead)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|