Parent

Class Index [+]

Quicksearch

Spec::Mocks::BaseExpectation

Attributes

sym[R]
expected_received_count[W]
method_block[W]
expected_from[W]
error_generator[RW]

Public Class Methods

new(error_generator, expectation_ordering, expected_from, sym, method_block, expected_received_count=1, opts={}, &implementation) click to toggle source
    # File lib/spec/mocks/message_expectation.rb, line 11
11:       def initialize(error_generator, expectation_ordering, expected_from, sym, method_block, expected_received_count=1, opts={}, &implementation)
12:         @error_generator = error_generator
13:         @error_generator.opts = opts
14:         @expected_from = expected_from
15:         @sym = sym
16:         @method_block = method_block
17:         @actual_received_count = 0
18:         @expected_received_count = expected_received_count
19:         @args_expectation = ArgumentExpectation.new([ArgumentMatchers::AnyArgsMatcher.new])
20:         @consecutive = false
21:         @exception_to_raise = nil
22:         @symbol_to_throw = nil
23:         @order_group = expectation_ordering
24:         @at_least = nil
25:         @at_most = nil
26:         @args_to_yield = []
27:         @failed_fast = nil
28:         @args_to_yield_were_cloned = false
29:         @return_block = implementation
30:         @eval_context = nil
31:       end

Public Instance Methods

and_raise() and_raise(Exception) #any exception class and_raise(exception) #any exception object click to toggle source

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.

    # File lib/spec/mocks/message_expectation.rb, line 75
75:       def and_raise(exception=Exception)
76:         @exception_to_raise = exception
77:       end
and_return(*values, &return_block) click to toggle source
    # File lib/spec/mocks/message_expectation.rb, line 50
50:       def and_return(*values, &return_block)
51:         Kernel::raise AmbiguousReturnError unless @method_block.nil?
52:         case values.size
53:           when 0 then value = nil
54:           when 1 then value = values[0]
55:         else
56:           value = values
57:           @consecutive = true
58:           @expected_received_count = values.size if !ignoring_args? &&
59:                                                     @expected_received_count < values.size
60:         end
61:         @return_block = block_given? ? return_block : lambda { value }
62:       end
and_throw(symbol) click to toggle source
    # File lib/spec/mocks/message_expectation.rb, line 79
79:       def and_throw(symbol)
80:         @symbol_to_throw = symbol
81:       end
and_yield(*args, &block) click to toggle source
    # File lib/spec/mocks/message_expectation.rb, line 83
83:       def and_yield(*args, &block)
84:         if @args_to_yield_were_cloned
85:           @args_to_yield.clear
86:           @args_to_yield_were_cloned = false
87:         end
88: 
89:         if block
90:           require 'spec/extensions/instance_exec'
91:           @eval_context = Object.new
92:           @eval_context.extend Spec::Matchers::InstanceExec
93:           yield @eval_context
94:         end
95:         @args_to_yield << args
96:         self
97:       end
build_child(expected_from, method_block, expected_received_count, opts={}) click to toggle source
    # File lib/spec/mocks/message_expectation.rb, line 33
33:       def build_child(expected_from, method_block, expected_received_count, opts={})
34:         child = clone
35:         child.expected_from = expected_from
36:         child.method_block = method_block
37:         child.expected_received_count = expected_received_count
38:         child.clear_actual_received_count!
39:         new_gen = error_generator.clone
40:         new_gen.opts = opts
41:         child.error_generator = new_gen
42:         child.clone_args_to_yield @args_to_yield
43:         child
44:       end
called_max_times?() click to toggle source
     # File lib/spec/mocks/message_expectation.rb, line 137
137:       def called_max_times?
138:         @expected_received_count != :any && @expected_received_count > 0 &&
139:           @actual_received_count >= @expected_received_count
140:       end
expected_args() click to toggle source
    # File lib/spec/mocks/message_expectation.rb, line 46
