Methods
public class
public instance
protected instance
Attributes
| error_generator | [RW] | |
| expected_from | [W] | |
| expected_received_count | [W] | |
| method_block | [W] | |
| sym | [R] |
Public class methods
new
(error_generator, expectation_ordering, expected_from, sym, method_block, expected_received_count=1, opts={})
[show source]
# File lib/spec/mocks/message_expectation.rb, line 11 def initialize(error_generator, expectation_ordering, expected_from, sym, method_block, expected_received_count=1, opts={}) @error_generator = error_generator @error_generator.opts = opts @expected_from = expected_from @sym = sym @method_block = method_block @return_block = nil @actual_received_count = 0 @expected_received_count = expected_received_count @args_expectation = ArgumentExpectation.new([ArgumentMatchers::AnyArgsMatcher.new]) @consecutive = false @exception_to_raise = nil @symbol_to_throw = nil @order_group = expectation_ordering @at_least = nil @at_most = nil @args_to_yield = [] end
Public instance methods
and_raise()
and_raise(Exception) #any exception class
and_raise(exception) #any exception object
and_raise(Exception) #any exception class
and_raise(exception) #any exception object
Warning
When you pass an exception class, the MessageExpectation will raise an instance of it, creating it with new. If the exception class initializer requires any parameters, you must pass in an instance and not the class.
[show source]
# File lib/spec/mocks/message_expectation.rb, line 72 def and_raise(exception=Exception) @exception_to_raise = exception end
and_return
(*values, &return_block)
[show source]
# File lib/spec/mocks/message_expectation.rb, line 47 def and_return(*values, &return_block) Kernel::raise AmbiguousReturnError unless @method_block.nil? case values.size when 0 then value = nil when 1 then value = values[0] else value = values @consecutive = true @expected_received_count = values.size if !ignoring_args? && @expected_received_count < values.size end @return_block = block_given? ? return_block : lambda { value } end
and_throw
(symbol)
[show source]
# File lib/spec/mocks/message_expectation.rb, line 76 def and_throw(symbol) @symbol_to_throw = symbol end
and_yield
(*args)
[show source]
# File lib/spec/mocks/message_expectation.rb, line 80 def and_yield(*args) if @args_to_yield_were_cloned @args_to_yield.clear @args_to_yield_were_cloned = false end @args_to_yield << args self end
build_child
(expected_from, method_block, expected_received_count, opts={})
[show source]
# File lib/spec/mocks/message_expectation.rb, line 30 def build_child(expected_from, method_block, expected_received_count, opts={}) child = clone child.expected_from = expected_from child.method_block = method_block child.expected_received_count = expected_received_count child.clear_actual_received_count! new_gen = error_generator.clone new_gen.opts = opts child.error_generator = new_gen child.clone_args_to_yield @args_to_yield child end
called_max_times?
()
[show source]
# File lib/spec/mocks/message_expectation.rb, line 128 def called_max_times? @expected_received_count != :any && @expected_received_count > 0 && @actual_received_count >= @expected_received_count end
expected_args
()
[show source]
# File lib/spec/mocks/message_expectation.rb, line 43 def expected_args @args_expectation.args end
invoke
(args, block)
[show source]
# File lib/spec/mocks/message_expectation.rb, line 94 def invoke(args, block) if @expected_received_count == 0 @failed_fast = true @actual_received_count += 1 @error_generator.raise_expectation_error @sym, @expected_received_count, @actual_received_count, *args end @order_group.handle_order_constraint self begin Kernel::raise @exception_to_raise unless @exception_to_raise.nil? Kernel::throw @symbol_to_throw unless @symbol_to_throw.nil? if !@method_block.nil? default_return_val = invoke_method_block(args) elsif @args_to_yield.size > 0 default_return_val = invoke_with_yield(block) else default_return_val = nil end if @consecutive return invoke_consecutive_return_block(args, block) elsif @return_block return invoke_return_block(args, block) else return default_return_val end ensure @actual_received_count += 1 end end
matches
(sym, args)
[show source]
# File lib/spec/mocks/message_expectation.rb, line 90 def matches(sym, args) @sym == sym and @args_expectation.args_match?(args) end
Protected instance methods
clone_args_to_yield
(args)
[show source]
# File lib/spec/mocks/message_expectation.rb, line 171 def clone_args_to_yield(args) @args_to_yield = args.clone @args_to_yield_were_cloned = true end
failed_fast?
()
[show source]
# File lib/spec/mocks/message_expectation.rb, line 176 def failed_fast? @failed_fast end
invoke_consecutive_return_block
(args, block)
[show source]
# File lib/spec/mocks/message_expectation.rb, line 157 def invoke_consecutive_return_block(args, block) value = invoke_return_block(args, block) index = [@actual_received_count, value.size-1].min value[index] end
invoke_method_block
(args)
[show source]
# File lib/spec/mocks/message_expectation.rb, line 135 def invoke_method_block(args) begin @method_block.call(*args) rescue => detail @error_generator.raise_block_failed_error @sym, detail.message end end
invoke_return_block
(args, block)
[show source]
# File lib/spec/mocks/message_expectation.rb, line 163 def invoke_return_block(args, block) args << block unless block.nil? # Ruby 1.9 - when we set @return_block to return values # regardless of arguments, any arguments will result in # a "wrong number of arguments" error @return_block.arity > 0 ? @return_block.call(*args) : @return_block.call() end
invoke_with_yield
(block)
[show source]
# File lib/spec/mocks/message_expectation.rb, line 143 def invoke_with_yield(block) if block.nil? @error_generator.raise_missing_block_error @args_to_yield end value = nil @args_to_yield.each do |args_to_yield_this_time| if block.arity > -1 && args_to_yield_this_time.length != block.arity @error_generator.raise_wrong_arity_error args_to_yield_this_time, block.arity end value = block.call(*args_to_yield_this_time) end value end