diff --git a/spec/expectations/expectation_results_spec.cr b/spec/expectations/expectation_results_spec.cr index 40d08a1..6ae748d 100644 --- a/spec/expectations/expectation_results_spec.cr +++ b/spec/expectations/expectation_results_spec.cr @@ -3,78 +3,136 @@ require "../spec_helper" describe Spectator::Expectations::ExpectationResults do describe "#each" do it "yields all results" do - fail "Test not implemented" + tuple = report_results(5, 5) + results = [] of Spectator::Expectations::Expectation::Result + tuple[:reporter].results.each { |result| results << result } + # Results might not be in the same order. + # Just check if if the arrays contain the same items. + results.size.should eq(tuple[:results].size) + (results - tuple[:results]).empty?.should be_true end end describe "#successes" do it "returns only successful results" do - fail "Test not implemented" + tuple = report_results(5, 5) + results = tuple[:reporter].results + results.successes.all?(&.successful?).should be_true + end + + it "returns the correct results" do + tuple = report_results(5, 5) + results = tuple[:reporter].results + successful = results.successes.to_a + successful.size.should eq(5) + (successful - tuple[:successful]).empty?.should be_true end context "with all successful results" do it "returns all results" do - fail "Test not implemented" + tuple = report_results(5, 0) + results = tuple[:reporter].results + results.successes.size.should eq(tuple[:successful].size) end end context "with all failure results" do it "returns an empty collection" do - fail "Test not implemented" + tuple = report_results(0, 5) + results = tuple[:reporter].results + results.successes.size.should eq(0) end end end describe "#each_success" do it "yields only successful results" do - fail "Test not implemented" + tuple = report_results(5, 5) + results = [] of Spectator::Expectations::Expectation::Result + tuple[:reporter].results.each_success { |result| results << result } + # Results might not be in the same order. + # Just check if if the arrays contain the same items. + results.size.should eq(tuple[:successful].size) + (results - tuple[:successful]).empty?.should be_true end context "with all successful results" do it "yields all results" do - fail "Test not implemented" + tuple = report_results(0, 5) + results = [] of Spectator::Expectations::Expectation::Result + tuple[:reporter].results.each_success { |result| results << result } + results.size.should eq(tuple[:successful].size) end end context "with all failure results" do it "yields nothing" do - fail "Test not implemented" + tuple = report_results(0, 5) + results = [] of Spectator::Expectations::Expectation::Result + tuple[:reporter].results.each_success { |result| results << result } + results.empty?.should be_true end end end describe "#failures" do it "returns only failed results" do - fail "Test not implemented" + tuple = report_results(5, 5) + results = tuple[:reporter].results + results.failures.all?(&.failure?).should be_true + end + + it "returns the correct results" do + tuple = report_results(5, 5) + results = tuple[:reporter].results + failures = results.failures.to_a + failures.size.should eq(5) + (failures - tuple[:failures]).empty?.should be_true end context "with all successful results" do it "returns an empty collection" do - fail "Test not implemented" + tuple = report_results(5, 0) + results = tuple[:reporter].results + results.failures.size.should eq(0) end end context "with all failure results" do it "returns all results" do - fail "Test not implemented" + tuple = report_results(0, 5) + results = tuple[:reporter].results + results.failures.size.should eq(tuple[:failures].size) end end end describe "#each_failure" do it "yields only failed results" do - fail "Test not implemented" + tuple = report_results(5, 5) + results = [] of Spectator::Expectations::Expectation::Result + tuple[:reporter].results.each_failure { |result| results << result } + # Results might not be in the same order. + # Just check if if the arrays contain the same items. + results.size.should eq(tuple[:failures].size) + (results - tuple[:failures]).empty?.should be_true end context "with all successful results" do it "yields nothing" do - fail "Test not implemented" + tuple = report_results(5, 0) + results = [] of Spectator::Expectations::Expectation::Result + tuple[:reporter].results.each_failure { |result| results << result } + results.empty?.should be_true end end - context "with one failure result" do - it "yields the one failed result" do - fail "Test not implemented" + context "with all failure results" do + it "yields all results" do + tuple = report_results(0, 5) + results = [] of Spectator::Expectations::Expectation::Result + tuple[:reporter].results.each_failure { |result| results << result } + results.size.should eq(tuple[:failures].size) end end end @@ -82,25 +140,33 @@ describe Spectator::Expectations::ExpectationResults do describe "#successful?" do context "with all successful results" do it "is true" do - fail "Test not implemented" + tuple = report_results(5, 0) + results = tuple[:reporter].results + results.successful?.should be_true end end context "with one failure result" do it "is false" do - fail "Test not implemented" + tuple = report_results(5, 1) + results = tuple[:reporter].results + results.successful?.should be_false end end context "with one successful result" do it "is false" do - fail "Test not implemented" + tuple = report_results(1, 5) + results = tuple[:reporter].results + results.successful?.should be_false end end context "with all failure results" do it "is false" do - fail "Test not implemented" + tuple = report_results(0, 5) + results = tuple[:reporter].results + results.successful?.should be_false end end end @@ -108,25 +174,33 @@ describe Spectator::Expectations::ExpectationResults do describe "#failed?" do context "with all successful results" do it "is false" do - fail "Test not implemented" + tuple = report_results(5, 0) + results = tuple[:reporter].results + results.failed?.should be_false end end context "with one failure result" do it "is true" do - fail "Test not implemented" + tuple = report_results(5, 1) + results = tuple[:reporter].results + results.failed?.should be_true end end context "with one successful result" do it "is true" do - fail "Test not implemented" + tuple = report_results(1, 5) + results = tuple[:reporter].results + results.failed?.should be_true end end context "with all failure results" do it "is true" do - fail "Test not implemented" + tuple = report_results(0, 5) + results = tuple[:reporter].results + results.failed?.should be_true end end end diff --git a/spec/expectations_helper.cr b/spec/expectations_helper.cr index 165172f..0cbe626 100644 --- a/spec/expectations_helper.cr +++ b/spec/expectations_helper.cr @@ -41,3 +41,14 @@ def new_failure_result result.successful?.should be_false # Sanity check. end end + +def report_results(success_count = 1, failure_count = 0) + successful = Array.new(success_count) { new_successful_result } + failures = Array.new(failure_count) { new_failure_result } + results = (successful + failures).shuffle + reporter = Spectator::Expectations::ExpectationReporter.new(false) + results.each do |result| + reporter.report(result) + end + {successful: successful, failures: failures, results: results, reporter: reporter} +end diff --git a/src/spectator/expectations/expectation_results.cr b/src/spectator/expectations/expectation_results.cr index 160aebd..17195d7 100644 --- a/src/spectator/expectations/expectation_results.cr +++ b/src/spectator/expectations/expectation_results.cr @@ -27,7 +27,7 @@ module Spectator::Expectations end # Returns a collection of only the failed expectation results. - def failures : Enumerables(Expectation::Result) + def failures : Enumerable(Expectation::Result) @results.select(&.failure?) end