rspec-mocks 2.8.0 → 2.9.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ README.markdown
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ License.txt
@@ -0,0 +1,7 @@
1
+ --exclude features
2
+ --no-private
3
+ --markup markdown
4
+ lib/**/*.rb
5
+ -
6
+ Changelog.md
7
+ License.txt
@@ -0,0 +1,147 @@
1
+ ### 2.9.0.rc2 / 2012-03-12
2
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.8.0...v2.9.0.rc2)
3
+
4
+ Enhancements
5
+
6
+ * Support order constraints across objects (preethiramdev)
7
+
8
+ Bug fixes
9
+
10
+ * Allow a `as_null_object` to be passed to `with`
11
+ * Pass proc to block passed to stub (Aubrey Rhodes)
12
+ * Initialize child message expectation args to match any args (#109 -
13
+ preethiramdev)
14
+
15
+ ### 2.8.0 / 2012-01-04
16
+
17
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.8.0.rc2...v2.8.0)
18
+
19
+ No changes for this release. Just releasing with the other rspec gems.
20
+
21
+ ### 2.8.0.rc2 / 2011-12-19
22
+
23
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.8.0.rc1...v2.8.0.rc2)
24
+
25
+ No changes for this release. Just releasing with the other rspec gems.
26
+
27
+ ### 2.8.0.rc1 / 2011-11-06
28
+
29
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.7.0...v2.8.0.rc1)
30
+
31
+ Enhancements
32
+
33
+ * Eliminate Ruby warnings (Matijs van Zuijlen)
34
+
35
+ ### 2.7.0 / 2011-10-16
36
+
37
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.6.0...v2.7.0)
38
+
39
+ Enhancements
40
+
41
+ * Use `__send__` rather than `send` (alextk)
42
+ * Add support for `any_instance.stub_chain` (Sidu Ponnappa)
43
+ * Add support for `any_instance` argument matching based on `with` (Sidu
44
+ Ponnappa and Andy Lindeman)
45
+
46
+ Changes
47
+
48
+ * Check for `failure_message_for_should` or `failure_message` instead of
49
+ `description` to detect a matcher (Tibor Claassen)
50
+
51
+ Bug fixes
52
+
53
+ * pass a hash to `any_instance.stub`. (Justin Ko)
54
+ * allow `to_ary` to be called without raising `NoMethodError` (Mikhail
55
+ Dieterle)
56
+ * `any_instance` properly restores private methods (Sidu Ponnappa)
57
+
58
+ ### 2.6.0 / 2011-05-12
59
+
60
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.5.0...v2.6.0)
61
+
62
+ Enhancements
63
+
64
+ * Add support for `any_instance.stub` and `any_instance.should_receive` (Sidu
65
+ Ponnappa and Andy Lindeman)
66
+
67
+ Bug fixes
68
+
69
+ * fix bug in which multiple chains with shared messages ending in hashes failed
70
+ to return the correct value
71
+
72
+ ### 2.5.0 / 2011-02-05
73
+
74
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.4.0...v2.5.0)
75
+
76
+ Bug fixes
77
+
78
+ * message expectation counts now work in combination with a stub (Damian
79
+ Nurzynski)
80
+ * fix failure message when message received with incorrect args (Josep M.
81
+ Bach)
82
+
83
+ ### 2.4.0 / 2011-01-02
84
+
85
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.3.0...v2.4.0)
86
+
87
+ No functional changes in this release, which was made to align with the
88
+ rspec-core-2.4.0 release.
89
+
90
+ ### 2.3.0 / 2010-12-12
91
+
92
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.2.0...v2.3.0)
93
+
94
+ Bug fixes
95
+
96
+ * Fix our Marshal extension so that it does not interfere with objects that
97
+ have their own `@mock_proxy` instance variable. (Myron Marston)
98
+
99
+ ### 2.2.0 / 2010-11-28
100
+
101
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.1.0...v2.2.0)
102
+
103
+ Enhancements
104
+
105
+ * Added "rspec/mocks/standalone" for exploring the rspec-mocks in irb.
106
+
107
+ Bug fix
108
+
109
+ * Eliminate warning on splat args without parens (Gioele Barabucci)
110
+ * Fix bug where `obj.should_receive(:foo).with(stub.as_null_object)` would pass
111
+ with a false positive.
112
+
113
+ ### 2.1.0 / 2010-11-07
114
+
115
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.0.1...v2.1.0)
116
+
117
+ Bug fixes
118
+
119
+ * Fix serialization of stubbed object (Josep M Bach)
120
+
121
+ ### 2.0.0 / 2010-10-10
122
+
123
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.0.0.beta.22...v2.0.0)
124
+
125
+ ### 2.0.0.rc / 2010-10-05
126
+
127
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.0.0.beta.22...v2.0.0.rc)
128
+
129
+ Enhancements
130
+
131
+ * support passing a block to an expectation block (Nicolas Braem)
132
+ * `obj.should_receive(:msg) {|&block| ... }`
133
+
134
+ Bug fixes
135
+
136
+ * Fix YAML serialization of stub (Myron Marston)
137
+ * Fix rdoc rake task (Hans de Graaff)
138
+
139
+ ### 2.0.0.beta.22 / 2010-09-12
140
+
141
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.0.0.beta.20...v2.0.0.beta.22)
142
+
143
+ Bug fixes
144
+
145
+ * fixed regression that broke `obj.stub_chain(:a, :b => :c)`
146
+ * fixed regression that broke `obj.stub_chain(:a, :b) { :c }`
147
+ * `respond_to?` always returns true when using `as_null_object`
@@ -27,7 +27,6 @@ Feature: as_null_object
27
27
  end
28
28
 
29
29
  it "supports Array#flatten" do
30
- null_object = double('foo')
31
30
  [null_object].flatten.should eq([null_object])
32
31
  end
33
32
  end
@@ -1,4 +1,4 @@
1
1
  Then /^the example(?:s)? should(?: all)? pass$/ do
2
- Then %q{the output should contain "0 failures"}
3
- Then %q{the exit status should be 0}
2
+ step %q{the output should contain "0 failures"}
3
+ step %q{the exit status should be 0}
4
4
  end
