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

Methods

Attributes

sym  [R] 

Public Class methods

[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 = lambda {}
14:         @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 = nil
24:       end

Public Instance methods

[Source]

    # File lib/spec/mocks/message_expectation.rb, line 45
45:       def and_raise(exception=Exception)
46:         @exception_to_raise = exception
47:       end

[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:         if values.size == 0
33:           value = nil
34:         elsif values.size == 1
35:           value = values[0]
36:         else
37:           value = values
38:           @consecutive = true
39:           @expected_received_count = values.size if @expected_received_count != :any &&
40:                                                     @expected_received_count < values.size
41:         end
42:         @return_block = block_given? ? return_block : lambda { value }
43:       end

[Source]

    # File lib/spec/mocks/message_expectation.rb, line 49
49:       def and_throw(symbol)
50:         @symbol_to_throw = symbol
51:       end

[Source]

    # File lib/spec/mocks/message_expectation.rb, line 53
53:       def and_yield(*args)
54:         @args_to_yield = args
55:       end

[Source]

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

[Source]

    # File lib/spec/mocks/message_expectation.rb, line 61
61:       def invoke(args, block)
62:         @order_group.handle_order_constraint self
63: 
64:         begin
65:           if @exception_to_raise.class == Class
66:             @exception_instance_to_raise = @exception_to_raise.new
67:           else 
68:             @exception_instance_to_raise = @exception_to_raise
69:           end
70:           Kernel::raise @exception_to_raise unless @exception_to_raise.nil?
71:           Kernel::throw @symbol_to_throw unless @symbol_to_throw.nil?
72: 
73:           if !@method_block.nil?
74:             return invoke_method_block(args)
75:           elsif !@args_to_yield.nil?
76:             return invoke_with_yield(block)
77:           elsif @consecutive
78:             return invoke_consecutive_return_block(args, block)
79:           else
80:             return invoke_return_block(args, block)
81:           end
82:         ensure
83:           @received_count += 1
84:         end
85:       end

[Source]

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

Protected Instance methods

[Source]

     # File lib/spec/mocks/message_expectation.rb, line 107
107:       def invoke_consecutive_return_block(args, block)
108:         args << block unless block.nil?
109:         value = @return_block.call(*args)
110:         
111:         index = [@received_count, value.size-1].min
112:         value[index]
113:       end

[Source]

    # File lib/spec/mocks/message_expectation.rb, line 89
89:       def invoke_method_block(args)
90:         begin
91:           @method_block.call(*args)
92:         rescue => detail
93:           @error_generator.raise_block_failed_error @sym, detail.message
94:         end
95:       end

[Source]

     # File lib/spec/mocks/message_expectation.rb, line 115
115:       def invoke_return_block(args, block)
116:         args << block unless block.nil?
117:         value = @return_block.call(*args)
118:     
119:         value
120:       end

[Source]

     # File lib/spec/mocks/message_expectation.rb, line 97
 97:       def invoke_with_yield(block)
 98:         if block.nil?
 99:           @error_generator.raise_missing_block_error @args_to_yield
100:         end
101:         if block.arity > -1 && @args_to_yield.length != block.arity
102:           @error_generator.raise_wrong_arity_error @args_to_yield, block.arity
103:         end
104:         block.call(*@args_to_yield)
105:       end

[Validate]