46:       def expected_args
47:         @args_expectation.args
48:       end
invoke(*args, &block) click to toggle source
     # File lib/spec/mocks/message_expectation.rb, line 103
103:       def invoke(*args, &block)
104:         if @expected_received_count == 0
105:           @failed_fast = true
106:           @actual_received_count += 1
107:           @error_generator.raise_expectation_error @sym, @expected_received_count, @actual_received_count, *args
108:         end
109: 
110:         @order_group.handle_order_constraint self
111: 
112:         begin
113:           Kernel::raise @exception_to_raise unless @exception_to_raise.nil?
114:           Kernel::throw @symbol_to_throw unless @symbol_to_throw.nil?
115: 
116: 
117:           if !@method_block.nil?
118:             default_return_val = invoke_method_block(*args)
119:           elsif @args_to_yield.size > 0 || @eval_context
120:             default_return_val = invoke_with_yield(&block)
121:           else
122:             default_return_val = nil
123:           end
124: 
125:           if @consecutive
126:             return invoke_consecutive_return_block(*args, &block)
127:           elsif @return_block
128:             return invoke_return_block(*args, &block)
129:           else
130:             return default_return_val
131:           end
132:         ensure
133:           @actual_received_count += 1
134:         end
135:       end
invoke_return_block(*args, &block) click to toggle source
     # File lib/spec/mocks/message_expectation.rb, line 142
142:       def invoke_return_block(*args, &block)
143:         args << block unless block.nil?
144:         # Ruby 1.9 - when we set @return_block to return values
145:         # regardless of arguments, any arguments will result in
146:         # a "wrong number of arguments" error
147:         @return_block.arity == 0 ? @return_block.call : @return_block.call(*args)
148:       end
matches(sym, args) click to toggle source
     # File lib/spec/mocks/message_expectation.rb, line 99
 99:       def matches(sym, args)
100:         @sym == sym and @args_expectation.args_match?(args)
101:       end

Protected Instance Methods

clone_args_to_yield(args) click to toggle source
     # File lib/spec/mocks/message_expectation.rb, line 188
188:       def clone_args_to_yield(args)
189:         @args_to_yield = args.clone
190:         @args_to_yield_were_cloned = true
191:       end
eval_block(*args, &block) click to toggle source
     # File lib/spec/mocks/message_expectation.rb, line 174
174:       def eval_block(*args, &block)
175:         if @eval_context
176:           @eval_context.instance_exec(*args, &block)
177:         else
178:           block.call(*args)
179:         end
180:       end
failed_fast?() click to toggle source
     # File lib/spec/mocks/message_expectation.rb, line 193
193:       def failed_fast?
194:         @failed_fast
195:       end
invoke_consecutive_return_block(*args, &block) click to toggle source
     # File lib/spec/mocks/message_expectation.rb, line 182
182:       def invoke_consecutive_return_block(*args, &block)
183:         value = invoke_return_block(*args, &block)
184:         index = [@actual_received_count, value.size-1].min
185:         value[index]
186:       end
invoke_method_block(*args) click to toggle source
     # File lib/spec/mocks/message_expectation.rb, line 152
152:       def invoke_method_block(*args)
153:         begin
154:           @method_block.call(*args)
155:         rescue => detail
156:           @error_generator.raise_block_failed_error @sym, detail.message
157:         end
158:       end
invoke_with_yield(&block) click to toggle source
     # File lib/spec/mocks/message_expectation.rb, line 160
160:       def invoke_with_yield(&block)
161:         if block.nil?
162:           @error_generator.raise_missing_block_error @args_to_yield
163:         end
164:         value = nil
165:         @args_to_yield.each do |args_to_yield_this_time|
166:           if block.arity > 1 && args_to_yield_this_time.length != block.arity
167:             @error_generator.raise_wrong_arity_error args_to_yield_this_time, block.arity
168:           end
169:           value = eval_block(*args_to_yield_this_time, &block)
170:         end
171:         value
172:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.