@@ -3,13 +3,13 @@ module RSpec
3
3
  # @api private
4
4
  class ArgumentExpectation
5
5
  attr_reader :args
6
-
6
+
7
7
  def initialize(*args, &block)
8
8
  @args = args
9
9
  @block = args.empty? ? block : nil
10
10
  @match_any_args = false
11
11
  @matchers = nil
12
-
12
+
13
13
  case args.first
14
14
  when ArgumentMatchers::AnyArgsMatcher
15
15
  @match_any_args = true
@@ -19,34 +19,31 @@ module RSpec
19
19
  @matchers = args.collect {|arg| matcher_for(arg)}
20
20
  end
21
21
  end
22
-
22
+
23
23
  def matcher_for(arg)
24
24
  return ArgumentMatchers::MatcherMatcher.new(arg) if is_matcher?(arg)
25
25
  return ArgumentMatchers::RegexpMatcher.new(arg) if arg.is_a?(Regexp)
26
26
  return ArgumentMatchers::EqualityProxy.new(arg)
27
27
  end
28
-
28
+
29
29
  def is_matcher?(obj)
30
- !null_object?(obj) & obj.respond_to?(:matches?) & [:failure_message_for_should, :failure_message].any? { |m| obj.respond_to?(m) }
30
+ !obj.null_object? & obj.respond_to?(:matches?) & [:failure_message_for_should, :failure_message].any? { |m| obj.respond_to?(m) }
31
31
  end
32
32
 
33
33
  def args_match?(*args)
34
34
  match_any_args? || block_passes?(*args) || matchers_match?(*args)
35
35
  end
36
-
36
+
37
37
  private
38
- def null_object?(obj)
39
- obj.respond_to?(:__rspec_double_acting_as_null_object?) && obj.__rspec_double_acting_as_null_object?
40
- end
41
-
38
+
42
39
  def block_passes?(*args)
43
40
  @block.call(*args) if @block
44
41
  end
45
-
42
+
46
43
  def matchers_match?(*args)
47
44
  @matchers == args
48
45
  end
49
-
46
+
50
47
  def match_any_args?
51
48
  @match_any_args
52
49
  end
@@ -87,7 +87,7 @@ module RSpec
87
87
  end
88
88
 
89
89
  def ==(value)
90
- @methods_to_respond_to.all? {|sym| value.respond_to?(sym)}
90
+ @methods_to_respond_to.all? {|message| value.respond_to?(message)}
91
91
  end
92
92
  end
93
93
 
@@ -16,37 +16,37 @@ module RSpec
16
16
  end
17
17
 
18
18
  # @private
19
- def raise_unexpected_message_error(sym, *args)
20
- __raise "#{intro} received unexpected message :#{sym}#{arg_message(*args)}"
19
+ def raise_unexpected_message_error(message, *args)
20
+ __raise "#{intro} received unexpected message :#{message}#{arg_message(*args)}"
21
21
  end
22
22
 
23
23
  # @private
24
24
  def raise_unexpected_message_args_error(expectation, *args)
25
25
  expected_args = format_args(*expectation.expected_args)
26
26
  actual_args = format_args(*args)
27
- __raise "#{intro} received #{expectation.sym.inspect} with unexpected arguments\n expected: #{expected_args}\n got: #{actual_args}"
27
+ __raise "#{intro} received #{expectation.message.inspect} with unexpected arguments\n expected: #{expected_args}\n got: #{actual_args}"
28
28
  end
29
29
 
30
30
  # @private
31
31
  def raise_similar_message_args_error(expectation, *args)
32
32
  expected_args = format_args(*expectation.expected_args)
33
33
  actual_args = args.collect {|a| format_args(*a)}.join(", ")
34
- __raise "#{intro} received #{expectation.sym.inspect} with unexpected arguments\n expected: #{expected_args}\n got: #{actual_args}"
34
+ __raise "#{intro} received #{expectation.message.inspect} with unexpected arguments\n expected: #{expected_args}\n got: #{actual_args}"
35
35
  end
36
36
 
37
37
  # @private
38
- def raise_expectation_error(sym, expected_received_count, actual_received_count, *args)
39
- __raise "(#{intro}).#{sym}#{format_args(*args)}\n expected: #{count_message(expected_received_count)}\n received: #{count_message(actual_received_count)}"
38
+ def raise_expectation_error(message, expected_received_count, actual_received_count, *args)
39
+ __raise "(#{intro}).#{message}#{format_args(*args)}\n expected: #{count_message(expected_received_count)}\n received: #{count_message(actual_received_count)}"
40
40
  end
41
41
 
42
42
  # @private
43
- def raise_out_of_order_error(sym)
44
- __raise "#{intro} received :#{sym} out of order"
43
+ def raise_out_of_order_error(message)
44
+ __raise "#{intro} received :#{message} out of order"
45
45
  end
46
46
 
47
47
  # @private
48
- def raise_block_failed_error(sym, detail)
49
- __raise "#{intro} received :#{sym} but passed block failed with: #{detail}"
48
+ def raise_block_failed_error(message, detail)
49
+ __raise "#{intro} received :#{message} but passed block failed with: #{detail}"
50
50
  end
51
51
 
52
52
  # @private
@@ -12,7 +12,7 @@ if defined?(Psych) && Psych.respond_to?(:dump)
12
12
  begin
13
13
  dump_without_mocks(object, *args)
14
14
  ensure
15
- object.instance_variable_set(:@mock_proxy,mp)
15
+ object.instance_variable_set(:@mock_proxy, mp)
16
16
  end
17
17
  end
18
18
 
@@ -3,23 +3,23 @@ module RSpec
3
3
 
4
4
  class MessageExpectation
5
5
  # @private
6
- attr_reader :sym
7
- attr_writer :expected_received_count, :method_block, :expected_from
6
+ attr_reader :message
7
+ attr_writer :expected_received_count, :method_block, :expected_from, :argument_expectation
8
8
  protected :expected_received_count=, :method_block=, :expected_from=
9
9
  attr_accessor :error_generator
10
10
  protected :error_generator, :error_generator=
11
11
 
12
12
  # @private
