From df663d30d9c9b2f2f5f67c230854e9dc861a20f4 Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Sun, 3 Mar 2019 20:21:39 -0700 Subject: [PATCH] Update EmptyMatcher to use MatchData --- spec/matchers/empty_matcher_spec.cr | 94 ++++++++++++++++--------- src/spectator/matchers/empty_matcher.cr | 44 +++++++----- 2 files changed, 90 insertions(+), 48 deletions(-) diff --git a/spec/matchers/empty_matcher_spec.cr b/spec/matchers/empty_matcher_spec.cr index 9745766..2721380 100644 --- a/spec/matchers/empty_matcher_spec.cr +++ b/spec/matchers/empty_matcher_spec.cr @@ -1,43 +1,73 @@ require "../spec_helper" describe Spectator::Matchers::EmptyMatcher do - describe "#match?" do - context "with an empty set" do - it "is true" do - array = [] of Symbol - partial = new_partial(array) - matcher = Spectator::Matchers::EmptyMatcher.new - matcher.match?(partial).should be_true + describe "#match" do + context "returned MatchData" do + describe "#matched?" do + context "with an empty set" do + it "is true" do + array = [] of Symbol + partial = new_partial(array) + matcher = Spectator::Matchers::EmptyMatcher.new + match_data = matcher.match(partial) + match_data.matched?.should be_true + end + end + + context "with a filled set" do + it "is false" do + array = %i[a b c] + partial = new_partial(array) + matcher = Spectator::Matchers::EmptyMatcher.new + match_data = matcher.match(partial) + match_data.matched?.should be_false + end + end end - end - context "with a filled set" do - it "is false" do - array = %i[a b c] - partial = new_partial(array) - matcher = Spectator::Matchers::EmptyMatcher.new - matcher.match?(partial).should be_false + describe "#values" do + context "expected" do + it "is an empty set" do + array = %i[a b c] + partial = new_partial(array) + matcher = Spectator::Matchers::EmptyMatcher.new + match_data = matcher.match(partial) + match_data.values[:expected].size.should eq(0) + end + end + + context "actual" do + it "is the actual set" do + array = %i[a b c] + partial = new_partial(array) + matcher = Spectator::Matchers::EmptyMatcher.new + match_data = matcher.match(partial) + match_data.values[:actual].should eq(array) + end + end end - end - end - describe "#message" do - it "contains the actual label" do - array = %i[a b c] - label = "everything" - partial = new_partial(array, label) - matcher = Spectator::Matchers::EmptyMatcher.new - matcher.message(partial).should contain(label) - end - end + describe "#message" do + it "contains the actual label" do + array = %i[a b c] + label = "everything" + partial = new_partial(array, label) + matcher = Spectator::Matchers::EmptyMatcher.new + match_data = matcher.match(partial) + match_data.message.should contain(label) + end + end - describe "#negated_message" do - it "contains the actual label" do - array = %i[a b c] - label = "everything" - partial = new_partial(array, label) - matcher = Spectator::Matchers::EmptyMatcher.new - matcher.negated_message(partial).should contain(label) + describe "#negated_message" do + it "contains the actual label" do + array = %i[a b c] + label = "everything" + partial = new_partial(array, label) + matcher = Spectator::Matchers::EmptyMatcher.new + match_data = matcher.match(partial) + match_data.negated_message.should contain(label) + end + end end end end diff --git a/src/spectator/matchers/empty_matcher.cr b/src/spectator/matchers/empty_matcher.cr index 1f9db96..3a4df27 100644 --- a/src/spectator/matchers/empty_matcher.cr +++ b/src/spectator/matchers/empty_matcher.cr @@ -11,26 +11,38 @@ module Spectator::Matchers # Determines whether the matcher is satisfied with the partial given to it. # `MatchData` is returned that contains information about the match. - def match(partial) : MatchData - raise NotImplementedError.new("#match") + def match(partial) + actual = partial.actual + matched = actual.empty? + MatchData.new(matched, actual, partial.label) end - # Determines whether the matcher is satisfied with the value given to it. - # True is returned if the match was successful, false otherwise. - def match?(partial) - partial.actual.empty? - end + # Match data specific to this matcher. + private struct MatchData(T) < MatchData + # Creates the match data. + def initialize(matched, @actual : T, @actual_label : String) + super(matched) + end - # Describes the condition that satisfies the matcher. - # This is informational and displayed to the end-user. - def message(partial) - "Expected #{partial.label} to be empty" - end + # Information about the match. + def values + { + expected: [] of Nil, + actual: @actual, + } + end - # Describes the condition that won't satsify the matcher. - # This is informational and displayed to the end-user. - def negated_message(partial) - "Expected #{partial.label} to not be empty" + # Describes the condition that satisfies the matcher. + # This is informational and displayed to the end-user. + def message + "#{@actual_label} is empty" + end + + # Describes the condition that won't satsify the matcher. + # This is informational and displayed to the end-user. + def negated_message + "#{@actual_label} is not empty" + end end end end