/usr/lib/ruby/vendor_ruby/rspec/mocks/targets.rb is in ruby-rspec-mocks 3.4.0c3e0m1s1-1ubuntu1.
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 | module RSpec
module Mocks
# @private
class TargetBase
def initialize(target)
@target = target
end
def self.delegate_to(matcher_method)
define_method(:to) do |matcher, &block|
unless matcher_allowed?(matcher)
raise_unsupported_matcher(:to, matcher)
end
define_matcher(matcher, matcher_method, &block)
end
end
def self.delegate_not_to(matcher_method, options={})
method_name = options.fetch(:from)
define_method(method_name) do |matcher, &block|
case matcher
when Matchers::Receive, Matchers::HaveReceived
define_matcher(matcher, matcher_method, &block)
when Matchers::ReceiveMessages, Matchers::ReceiveMessageChain
raise_negation_unsupported(method_name, matcher)
else
raise_unsupported_matcher(method_name, matcher)
end
end
end
def self.disallow_negation(method_name)
define_method(method_name) do |matcher, *_args|
raise_negation_unsupported(method_name, matcher)
end
end
private
def matcher_allowed?(matcher)
matcher.class.name.start_with?("RSpec::Mocks::Matchers".freeze)
end
def define_matcher(matcher, name, &block)
matcher.__send__(name, @target, &block)
end
def raise_unsupported_matcher(method_name, matcher)
raise UnsupportedMatcherError,
"only the `receive`, `have_received` and `receive_messages` matchers are supported " \
"with `#{expression}(...).#{method_name}`, but you have provided: #{matcher}"
end
def raise_negation_unsupported(method_name, matcher)
raise NegationUnsupportedError,
"`#{expression}(...).#{method_name} #{matcher.name}` is not supported since it " \
"doesn't really make sense. What would it even mean?"
end
def expression
self.class::EXPRESSION
end
end
# @private
class AllowanceTarget < TargetBase
EXPRESSION = :allow
delegate_to :setup_allowance
disallow_negation :not_to
disallow_negation :to_not
end
# @private
class ExpectationTarget < TargetBase
EXPRESSION = :expect
delegate_to :setup_expectation
delegate_not_to :setup_negative_expectation, :from => :not_to
delegate_not_to :setup_negative_expectation, :from => :to_not
end
# @private
class AnyInstanceAllowanceTarget < TargetBase
EXPRESSION = :allow_any_instance_of
delegate_to :setup_any_instance_allowance
disallow_negation :not_to
disallow_negation :to_not
end
# @private
class AnyInstanceExpectationTarget < TargetBase
EXPRESSION = :expect_any_instance_of
delegate_to :setup_any_instance_expectation
delegate_not_to :setup_any_instance_negative_expectation, :from => :not_to
delegate_not_to :setup_any_instance_negative_expectation, :from => :to_not
end
end
end
|