13
- def initialize(error_generator, expectation_ordering, expected_from, sym, method_block, expected_received_count=1, opts={}, &implementation)
13
+ def initialize(error_generator, expectation_ordering, expected_from, message, method_block, expected_received_count=1, opts={}, &implementation)
14
14
  @error_generator = error_generator
15
15
  @error_generator.opts = opts
16
16
  @expected_from = expected_from
17
- @sym = sym
17
+ @message = message
18
18
  @method_block = method_block
19
19
  @return_block = nil
20
20
  @actual_received_count = 0
21
21
  @expected_received_count = expected_received_count
22
- @args_expectation = ArgumentExpectation.new(ArgumentMatchers::AnyArgsMatcher.new)
22
+ @argument_expectation = ArgumentExpectation.new(ArgumentMatchers::AnyArgsMatcher.new)
23
23
  @consecutive = false
24
24
  @exception_to_raise = nil
25
25
  @args_to_throw = []
@@ -45,12 +45,13 @@ module RSpec
45
45
  new_gen.opts = opts
46
46
  child.error_generator = new_gen
47
47
  child.clone_args_to_yield(*@args_to_yield)
48
+ child.argument_expectation = ArgumentExpectation.new(ArgumentMatchers::AnyArgsMatcher.new)
48
49
  child
49
50
  end
50
51
 
51
52
  # @private
52
53
  def expected_args
53
- @args_expectation.args
54
+ @argument_expectation.args
54
55
  end
55
56
 
56
57
  # @overload and_return(value)
@@ -163,8 +164,8 @@ module RSpec
163
164
  end
164
165
 
165
166
  # @private
166
- def matches?(sym, *args)
167
- @sym == sym and @args_expectation.args_match?(*args)
167
+ def matches?(message, *args)
168
+ @message == message and @argument_expectation.args_match?(*args)
168
169
  end
169
170
 
170
171
  # @private
@@ -172,13 +173,20 @@ module RSpec
172
173
  if @expected_received_count == 0
173
174
  @failed_fast = true
174
175
  @actual_received_count += 1
175
- @error_generator.raise_expectation_error(@sym, @expected_received_count, @actual_received_count, *args)
176
+ @error_generator.raise_expectation_error(@message, @expected_received_count, @actual_received_count, *args)
176
177
  end
177
178
 
178
179
  @order_group.handle_order_constraint self
179
180
 
180
181
  begin
181
- Kernel::raise(@exception_to_raise) unless @exception_to_raise.nil?
182
+ begin
183
+ raise(@exception_to_raise) unless @exception_to_raise.nil?
184
+ rescue ArgumentError => e
185
+ raise e.exception(<<-MESSAGE)
186
+ 'and_raise' can only accept an Exception class if an instance can be constructed with no arguments.
187
+ #{@exception_to_raise.to_s}'s initialize method requires #{@exception_to_raise.instance_method(:initialize).arity} arguments, so you have to supply an instance instead.
188
+ MESSAGE
189
+ end
182
190
  Kernel::throw(*@args_to_throw) unless @args_to_throw.empty?
183
191
 
184
192
  default_return_val = if !@method_block.nil?
@@ -208,8 +216,8 @@ module RSpec
208
216
  end
209
217
 
210
218
  # @private
211
- def matches_name_but_not_args(sym, *args)
212
- @sym == sym and not @args_expectation.args_match?(*args)
219
+ def matches_name_but_not_args(message, *args)
220
+ @message == message and not @argument_expectation.args_match?(*args)
213
221
  end
214
222
 
215
223
  # @private
@@ -258,12 +266,16 @@ module RSpec
258
266
  # @private
259
267
  def generate_error
260
268
  if similar_messages.empty?
261
- @error_generator.raise_expectation_error(@sym, @expected_received_count, @actual_received_count, *@args_expectation.args)
269
+ @error_generator.raise_expectation_error(@message, @expected_received_count, @actual_received_count, *@argument_expectation.args)
262
270
  else
263
271
  @error_generator.raise_similar_message_args_error(self, *@similar_messages)
264
272
  end
265
273
  end
266
274
 
275
+ def raise_out_of_order_error
276
+ @error_generator.raise_out_of_order_error @message
277
+ end
278
+
267
279
  # Constrains a stub or message expectation to invocations with specific
268
280
  # arguments.
269
281
  #
@@ -290,7 +302,7 @@ module RSpec
290
302
  # # => passes
291
303
  def with(*args, &block)
292
304
  @return_block = block if block_given? unless args.empty?
293
- @args_expectation = ArgumentExpectation.new(*args, &block)
305
+ @argument_expectation = ArgumentExpectation.new(*args, &block)
294
306
  self
295
307
  end
296
308
 
@@ -397,7 +409,7 @@ module RSpec
397
409
  end
398
410
 
399
411
  # @private
400
- def negative_expectation_for?(sym)
412
+ def negative_expectation_for?(message)
401
413
  return false
402
414
  end
403
415
 
@@ -417,7 +429,7 @@ module RSpec
417
429
  begin
418
430
  @method_block.call(*args, &block)
419
431
  rescue => detail
420
- @error_generator.raise_block_failed_error(@sym, detail.message)
432
+ @error_generator.raise_block_failed_error(@message, detail.message)
421
433
  end
422
434
  end
423
435
 
@@ -450,11 +462,7 @@ module RSpec
450
462
  end
451
463
 
452
464
  def invoke_return_block(*args, &block)
453
- args << block unless block.nil?
454
- # Ruby 1.9 - when we set @return_block to return values
455
- # regardless of arguments, any arguments will result in
456
- # a "wrong number of arguments" error
457
- @return_block.arity == 0 ? @return_block.call : @return_block.call(*args)
465
+ @return_block.arity == 0 ? @return_block.call(&block) : @return_block.call(*args, &block)
458
466
  end
459
467
 
460
468
  def clone_args_to_yield(*args)
@@ -468,15 +476,12 @@ module RSpec
468
476
 
469
477
  def set_expected_received_count(relativity, n)
470
478
  @at_least = (relativity == :at_least)
