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
|
require 'mocha/parameters_matcher'
require 'mocha/raised_exception'
require 'mocha/return_values'
require 'mocha/thrown_object'
require 'mocha/yield_parameters'
module Mocha
class Invocation
attr_reader :method_name, :block
def initialize(mock, method_name, arguments = [], block = nil)
@mock = mock
@method_name = method_name
@arguments = arguments
@block = block
@yields = []
@result = nil
end
def call(yield_parameters = YieldParameters.new, return_values = ReturnValues.new)
yield_parameters.next_invocation.each do |yield_args|
@yields << ParametersMatcher.new(yield_args)
raise LocalJumpError unless @block
@block.call(*yield_args)
end
return_values.next(self)
end
def returned(value)
@result = value
end
def raised(exception)
@result = RaisedException.new(exception)
end
def threw(tag, value)
@result = ThrownObject.new(tag, value)
end
def arguments
@arguments.dup
end
def call_description
description = "#{@mock.mocha_inspect}.#{@method_name}#{argument_description}"
description << ' { ... }' unless @block.nil?
description
end
def short_call_description
"#{@method_name}(#{@arguments.join(', ')})"
end
def result_description
desc = "# => #{@result.mocha_inspect}"
desc << " after yielding #{@yields.map(&:mocha_inspect).join(', then ')}" if @yields.any?
desc
end
def full_description
"\n - #{call_description} #{result_description}"
end
private
def argument_description
signature = arguments.mocha_inspect
signature = signature.gsub(/^\[|\]$/, '')
"(#{signature})"
end
end
end
|