/usr/lib/ruby/vendor_ruby/rspec/mocks/matchers/have_received.rb is in ruby-rspec-mocks 3.5.0c3e0m0s0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | module RSpec
module Mocks
module Matchers
# @private
class HaveReceived
include Matcher
COUNT_CONSTRAINTS = %w[exactly at_least at_most times once twice thrice]
ARGS_CONSTRAINTS = %w[with]
CONSTRAINTS = COUNT_CONSTRAINTS + ARGS_CONSTRAINTS + %w[ordered]
def initialize(method_name, &block)
@method_name = method_name
@block = block
@constraints = []
@subject = nil
end
def name
"have_received"
end
def matches?(subject, &block)
@block ||= block
@subject = subject
@expectation = expect
mock_proxy.ensure_implemented(@method_name)
expected_messages_received_in_order?
end
def does_not_match?(subject)
@subject = subject
ensure_count_unconstrained
@expectation = expect.never
mock_proxy.ensure_implemented(@method_name)
expected_messages_received_in_order?
end
def failure_message
capture_failure_message
end
def failure_message_when_negated
capture_failure_message
end
def description
(@expectation ||= expect).description_for("have received")
end
CONSTRAINTS.each do |expectation|
define_method expectation do |*args|
@constraints << [expectation, *args]
self
end
end
def setup_expectation(subject, &block)
notify_failure_message unless matches?(subject, &block)
end
def setup_negative_expectation(subject, &block)
notify_failure_message unless does_not_match?(subject, &block)
end
def setup_allowance(_subject, &_block)
disallow("allow", " as it would have no effect")
end
def setup_any_instance_allowance(_subject, &_block)
disallow("allow_any_instance_of")
end
def setup_any_instance_expectation(_subject, &_block)
disallow("expect_any_instance_of")
end
private
def disallow(type, reason="")
RSpec::Mocks.error_generator.raise_have_received_disallowed(type, reason)
end
def expect
expectation = mock_proxy.build_expectation(@method_name)
apply_constraints_to expectation
expectation
end
def apply_constraints_to(expectation)
@constraints.each do |constraint|
expectation.send(*constraint)
end
end
def ensure_count_unconstrained
return unless count_constraint
RSpec::Mocks.error_generator.raise_cant_constrain_count_for_negated_have_received_error(count_constraint)
end
def count_constraint
@constraints.map(&:first).find do |constraint|
COUNT_CONSTRAINTS.include?(constraint)
end
end
def capture_failure_message
RSpec::Support.with_failure_notifier(Proc.new { |err, _opt| return err.message }) do
notify_failure_message
end
end
def notify_failure_message
mock_proxy.check_for_unexpected_arguments(@expectation)
@expectation.generate_error
end
def expected_messages_received_in_order?
mock_proxy.replay_received_message_on @expectation, &@block
@expectation.expected_messages_received? && @expectation.ensure_expected_ordering_received!
end
def mock_proxy
RSpec::Mocks.space.proxy_for(@subject)
end
end
end
end
end
|