471
- @at_most = (relativity == :at_most)
472
- @exactly = (relativity == :exactly)
479
+ @at_most = (relativity == :at_most)
480
+ @exactly = (relativity == :exactly)
473
481
  @expected_received_count = case n
474
- when Numeric
475
- n
476
- when :once
477
- 1
478
- when :twice
479
- 2
482
+ when Numeric then n
483
+ when :once then 1
484
+ when :twice then 2
480
485
  end
481
486
  end
482
487
 
@@ -488,13 +493,13 @@ module RSpec
488
493
  # @private
489
494
  class NegativeMessageExpectation < MessageExpectation
490
495
  # @private
491
- def initialize(message, expectation_ordering, expected_from, sym, method_block)
492
- super(message, expectation_ordering, expected_from, sym, method_block, 0)
496
+ def initialize(error_generator, expectation_ordering, expected_from, message, method_block)
497
+ super(error_generator, expectation_ordering, expected_from, message, method_block, 0)
493
498
  end
494
499
 
495
500
  # @private
496
- def negative_expectation_for?(sym)
497
- return @sym == sym
501
+ def negative_expectation_for?(message)
502
+ return @message == message
498
503
  end
499
504
  end
500
505
  end
@@ -97,17 +97,18 @@ module RSpec
97
97
  # are declared, they'll work as expected. If not, the receiver is
98
98
  # returned.
99
99
  def as_null_object
100
+ @_null_object = true
100
101
  __mock_proxy.as_null_object
101
102
  end
102
103
 
103
104
  # Returns true if this object has received `as_null_object`
104
105
  def null_object?
105
- __mock_proxy.null_object?
106
+ defined?(@_null_object)
106
107
  end
107
108
 
108
109
  # @private
109
- def received_message?(sym, *args, &block)
110
- __mock_proxy.received_message?(sym.to_sym, *args, &block)
110
+ def received_message?(message, *args, &block)
111
+ __mock_proxy.received_message?(message, *args, &block)
111
112
  end
112
113
 
113
114
  # @private
@@ -37,19 +37,19 @@ module RSpec
37
37
  alias_method :to_str, :to_s
38
38
 
39
39
  # @private
40
- def respond_to?(sym, incl_private=false)
41
- __mock_proxy.null_object? && sym != :to_ary ? true : super
40
+ def respond_to?(message, incl_private=false)
41
+ __mock_proxy.null_object? && message != :to_ary ? true : super
42
42
  end
43
43
 
44
44
  private
45
45
 
46
- def method_missing(sym, *args, &block)
47
- raise NoMethodError if sym == :to_ary
48
- __mock_proxy.record_message_received(sym, *args, &block)
46
+ def method_missing(message, *args, &block)
47
+ raise NoMethodError if message == :to_ary
48
+ __mock_proxy.record_message_received(message, *args, &block)
49
49
  begin
50
50
  __mock_proxy.null_object? ? self : super
51
51
  rescue NameError
52
- __mock_proxy.raise_unexpected_message_error(sym, *args)
52
+ __mock_proxy.raise_unexpected_message_error(message, *args)
53
53
  end
54
54
  end
55
55
 
@@ -2,8 +2,7 @@ module RSpec
2
2
  module Mocks
3
3
  # @private
4
4
  class OrderGroup
5
- def initialize error_generator
6
- @error_generator = error_generator
5
+ def initialize
7
6
  @ordering = Array.new
8
7
  end
9
8
 
@@ -14,7 +13,7 @@ module RSpec
14
13
 
15
14
  # @private
16
15
  def ready_for?(expectation)
17
- return @ordering.first == expectation
16
+ @ordering.first == expectation
18
17
  end
19
18
 
20
19
  # @private
@@ -23,10 +22,18 @@ module RSpec
23
22
  end
24
23
 
25
24
  # @private
26
- def handle_order_constraint expectation
27
- return unless @ordering.include? expectation
25
+ def handle_order_constraint(expectation)
26
+ return unless @ordering.include?(expectation)
28
27
  return consume if ready_for?(expectation)
29
- @error_generator.raise_out_of_order_error expectation.sym
28
+ expectation.raise_out_of_order_error
29
+ end
30
+
31
+ def clear
32
+ @ordering.clear
33
+ end
34
+
35
+ def empty?
36
+ @ordering.empty?
30
37
  end
31
38
  end
32
39
  end
@@ -33,8 +33,8 @@ module RSpec
33
33
  @object = object
34
34
  @name = name
35
35
  @error_generator = ErrorGenerator.new object, name, options
36
- @expectation_ordering = OrderGroup.new @error_generator
37
- @messages_received = []
36
+ @expectation_ordering = RSpec::Mocks::space.expectation_ordering
37
+ @messages_received = []
38
38
  @options = options
39
39
  @already_proxied_respond_to = false
40
40
  @null_object = false
@@ -101,38 +101,38 @@ module RSpec
101
101
  end
102
102
 
103
103
  # @private
104
- def has_negative_expectation?(method_name)
105
- method_double[method_name].expectations.detect {|expectation| expectation.negative_expectation_for?(method_name)}
104
+ def has_negative_expectation?(message)
105
+ method_double[message].expectations.detect {|expectation| expectation.negative_expectation_for?(message)}
106
106
  end
107
107
 
108
108
  # @private
109
- def record_message_received(method_name, *args, &block)
110
- @messages_received << [method_name, args, block]
109
+ def record_message_received(message, *args, &block)
110
+ @messages_received << [message, args, block]
111
111
  end
112
112
 
113
113
  # @private
114
- def message_received(method_name, *args, &block)
115
- expectation = find_matching_expectation(method_name, *args)
116
- stub = find_matching_method_stub(method_name, *args)
114
+ def message_received(message, *args, &block)
115
+ expectation = find_matching_expectation(message, *args)
116
+ stub = find_matching_method_stub(message, *args)
117
117
 
118
118
  if (stub && expectation && expectation.called_max_times?) || (stub && !expectation)
119
119
  expectation.increase_actual_received_count! if expectation && expectation.actual_received_count_matters?
120
- if expectation = find_almost_matching_expectation(method_name, *args)
120
+ if expectation = find_almost_matching_expectation(message, *args)
121
121
  expectation.advise(*args) unless expectation.expected_messages_received?
