Class: Spec::Mocks::BaseExpectation

Class | Spec::Mocks::BaseExpectation
In: | lib/spec/mocks/message_expectation.rb
Parent: | Object

### Methods

and_raise and_return and_throw and_yield expected_args invoke invoke_consecutive_return_block invoke_method_block invoke_return_block invoke_with_yield matches new

### Attributes

sym | [R] |

### Public Class methods

new(error_generator, expectation_ordering, expected_from, sym, method_block, expected_received_count=1, opts={})

[Source]

        # File lib/spec/mocks/message_expectation.rb, line 7
     7:       def initialize(error_generator, expectation_ordering, expected_from, sym, method_block, expected_received_count=1, opts={})
     8:         @error_generator = error_generator
     9:         @error_generator.opts = opts
    10:         @expected_from = expected_from
    11:         @sym = sym
    12:         @method_block = method_block
    13:         @return_block = nil
    14:         @actual_received_count = 0
    15:         @expected_received_count = expected_received_count
    16:         @args_expectation = ArgumentExpectation.new([AnyArgsConstraint.new])
    17:         @consecutive = false
    18:         @exception_to_raise = nil
    19:         @symbol_to_throw = nil
    20:         @order_group = expectation_ordering
    21:         @at_least = nil
    22:         @at_most = nil
    23:         @args_to_yield = []
    24:       end

### Public Instance methods

and_raise()
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.

[Source]

        # File lib/spec/mocks/message_expectation.rb, line 57
    57:       def and_raise(exception=Exception)
    58:         @exception_to_raise = exception
    59:       end

and_return(*values, &return_block)

[Source]

        # File lib/spec/mocks/message_expectation.rb, line 30
    30:       def and_return(*values, &return_block)
    31:         Kernel::raise AmbiguousReturnError unless @method_block.nil?
    32:         case values.size
    33:           when 0 then value = nil
    34:           when 1 then value = values[0]
    35:         else
    36:           value = values
    37:           @consecutive = true
    38:           @expected_received_count = values.size if !ignoring_args? &&
    39:                                                     @expected_received_count < values.size
    40:         end
    41:         @return_block = block_given? ? return_block : lambda { value }
    42:         # Ruby 1.9 - see where this is used below
    43:         @ignore_args = !block_given?
    44:       end

and_throw(symbol)

[Source]

        # File lib/spec/mocks/message_expectation.rb, line 61
    61:       def and_throw(symbol)
    62:         @symbol_to_throw = symbol
    63:       end

and_yield(*args)

[Source]

        # File lib/spec/mocks/message_expectation.rb, line 65
    65:       def and_yield(*args)
    66:         @args_to_yield << args
    67:         self
    68:       end

expected_args()

[Source]

        # File lib/spec/mocks/message_expectation.rb, line 26
    26:       def expected_args
    27:         @args_expectation.args
    28:       end

invoke(args, block)

[Source]

        # File lib/spec/mocks/message_expectation.rb, line 74
    74:       def invoke(args, block)
    75:         @order_group.handle_order_constraint self
    76:
    77:         begin
    78:           Kernel::raise @exception_to_raise unless @exception_to_raise.nil?
    79:           Kernel::throw @symbol_to_throw unless @symbol_to_throw.nil?
    80:
    81:           if !@method_block.nil?
    82:             default_return_val = invoke_method_block(args)
    83:           elsif @args_to_yield.size > 0
    84:             default_return_val = invoke_with_yield(block)
    85:           else
    86:             default_return_val = nil
    87:           end
    88:
    89:           if @consecutive
    90:             return invoke_consecutive_return_block(args, block)
    91:           elsif @return_block
    92:             return invoke_return_block(args, block)
    93:           else
    94:             return default_return_val
    95:           end
    96:         ensure
    97:           @actual_received_count += 1
    98:         end
    99:       end

matches(sym, args)

[Source]

        # File lib/spec/mocks/message_expectation.rb, line 70
    70:       def matches(sym, args)
    71:         @sym == sym and @args_expectation.check_args(args)
    72:       end

### Protected Instance methods

invoke_consecutive_return_block(args, block)

[Source]

         # File lib/spec/mocks/message_expectation.rb, line 123
    123:       def invoke_consecutive_return_block(args, block)
    124:         args << block unless block.nil?
    125:         value = @return_block.call(*args)
    126:
    127:         index = [@actual_received_count, value.size-1].min
    128:         value[index]
    129:       end

invoke_method_block(args)

[Source]

         # File lib/spec/mocks/message_expectation.rb, line 103
    103:       def invoke_method_block(args)
    104:         begin
    105:           @method_block.call(*args)
    106:         rescue => detail
    107:           @error_generator.raise_block_failed_error @sym, detail.message
    108:         end
    109:       end

invoke_return_block(args, block)

[Source]

         # File lib/spec/mocks/message_expectation.rb, line 131
    131:       def invoke_return_block(args, block)
    132:         args << block unless block.nil?
    133:         # Ruby 1.9 - when we set @return_block to return values
    134:         # regardless of arguments, any arguments will result in
    135:         # a "wrong number of arguments" error
    136:         if @ignore_args
    137:           @return_block.call()
    138:         else
    139:           @return_block.call(*args)
    140:         end
    141:       end

invoke_with_yield(block)

[Source]

         # File lib/spec/mocks/message_expectation.rb, line 111
    111:       def invoke_with_yield(block)
    112:         if block.nil?
    113:           @error_generator.raise_missing_block_error @args_to_yield
    114:         end
    115:         @args_to_yield.each do |args_to_yield_this_time|
    116:           if block.arity > -1 && args_to_yield_this_time.length != block.arity
    117:             @error_generator.raise_wrong_arity_error args_to_yield_this_time, block.arity
    118:           end
    119:           block.call(*args_to_yield_this_time)
    120:         end
    121:       end

[Validate]