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
|
module RSpec
module Mocks
# @api private
class Space
attr_reader :proxies, :any_instance_recorders
def initialize
@proxies = {}
@any_instance_recorders = {}
end
def verify_all
proxies.each_value do |object|
object.verify
end
any_instance_recorders.each_value do |recorder|
recorder.verify
end
end
def reset_all
ConstantMutator.reset_all
proxies.each_value do |object|
object.reset
end
proxies.clear
any_instance_recorders.clear
expectation_ordering.clear
end
def expectation_ordering
@expectation_ordering ||= OrderGroup.new
end
def any_instance_recorder_for(klass)
id = klass.__id__
any_instance_recorders.fetch(id) do
any_instance_recorders[id] = AnyInstance::Recorder.new(klass)
end
end
def remove_any_instance_recorder_for(klass)
any_instance_recorders.delete(klass.__id__)
end
def proxies_of(klass)
proxies.values.select { |proxy| klass === proxy.object }
end
def proxy_for(object)
id = id_for(object)
proxies.fetch(id) do
proxies[id] = case object
when NilClass then ProxyForNil.new
when TestDouble then object.__build_mock_proxy
else
Proxy.new(object)
end
end
end
alias ensure_registered proxy_for
def registered?(object)
proxies.has_key?(id_for object)
end
if defined?(::BasicObject) && !::BasicObject.method_defined?(:__id__) # for 1.9.2
require 'securerandom'
def id_for(object)
id = object.__id__
return id if object.equal?(::ObjectSpace._id2ref(id))
# this suggests that object.__id__ is proxying through to some wrapped object
object.instance_eval do
@__id_for_rspec_mocks_space ||= ::SecureRandom.uuid
end
end
else
def id_for(object)
object.__id__
end
end
end
end
end
|