122
122
  end
123
123
  stub.invoke(*args, &block)
124
124
  elsif expectation
125
125
  expectation.invoke(*args, &block)
126
- elsif expectation = find_almost_matching_expectation(method_name, *args)
126
+ elsif expectation = find_almost_matching_expectation(message, *args)
127
127
  expectation.advise(*args) if null_object? unless expectation.expected_messages_received?
128
- raise_unexpected_message_args_error(expectation, *args) unless (has_negative_expectation?(method_name) or null_object?)
129
- elsif stub = find_almost_matching_stub(method_name, *args)
128
+ raise_unexpected_message_args_error(expectation, *args) unless (has_negative_expectation?(message) or null_object?)
129
+ elsif stub = find_almost_matching_stub(message, *args)
130
130
  stub.advise(*args)
131
131
  raise_unexpected_message_args_error(stub, *args)
132
132
  elsif @object.is_a?(Class)
133
- @object.superclass.__send__(method_name, *args, &block)
133
+ @object.superclass.__send__(message, *args, &block)
134
134
  else
135
- @object.__send__(:method_missing, method_name, *args, &block)
135
+ @object.__send__(:method_missing, message, *args, &block)
136
136
  end
137
137
  end
138
138
 
@@ -8,6 +8,8 @@ module RSpec
8
8
  # @private
9
9
  def self.fix_for(object)
10
10
  object.extend(YAML) if defined?(::YAML)
11
+ rescue TypeError
12
+ # Can't extend Fixnums, Symbols, true, false, or nil
11
13
  end
12
14
 
13
15
  # @private
@@ -3,26 +3,31 @@ module RSpec
3
3
  # @api private
4
4
  class Space
5
5
  def add(obj)
6
- mocks << obj unless mocks.detect {|m| m.equal? obj}
6
+ receivers << obj unless receivers.detect {|m| m.equal? obj}
7
7
  end
8
8
 
9
9
  def verify_all
10
- mocks.each do |mock|
10
+ receivers.each do |mock|
11
11
  mock.rspec_verify
12
12
  end
13
13
  end
14
14
 
15
15
  def reset_all
16
- mocks.each do |mock|
16
+ receivers.each do |mock|
17
17
  mock.rspec_reset
18
18
  end
19
- mocks.clear
19
+ receivers.clear
20
+ expectation_ordering.clear
20
21
  end
21
-
22
+
23
+ def expectation_ordering
24
+ @expectation_ordering ||= OrderGroup.new
25
+ end
26
+
22
27
  private
23
28
 
24
- def mocks
25
- @mocks ||= []
29
+ def receivers
30
+ @receivers ||= []
26
31
  end
27
32
  end
28
33
  end
@@ -1,7 +1,7 @@
1
1
  module RSpec
2
2
  module Mocks
3
3
  module Version
4
- STRING = '2.8.0'
4
+ STRING = '2.9.0.rc2'
5
5
  end
6
6
  end
7
7
  end
@@ -769,14 +769,14 @@ module RSpec
769
769
 
770
770
  it "adds an class to the current space when #any_instance is invoked" do
771
771
  klass.any_instance
772
- RSpec::Mocks::space.send(:mocks).should include(klass)
772
+ RSpec::Mocks::space.send(:receivers).should include(klass)
773
773
  end
774
774
 
775
775
  it "adds an instance to the current space when stubbed method is invoked" do
776
776
  klass.any_instance.stub(:foo)
777
777
  instance = klass.new
778
778
  instance.foo
779
- RSpec::Mocks::space.send(:mocks).should include(instance)
779
+ RSpec::Mocks::space.send(:receivers).should include(instance)
780
780
  end
781
781
  end
782
782
 
@@ -3,20 +3,18 @@ require 'spec_helper'
3
3
  module RSpec
4
4
  module Mocks
5
5
  describe ArgumentExpectation do
6
-
6
+
7
7
  it "considers an object that responds to #matches? and #failure_message_for_should to be a matcher" do
8
8
  argument_expecatation = RSpec::Mocks::ArgumentExpectation.new
9
9
  obj = double("matcher")
10
- obj.stub(:respond_to?).with(:__rspec_double_acting_as_null_object?).and_return(false)
11
10
  obj.stub(:respond_to?).with(:matches?).and_return(true)
12
11
  obj.stub(:respond_to?).with(:failure_message_for_should).and_return(true)
13
12
  argument_expecatation.is_matcher?(obj).should be_true
14
13
  end
15
-
14
+
16
15
  it "considers an object that responds to #matches? and #failure_message to be a matcher for backward compatibility" do
17
16
  argument_expecatation = RSpec::Mocks::ArgumentExpectation.new
18
17
  obj = double("matcher")
19
- obj.stub(:respond_to?).with(:__rspec_double_acting_as_null_object?).and_return(false)
20
18
  obj.stub(:respond_to?).with(:matches?).and_return(true)
21
19
  obj.stub(:respond_to?).with(:failure_message_for_should).and_return(false)
22
20
  obj.stub(:respond_to?).with(:failure_message).and_return(true)
@@ -26,7 +24,6 @@ module RSpec
26
24
  it "does NOT consider an object that only responds to #matches? to be a matcher" do
27
25
  argument_expecatation = RSpec::Mocks::ArgumentExpectation.new
28
26
  obj = double("matcher")
29
- obj.stub(:respond_to?).with(:__rspec_double_acting_as_null_object?).and_return(false)
30
27
  obj.stub(:respond_to?).with(:matches?).and_return(true)
31
28
  obj.stub(:respond_to?).with(:failure_message_for_should).and_return(false)
32
29
  obj.stub(:respond_to?).with(:failure_message).and_return(false)
@@ -1,11 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  class LiarLiarPantsOnFire
4
- def respond_to?(sym, incl_private=false)
4
+ def respond_to?(message, incl_private=false)
5
5
  true
6
6
  end
7
7
 
8
- def self.respond_to?(sym, incl_private=false)
8
+ def self.respond_to?(message, incl_private=false)
9
9
  true
10
10
  end
11
11
  end
