/usr/lib/ruby/vendor_ruby/rspec/mocks/any_instance/chain.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 | module RSpec
module Mocks
# @private
module AnyInstance
# @private
class Chain
def initialize(recorder, *args, &block)
@recorder = recorder
@expectation_args = args
@expectation_block = block
@argument_list_matcher = ArgumentListMatcher::MATCH_ALL
end
# @private
#
# Provides convenience methods for recording customizations on message
# expectations.
module Customizations
# @macro [attach] record
# @method $1(*args, &block)
# Records the `$1` message for playback against an instance that
# invokes a method stubbed or mocked using `any_instance`.
#
# @see RSpec::Mocks::MessageExpectation#$1
#
def self.record(method_name)
define_method(method_name) do |*args, &block|
record(method_name, *args, &block)
end
end
record :and_return
record :and_raise
record :and_throw
record :and_yield
record :and_call_original
record :and_wrap_original
record :with
record :once
record :twice
record :thrice
record :exactly
record :times
record :never
record :at_least
record :at_most
end
include Customizations
# @private
def playback!(instance)
message_expectation = create_message_expectation_on(instance)
messages.inject(message_expectation) do |object, message|
object.__send__(*message.first, &message.last)
end
end
# @private
def constrained_to_any_of?(*constraints)
constraints.any? do |constraint|
messages.any? do |message|
message.first.first == constraint
end
end
end
# @private
def matches_args?(*args)
@argument_list_matcher.args_match?(*args)
end
# @private
def expectation_fulfilled!
@expectation_fulfilled = true
end
def never
AnyInstance.error_generator.raise_double_negation_error("expect_any_instance_of(MyClass)") if negated?
super
end
def with(*args, &block)
@argument_list_matcher = ArgumentListMatcher.new(*args)
super
end
private
def negated?
messages.any? { |(message, *_), _| message == :never }
end
def messages
@messages ||= []
end
def last_message
messages.last.first.first unless messages.empty?
end
def record(rspec_method_name, *args, &block)
verify_invocation_order(rspec_method_name, *args, &block)
messages << [args.unshift(rspec_method_name), block]
self
end
end
end
end
end
|