From a63d3d05a53bba181f8cabfe526030869ab2afde Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Sun, 17 Nov 2019 10:32:37 -0700 Subject: [PATCH] Negation for receive matchers --- src/spectator/matchers/receive_matcher.cr | 15 +++++++++++++++ src/spectator/matchers/receive_type_matcher.cr | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/spectator/matchers/receive_matcher.cr b/src/spectator/matchers/receive_matcher.cr index bb5fb00..9a96f82 100644 --- a/src/spectator/matchers/receive_matcher.cr +++ b/src/spectator/matchers/receive_matcher.cr @@ -28,6 +28,11 @@ module Spectator::Matchers "#{actual.label} did not receive #{@expected.label} #{range ? "#{humanize_range(range)} time(s)" : "at least once"} with #{@args || "any arguments"}" end + def failure_message_when_negated(actual) : String + range = @range + "#{actual.label} received #{@expected.label} #{range ? "#{humanize_range(range)} time(s)" : "at least once"} with #{@args || "any arguments"}" + end + def values(actual : TestExpression(T)) forall T calls = Harness.current.mocks.calls_for(actual.value, @expected.value) calls.select! { |call| @args === call.args } if @args @@ -38,6 +43,16 @@ module Spectator::Matchers } end + def negated_values(actual : TestExpression(T)) forall T + calls = Harness.current.mocks.calls_for(actual.value, @expected.value) + calls.select! { |call| @args === call.args } if @args + range = @range + { + expected: "#{range ? "Not #{humanize_range(range)} time(s)" : "Never"} with #{@args || "any arguments"}", + received: "#{calls.size} time(s)", + } + end + def with(*args, **opts) args = Mocks::GenericArguments.new(args, opts) ReceiveMatcher.new(@expected, args, @range) diff --git a/src/spectator/matchers/receive_type_matcher.cr b/src/spectator/matchers/receive_type_matcher.cr index f317ea6..c716f05 100644 --- a/src/spectator/matchers/receive_type_matcher.cr +++ b/src/spectator/matchers/receive_type_matcher.cr @@ -28,6 +28,11 @@ module Spectator::Matchers "#{actual.label} did not receive #{@expected.label} #{range ? "#{humanize_range(range)} time(s)" : "at least once"} with #{@args || "any arguments"}" end + def failure_message_when_negated(actual : TestExpression(T)) : String forall T + range = @range + "#{actual.label} received #{@expected.label} #{range ? "#{humanize_range(range)} time(s)" : "at least once"} with #{@args || "any arguments"}" + end + def values(actual : TestExpression(T)) forall T calls = Harness.current.mocks.calls_for_type(T, @expected.value) calls.select! { |call| @args === call.args } if @args @@ -38,6 +43,16 @@ module Spectator::Matchers } end + def negated_values(actual : TestExpression(T)) forall T + calls = Harness.current.mocks.calls_for_type(T, @expected.value) + calls.select! { |call| @args === call.args } if @args + range = @range + { + expected: "#{range ? "Not #{humanize_range(range)} time(s)" : "Never"} with #{@args || "any arguments"}", + received: "#{calls.size} time(s)", + } + end + def with(*args, **opts) args = Mocks::GenericArguments.new(args, opts) ReceiveTypeMatcher.new(@expected, args, @range)