@@ -1,16 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "An object where respond_to? is true and does not have method" do
4
- # When should_receive(:sym) is sent to any object, the Proxy sends
5
- # respond_to?(:sym) to that object to see if the method should be proxied.
4
+ # When should_receive(message) is sent to any object, the Proxy sends
5
+ # respond_to?(message) to that object to see if the method should be proxied.
6
6
  #
7
7
  # If respond_to? itself is proxied, then when the Proxy sends respond_to?
8
8
  # to the object, the proxy is invoked and responds yes (if so set in the spec).
9
- # When the object does NOT actually respond to :sym, an exception is thrown
9
+ # When the object does NOT actually respond to `message`, an exception is thrown
10
10
  # when trying to proxy it.
11
11
  #
12
- # The fix was to keep track of whether :respond_to? had been proxied and, if
13
- # so, call the munged copy of :respond_to? on the object.
12
+ # The fix was to keep track of whether `respond_to?` had been proxied and, if
13
+ # so, call the munged copy of `respond_to?` on the object.
14
14
 
15
15
  it "does not raise an exception for Object" do
16
16
  obj = Object.new
@@ -4,34 +4,30 @@ module RSpec
4
4
  module Mocks
5
5
 
6
6
  describe "ordering" do
7
+ before { @double = double("test double") }
8
+ after { @double.rspec_reset }
7
9
 
8
- before do
9
- @double = double("test double")
10
- end
11
-
12
- after do
13
- @double.rspec_reset
14
- end
15
-
16
- it "passes two calls in order" do
17
- @double.should_receive(:one).ordered
18
- @double.should_receive(:two).ordered
19
- @double.one
20
- @double.two
21
- @double.rspec_verify
22
- end
23
-
24
- it "passes three calls in order" do
10
+ it "passes when messages are received in order" do
25
11
  @double.should_receive(:one).ordered
26
12
  @double.should_receive(:two).ordered
27
13
  @double.should_receive(:three).ordered
28
14
  @double.one
29
15
  @double.two
30
16
  @double.three
31
- @double.rspec_verify
32
17
  end
33
18
 
34
- it "fails if second call comes first" do
19
+ it "passes when messages are received in order across objects" do
20
+ a = double("a")
21
+ b = double("b")
22
+ a.should_receive(:one).ordered
23
+ b.should_receive(:two).ordered
24
+ a.should_receive(:three).ordered
25
+ a.one
26
+ b.two
27
+ a.three
28
+ end
29
+
30
+ it "fails when messages are received out of order (2nd message 1st)" do
35
31
  @double.should_receive(:one).ordered
36
32
  @double.should_receive(:two).ordered
37
33
  lambda do
@@ -39,7 +35,7 @@ module RSpec
39
35
  end.should raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :two out of order")
40
36
  end
41
37
 
42
- it "fails if third call comes first" do
38
+ it "fails when messages are received out of order (3rd message 1st)" do
43
39
  @double.should_receive(:one).ordered
44
40
  @double.should_receive(:two).ordered
45
41
  @double.should_receive(:three).ordered
@@ -48,8 +44,8 @@ module RSpec
48
44
  @double.three
49
45
  end.should raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :three out of order")
50
46
  end
51
-
52
- it "fails if third call comes second" do
47
+
48
+ it "fails when messages are received out of order (3rd message 2nd)" do
53
49
  @double.should_receive(:one).ordered
54
50
  @double.should_receive(:two).ordered
55
51
  @double.should_receive(:three).ordered
@@ -59,7 +55,21 @@ module RSpec
59
55
  end.should raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :three out of order")
60
56
  end
61
57
 
62
- it "ignores order of non ordered calls" do
58
+ it "fails when messages are out of order across objects" do
59
+ a = double("test double")
60
+ b = double("another test double")
61
+ a.should_receive(:one).ordered
62
+ b.should_receive(:two).ordered
63
+ a.should_receive(:three).ordered
64
+ a.one
65
+ lambda do
66
+ a.three
67
+ end.should raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :three out of order")
68
+ a.rspec_reset
69
+ b.rspec_reset
70
+ end
71
+
72
+ it "ignores order of non ordered messages" do
63
73
  @double.should_receive(:ignored_0)
64
74
  @double.should_receive(:ordered_1).ordered
65
75
  @double.should_receive(:ignored_1)
@@ -78,17 +88,16 @@ module RSpec
78
88
  @double.ignored_1
79
89
  @double.rspec_verify
80
90
  end
81
-
82
- it "passes when duplicates exist" do
91
+
92
+ it "supports duplicate messages" do
83
93
  @double.should_receive(:a).ordered
84
94
  @double.should_receive(:b).ordered
85
95
  @double.should_receive(:a).ordered
86
-
96
+
87
97
  @double.a
88
98
  @double.b
89
99
  @double.a
90
100
  end
91
-
92
101
  end
93
102
  end
94
103
  end
@@ -40,7 +40,11 @@ module RSpec
40
40
  it "clears internal mocks on reset_all" do
41
41
  @space.add(double("mock"))
42
42
  @space.reset_all
43
- @space.instance_eval { mocks.empty? }.should be_true
43
+ @space.instance_eval { receivers.empty? }.should be_true
44
+ end
45
+ it "resets the ordering" do
46
+ @space.reset_all
47
+ @space.expectation_ordering.should be_empty
44
48
  end
45
49
  it "only adds an instance once" do
46
50
  @space.add(m1 = double("mock1"))
@@ -8,7 +8,7 @@ module RSpec
8
8
  end
9
9
 
10
10
  treats_method_missing_as_private :subject => RSpec::Mocks::Mock.new, :noop => false
11
-
11
+
12
12
  after(:each) do
13
13
  @mock.rspec_reset
14
14
  end
@@ -54,7 +54,7 @@ module RSpec
54
54
  @mock.not_expected
55
55
  violated
56
56
  }.to raise_error(
57
- RSpec::Mocks::MockExpectationError,
57
+ RSpec::Mocks::MockExpectationError,
58
58
  %Q|(Double "test double").not_expected(no args)\n expected: 0 times\n received: 1 time|
59
59
  )
60
60
  end
