120: def self.verify_call(obj, sym, *args, &block)
121: compare = *args
122: if (behaves_like_ruby_1_9 = *[])
123: compare = compare.first if compare.length <= 1
124: end
125:
126: key = replaced_key obj, sym
127: [mocks, stubs].each do |proxies|
128: proxies[key].each do |proxy|
129: pass = case proxy.arguments
130: when :any_args
131: true
132: when :no_args
133: compare.nil?
134: else
135: proxy.arguments == compare
136: end
137:
138: if proxy.yielding?
139: if block
140: proxy.yielding.each do |args_to_yield|
141: if block.arity == -1 || block.arity == args_to_yield.size
142: block.call(*args_to_yield)
143: else
144: SpecExpectation.fail_with(
145: "Mock '#{name_or_inspect obj}' asked to yield " \
146: "|#{proxy.yielding.join(', ')}| on #{sym}\n",
147: "but a block with arity #{block.arity} was passed")
148: end
149: end
150: else
151: SpecExpectation.fail_with(
152: "Mock '#{name_or_inspect obj}' asked to yield " \
153: "|[#{proxy.yielding.join('], [')}]| on #{sym}\n",
154: "but no block was passed")
155: end
156: end
157:
158: if pass
159: proxy.called
160:
161: if proxy.raising?
162: raise proxy.raising
163: else
164: return proxy.returning
165: end
166: end
167: end
168: end
169:
170: if sym.to_sym == :respond_to?
171: mock_respond_to? obj, compare
172: else
173: SpecExpectation.fail_with("Mock '#{name_or_inspect obj}': method #{sym}\n",
174: "called with unexpected arguments (#{Array(compare).join(' ')})")
175: end
176: end