@@ -65,7 +65,7 @@ module RSpec
65
65
  @mock.not_expected("unexpected text")
66
66
  violated
67
67
  }.to raise_error(
68
- RSpec::Mocks::MockExpectationError,
68
+ RSpec::Mocks::MockExpectationError,
69
69
  %Q|(Double "test double").not_expected("unexpected text")\n expected: 0 times\n received: 1 time|
70
70
  )
71
71
  end
@@ -137,19 +137,19 @@ module RSpec
137
137
  @mock.rspec_verify
138
138
  }.should raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: (\"a\", \"d\", \"c\")")
139
139
  end
140
-
140
+
141
141
  describe 'with a method that has a default argument' do
142
142
  it "raises an exception if the arguments don't match when the method is called, correctly reporting the offending arguments" do
143
143
  def @mock.method_with_default_argument(arg={}); end
144
144
  @mock.should_receive(:method_with_default_argument).with({})
145
-
145
+
146
146
  expect {
147
147
  @mock.method_with_default_argument(nil)
148
148
  @mock.rspec_verify
149
149
  }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :method_with_default_argument with unexpected arguments\n expected: ({})\n got: (nil)")
150
150
  end
151
151
  end
152
-
152
+
153
153
  it "fails if unexpected method called" do
154
154
  lambda {
155
155
  @mock.something("a","b","c")
@@ -174,41 +174,42 @@ module RSpec
174
174
  }.to raise_error(RSpec::Mocks::MockExpectationError, /Double \"test double\" received :something but passed block failed with: expected false to be true/)
175
175
  end
176
176
 
177
- it "passes block to expectation block", :ruby => '> 1.8.6' do
178
- a = nil
177
+ it "passes proc to expectation block without an argument", :ruby => '> 1.8.6' do
179
178
  # We eval this because Ruby 1.8.6's syntax parser barfs on { |&block| ... }
180
179
  # and prevents the entire spec suite from running.
181
- eval("@mock.should_receive(:something) { |&block| a = block }")
182
- b = lambda { }
183
- @mock.something(&b)
184
- a.should eq b
185
- @mock.rspec_verify
180
+ eval("@mock.should_receive(:foo) {|&block| block.call.should eq(:bar)}")
181
+ @mock.foo { :bar }
186
182
  end
187
183
 
188
- it "fails right away when method defined as never is received" do
189
- @mock.should_receive(:not_expected).never
190
- expect { @mock.not_expected }.to raise_error(
191
- RSpec::Mocks::MockExpectationError,
192
- %Q|(Double "test double").not_expected(no args)\n expected: 0 times\n received: 1 time|
193
- )
184
+ it "passes proc to expectation block with an argument", :ruby => '> 1.8.6' do
185
+ eval("@mock.should_receive(:foo) {|arg, &block| block.call.should eq(:bar)}")
186
+ @mock.foo(:arg) { :bar }
194
187
  end
195
188
 
196
- it "eventually fails when method defined as never is received" do
189
+ it "passes proc to stub block without an argurment", :ruby => '>1.8.6' do
190
+ eval("@mock.stub(:foo) {|&block| block.call.should eq(:bar)}")
191
+ @mock.foo { :bar }
192
+ end
193
+
194
+ it "passes proc to stub block with an argument", :ruby => '> 1.8.6' do
195
+ eval("@mock.stub(:foo) {|arg, &block| block.call.should eq(:bar)}")
196
+ @mock.foo(:arg) { :bar }
197
+ end
198
+
199
+ it "fails right away when method defined as never is received" do
197
200
  @mock.should_receive(:not_expected).never
198
- expect { @mock.not_expected }.to raise_error(
199
- RSpec::Mocks::MockExpectationError,
200
- %Q|(Double "test double").not_expected(no args)\n expected: 0 times\n received: 1 time|
201
+ expect { @mock.not_expected }.
202
+ to raise_error(RSpec::Mocks::MockExpectationError,
203
+ %Q|(Double "test double").not_expected(no args)\n expected: 0 times\n received: 1 time|
201
204
  )
202
205
  end
203
206
 
204
207
  it "raises when told to" do
205
208
  @mock.should_receive(:something).and_raise(RuntimeError)
206
- lambda do
207
- @mock.something
208
- end.should raise_error(RuntimeError)
209
+ expect { @mock.something }.to raise_error(RuntimeError)
209
210
  end
210
211
 
211
- it "raises passed an Exception instance" do
212
+ it "raises instance of submitted Exception" do
212
213
  error = RuntimeError.new("error message")
213
214
  @mock.should_receive(:something).and_raise(error)
214
215
  lambda {
@@ -216,7 +217,19 @@ module RSpec
216
217
  }.should raise_error(RuntimeError, "error message")
217
218
  end
218
219
 
219
- it "raises RuntimeError with passed message" do
220
+ it "fails with helpful message if submitted Exception requires constructor arguments" do
221
+ class ErrorWithNonZeroArgConstructor < RuntimeError
222
+ def initialize(i_take_an_argument)
223
+ end
224
+ end
225
+
226
+ @mock.stub(:something).and_raise(ErrorWithNonZeroArgConstructor)
227
+ lambda {
228
+ @mock.something
229
+ }.should raise_error(ArgumentError, /^'and_raise' can only accept an Exception class if an instance/)
230
+ end
231
+
232
+ it "raises RuntimeError with submitted message" do
220
233
  @mock.should_receive(:something).and_raise("error message")
221
234
  lambda {
222
235
  @mock.something
@@ -615,7 +628,7 @@ module RSpec
615
628
  mock = double()
616
629
  expect {mock.foo}.to raise_error(/Double received/)
617
630
  end
618
-
631
+
619
632
  it "does respond to initially stubbed methods" do
620
633
  double = double(:foo => "woo", :bar => "car")
621
634
  double.foo.should eq "woo"
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'yaml'
3
2
 
4
3
  module RSpec
5
4
  module Mocks
@@ -1,26 +1,47 @@
1
1
  require 'spec_helper'
2
2
 
3
- module RSpec
4
- module Mocks
5
- describe "Example with stubbed and then called message" do
6
- it "fails if the message is expected and then subsequently not called again" do
7
- double = double("mock", :msg => nil)
8
- double.msg
9
- double.should_receive(:msg)
10
- lambda { double.rspec_verify }.should raise_error(RSpec::Mocks::MockExpectationError)
11
- end
3
+ describe "expection set on previously stubbed method" do
4
+ it "fails if message is not received after expectation is set" do
5
+ double = double(:msg => nil)
6
+ double.msg
7
+ double.should_receive(:msg)
8
+ lambda { double.rspec_verify }.should raise_error(RSpec::Mocks::MockExpectationError)
9
+ end
10
+
11
+ it "outputs arguments of similar calls" do
12
+ double = double('double', :foo => true)
13
+ double.should_receive(:foo).with('first')
14
+ double.foo('second')
15
+ double.foo('third')
16
+ lambda do
17
+ double.rspec_verify
18
+ end.should raise_error(%Q|Double "double" received :foo with unexpected arguments\n expected: ("first")\n got: ("second"), ("third")|)
19
+ double.rspec_reset
20
+ end
21
+
22
+ context "with argument constraint on stub" do
23
+ it "matches any args if no arg constraint set on expectation" do
24
+ double = double("mock")
25
+ double.stub(:foo).with(3).and_return("stub")
26
+ double.should_receive(:foo).at_least(:once).and_return("expectation")
27
+ double.foo
28
+ double.rspec_verify
29
+ end
30
+
31
+ it "matches specific args set on expectation" do
32
+ double = double("mock")
33
+ double.stub(:foo).with(3).and_return("stub")
34
+ double.should_receive(:foo).at_least(:once).with(4).and_return("expectation")
35
+ double.foo(4)
36
+ double.rspec_verify
37
+ end
12
38
 
13
- it "outputs arguments of all similar calls" do
14
- double = double('double', :foo => true)
15
- double.should_receive(:foo).with('first')
16
- double.foo('second')
17
- double.foo('third')
18
- lambda do
19
- double.rspec_verify
20
- end.should raise_error(%Q|Double "double" received :foo with unexpected arguments\n expected: ("first")\n got: ("second"), ("third")|)
21
- double.rspec_reset
22
- end
39
+ it "fails if expectation's arg constraint is not met" do
40
+ double = double("mock")
41
+ double.stub(:foo).with(3).and_return("stub")
42
+ double.should_receive(:foo).at_least(:once).with(4).and_return("expectation")
43
+ double.foo(3)
44
+ expect { double.rspec_verify }.to raise_error(/expected: \(4\)\s+got: \(3\)/)
23
45
  end
24
-
25
46
  end
26
47
  end
metadata CHANGED
@@ -1,13 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-mocks
3
3
  version: !ruby/object:Gem::Version
4
- hash: 47
5
- prerelease:
4
+ hash: 85566451
5
+ prerelease: 6
6
6
  segments:
7
7
  - 2
8
- - 8
8
+ - 9
9
9
  - 0
10
- version: 2.8.0
10
+ - rc
11
+ - 2
12
+ version: 2.9.0.rc2
11
13
  platform: ruby
12
14
  authors:
13
15
  - Steven Baker
@@ -16,18 +18,64 @@ autorequire:
16
18
  bindir: bin
17
19
  cert_chain: []
18
20
 
19
- date: 2012-01-05 00:00:00 Z
20
- dependencies: []
21
-
21
+ date: 2012-03-12 00:00:00 Z
22
+ dependencies:
23
+ - !ruby/object:Gem::Dependency
24
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 63
30
+ segments:
31
+ - 0
32
+ - 9
33
+ - 2
34
+ version: 0.9.2
35
+ prerelease: false
36
+ requirement: *id001
37
+ name: rake
38
+ type: :development
39
+ - !ruby/object:Gem::Dependency
40
+ version_requirements: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 1
46
+ segments:
47
+ - 1
48
+ - 1
49
+ - 9
50
+ version: 1.1.9
51
+ prerelease: false
52
+ requirement: *id002
53
+ name: cucumber
54
+ type: :development
55
+ - !ruby/object:Gem::Dependency
56
+ version_requirements: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ hash: 25
62
+ segments:
63
+ - 0
64
+ - 4
65
+ - 11
66
+ version: 0.4.11
67
+ prerelease: false
68
+ requirement: *id003
69
+ name: aruba
70
+ type: :development
22
71
  description: RSpec's 'test double' framework, with support for stubbing and mocking
23
72
  email: rspec-users@rubyforge.org
24
73
  executables: []
25
74
 
26
75
  extensions: []
27
76
 
28
- extra_rdoc_files:
29
- - README.md
30
- - License.txt
77
+ extra_rdoc_files: []
78
+
31
79
  files:
32
80
  - lib/rspec/mocks.rb
33
81
  - lib/rspec/mocks/any_instance.rb
@@ -54,8 +102,11 @@ files:
54
102
  - lib/rspec/mocks/standalone.rb
55
103
  - lib/rspec/mocks/version.rb
56
104
  - lib/spec/mocks.rb
57
- - License.txt
58
105
  - README.md
106
+ - License.txt
107
+ - Changelog.md
108
+ - .yardopts
109
+ - .document
59
110
  - features/README.markdown
60
111
  - features/Scope.md
61
112
  - features/Upgrade.md
@@ -144,19 +195,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
195
  required_rubygems_version: !ruby/object:Gem::Requirement
145
196
  none: false
146
197
  requirements:
147
- - - ">="
198
+ - - ">"
148
199
  - !ruby/object:Gem::Version
149
- hash: 3
200
+ hash: 25
150
201
  segments:
151
- - 0
152
- version: "0"
202
+ - 1
203
+ - 3
204
+ - 1
205
+ version: 1.3.1
153
206
  requirements: []
154
207
 
155
208
  rubyforge_project: rspec
156
- rubygems_version: 1.8.11
209
+ rubygems_version: 1.8.15
157
210
  signing_key:
158
211
  specification_version: 3
159
- summary: rspec-mocks-2.8.0
212
+ summary: rspec-mocks-2.9.0.rc2
160
213
  test_files:
161
214
  - features/README.markdown
162
215
  - features/Scope.md