rspec-mocks 3.3.2 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 159a6b84817d3fe5b931c2fa0158a88ac84ab6d5
4
- data.tar.gz: c9b42659f94d5814fc4aeb107954eb15763a9e93
3
+ metadata.gz: e618d7a28b9f934cf906f40a9d1c70d59833ac36
4
+ data.tar.gz: 6e4a6af3c8ad439a596350088869b5cd2dd69885
5
5
  SHA512:
6
- metadata.gz: f0f3c1c4ec0ebd3efbbf608c3c749f1af4354aa78264c0738241a8585d4c8b170508ead0da894f2808fb1c43d692b1d7a910744b95ce20f4c3f1c2f7e8ef2d4e
7
- data.tar.gz: 52b08792990f741a014390e5886fe49226b7c22ca90db1e01e0b26728571020702ce37d6b635a3df87635275b4c05606dfbd475b68120c7664fade2a86a20d86
6
+ metadata.gz: e14baa4517cc30d218b50b8bc4b3bfaa2a878504e4de3bb90c1a6f36db05d742f5d7f5c561c732031c932d4c27fbc2cc67fd471992e6ca50c3c13219d26c6c60
7
+ data.tar.gz: bfe1b8654f29fc1f891e23ec4efadd1f10c1411b166fe66e0889d6336cee57d4f2ddbb7bf5becc9d0b5f6a47915d9d1fe1fc86abae394e70b9308aa8cabbe3f2
Binary file
data.tar.gz.sig CHANGED
Binary file
data/.document CHANGED
@@ -1,5 +1,5 @@
1
1
  lib/**/*.rb
2
2
  -
3
3
  README.md
4
- License.txt
4
+ LICENSE.md
5
5
  Changelog.md
data/.yardopts CHANGED
@@ -3,4 +3,4 @@
3
3
  --markup markdown
4
4
  -
5
5
  Changelog.md
6
- License.txt
6
+ LICENSE.md
@@ -1,3 +1,22 @@
1
+ ### 3.4.0 / 2015-11-11
2
+ [Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.3.2...v3.4.0)
3
+
4
+ Enhancements:
5
+
6
+ * Make `expect(...).to have_received` work without relying upon
7
+ rspec-expectations. (Myron Marston, #978)
8
+ * Add option for failing tests when expectations are set on `nil`.
9
+ (Liz Rush, #983)
10
+
11
+ Bug Fixes:
12
+
13
+ * Fix `have_received { ... }` so that any block passed when the message
14
+ was received is forwarded to the `have_received` block. (Myron Marston, #1006)
15
+ * Fix infinite loop in error generator when stubbing `respond_to?`.
16
+ (Alex Dowad, #1022)
17
+ * Fix issue with using `receive` on subclasses (at a class level) with 1.8.7.
18
+ (Alex Dowad, #1026)
19
+
1
20
  ### 3.3.2 / 2015-07-15
2
21
  [Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.3.1...v3.3.2)
3
22
 
@@ -1,8 +1,9 @@
1
- (The MIT License)
1
+ The MIT License (MIT)
2
+ =====================
2
3
 
3
- Copyright (c) 2012 David Chelimsky, Myron Marston
4
- Copyright (c) 2006 David Chelimsky, The RSpec Development Team
5
- Copyright (c) 2005 Steven Baker
4
+ * Copyright © 2012 David Chelimsky, Myron Marston
5
+ * Copyright © 2006 David Chelimsky, The RSpec Development Team
6
+ * Copyright © 2005 Steven Baker
6
7
 
7
8
  Permission is hereby granted, free of charge, to any person obtaining
8
9
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -16,6 +16,20 @@ RSpec repos as well. Add the following to your `Gemfile`:
16
16
  gem lib, :git => "git://github.com/rspec/#{lib}.git", :branch => 'master'
17
17
  end
18
18
  ```
19
+ ## Contributing
20
+
21
+ Once you've set up the environment, you'll need to cd into the working
22
+ directory of whichever repo you want to work in. From there you can run the
23
+ specs and cucumber features, and make patches.
24
+
25
+ NOTE: You do not need to use rspec-dev to work on a specific RSpec repo. You
26
+ can treat each RSpec repo as an independent project.
27
+
28
+ For information about contributing to RSpec, please refer to the following markdown files:
29
+ * [Build details](BUILD_DETAIL.md)
30
+ * [Code of Conduct](CODE_OF_CONDUCT.md)
31
+ * [Detailed contributing guide](CONTRIBUTING.md)
32
+ * [Development setup guide](DEVELOPMENT.md)
19
33
 
20
34
  ## Test Doubles
21
35
 
@@ -346,7 +360,7 @@ end
346
360
  ## Delegating to the Original Implementation
347
361
 
348
362
  When working with a partial mock object, you may occasionally
349
- want to set a message expecation without interfering with how
363
+ want to set a message expectation without interfering with how
350
364
  the object responds to the message. You can use `and_call_original`
351
365
  to achieve this:
352
366
 
@@ -425,6 +439,7 @@ you are interested in learning more, here is some recommended reading:
425
439
 
426
440
  ## Also see
427
441
 
428
- * [http://github.com/rspec/rspec](http://github.com/rspec/rspec)
429
- * [http://github.com/rspec/rspec-core](http://github.com/rspec/rspec-core)
430
- * [http://github.com/rspec/rspec-expectations](http://github.com/rspec/rspec-expectations)
442
+ * [https://github.com/rspec/rspec](https://github.com/rspec/rspec)
443
+ * [https://github.com/rspec/rspec-core](https://github.com/rspec/rspec-core)
444
+ * [https://github.com/rspec/rspec-expectations](https://github.com/rspec/rspec-expectations)
445
+ * [https://github.com/rspec/rspec-rails](https://github.com/rspec/rspec-rails)
@@ -3,12 +3,29 @@ module RSpec
3
3
  # Provides configuration options for rspec-mocks.
4
4
  class Configuration
5
5
  def initialize
6
+ @allow_message_expectations_on_nil = nil
6
7
  @yield_receiver_to_any_instance_implementation_blocks = true
7
8
  @verify_doubled_constant_names = false
8
9
  @transfer_nested_constants = false
9
10
  @verify_partial_doubles = false
10
11
  end
11
12
 
13
+ # Sets whether RSpec will warn, ignore, or fail a test when
14
+ # expectations are set on nil.
15
+ # By default, when this flag is not set, warning messages are issued when
16
+ # expectations are set on nil. This is to prevent false-positives and to
17
+ # catch potential bugs early on.
18
+ # When set to `true`, warning messages are suppressed.
19
+ # When set to `false`, it will raise an error.
20
+ #
21
+ # @example
22
+ # RSpec.configure do |config|
23
+ # config.mock_with :rspec do |mocks|
24
+ # mocks.allow_message_expectations_on_nil = false
25
+ # end
26
+ # end
27
+ attr_accessor :allow_message_expectations_on_nil
28
+
12
29
  def yield_receiver_to_any_instance_implementation_blocks?
13
30
  @yield_receiver_to_any_instance_implementation_blocks
14
31
  end
@@ -69,12 +69,7 @@ module RSpec
69
69
  end
70
70
 
71
71
  def default_error_message(expectation, expected_args, actual_args)
72
- [
73
- intro,
74
- "received",
75
- expectation.message.inspect,
76
- unexpected_arguments_message(expected_args, actual_args),
77
- ].join(" ")
72
+ "#{intro} received #{expectation.message.inspect} #{unexpected_arguments_message(expected_args, actual_args)}"
78
73
  end
79
74
 
80
75
  # rubocop:disable Style/ParameterLists
@@ -213,6 +208,16 @@ module RSpec
213
208
  notify MockExpectationAlreadyInvokedError.new(error_message)
214
209
  end
215
210
 
211
+ def raise_expectation_on_nil_error(method_name)
212
+ __raise expectation_on_nil_message(method_name)
213
+ end
214
+
215
+ def expectation_on_nil_message(method_name)
216
+ "An expectation of `:#{method_name}` was set on `nil`. " \
217
+ "To allow expectations on `nil` and suppress this message, set `config.allow_expectations_on_nil` to `true`. " \
218
+ "To disallow expectations on `nil`, set `config.allow_expectations_on_nil` to `false`"
219
+ end
220
+
216
221
  private
217
222
 
218
223
  def received_part_of_expectation_error(actual_received_count, args)
@@ -197,6 +197,7 @@ module RSpec
197
197
  # By default warning messages are issued when expectations are set on
198
198
  # nil. This is to prevent false-positives and to catch potential bugs
199
199
  # early on.
200
+ # @deprecated Use {RSpec::Mocks::Configuration#allow_message_expectations_on_nil} instead.
200
201
  def allow_message_expectations_on_nil
201
202
  RSpec::Mocks.space.proxy_for(nil).warn_about_expectations = false
202
203
  end
@@ -31,7 +31,6 @@ module RSpec
31
31
  def stashed_method_name
32
32
  "obfuscated_by_rspec_mocks__#{@method}"
33
33
  end
34
- private :stashed_method_name
35
34
 
36
35
  # @private
37
36
  def restore
@@ -36,11 +36,11 @@ module RSpec
36
36
  end
37
37
 
38
38
  def failure_message
39
- generate_failure_message
39
+ capture_failure_message
40
40
  end
41
41
 
42
42
  def failure_message_when_negated
43
- generate_failure_message
43
+ capture_failure_message
44
44
  end
45
45
 
46
46
  def description
@@ -54,6 +54,14 @@ module RSpec
54
54
  end
55
55
  end
56
56
 
57
+ def setup_expectation(subject, &block)
58
+ notify_failure_message unless matches?(subject, &block)
59
+ end
60
+
61
+ def setup_negative_expectation(subject, &block)
62
+ notify_failure_message unless does_not_match?(subject, &block)
63
+ end
64
+
57
65
  def setup_allowance(_subject, &_block)
58
66
  disallow("allow", " as it would have no effect")
59
67
  end
@@ -95,13 +103,17 @@ module RSpec
95
103
  end
96
104
  end
97
105
 
98
- def generate_failure_message
106
+ def capture_failure_message
99
107
  RSpec::Support.with_failure_notifier(Proc.new { |err, _opt| return err.message }) do
100
- mock_proxy.check_for_unexpected_arguments(@expectation)
101
- @expectation.generate_error
108
+ notify_failure_message
102
109
  end
103
110
  end
104
111
 
112
+ def notify_failure_message
113
+ mock_proxy.check_for_unexpected_arguments(@expectation)
114
+ @expectation.generate_error
115
+ end
116
+
105
117
  def expected_messages_received_in_order?
106
118
  mock_proxy.replay_received_message_on @expectation, &@block
107
119
  @expectation.expected_messages_received? && @expectation.ensure_expected_ordering_received!
@@ -2,7 +2,7 @@ module RSpec
2
2
  module Mocks
3
3
  # A message expectation that only allows concrete return values to be set
4
4
  # for a message. While this same effect can be achieved using a standard
5
- # MessageExpecation, this version is much faster and so can be used as an
5
+ # MessageExpectation, this version is much faster and so can be used as an
6
6
  # optimization.
7
7
  #
8
8
  # @private
@@ -169,7 +169,7 @@ module RSpec
169
169
  # Tells the object to yield one or more args to a block when the message
170
170
  # is received.
171
171
  #
172
- # @return [MessageExpecation] self, to support further chaining.
172
+ # @return [MessageExpectation] self, to support further chaining.
173
173
  # @example
174
174
  # stream.stub(:open).and_yield(StringIO.new)
175
175
  def and_yield(*args, &block)
@@ -191,7 +191,7 @@ module RSpec
191
191
  # Constrain a message expectation to be received a specific number of
192
192
  # times.
193
193
  #
194
- # @return [MessageExpecation] self, to support further chaining.
194
+ # @return [MessageExpectation] self, to support further chaining.
195
195
  # @example
196
196
  # expect(dealer).to receive(:deal_card).exactly(10).times
197
197
  def exactly(n, &block)
@@ -204,7 +204,7 @@ module RSpec
204
204
  # Constrain a message expectation to be received at least a specific
205
205
  # number of times.
206
206
  #
207
- # @return [MessageExpecation] self, to support further chaining.
207
+ # @return [MessageExpectation] self, to support further chaining.
208
208
  # @example
209
209
  # expect(dealer).to receive(:deal_card).at_least(9).times
210
210
  def at_least(n, &block)
@@ -223,7 +223,7 @@ module RSpec
223
223
  # Constrain a message expectation to be received at most a specific
224
224
  # number of times.
225
225
  #
226
- # @return [MessageExpecation] self, to support further chaining.
226
+ # @return [MessageExpectation] self, to support further chaining.
227
227
  # @example
228
228
  # expect(dealer).to receive(:deal_card).at_most(10).times
229
229
  def at_most(n, &block)
@@ -235,7 +235,7 @@ module RSpec
235
235
 
236
236
  # Syntactic sugar for `exactly`, `at_least` and `at_most`
237
237
  #
238
- # @return [MessageExpecation] self, to support further chaining.
238
+ # @return [MessageExpectation] self, to support further chaining.
239
239
  # @example
240
240
  # expect(dealer).to receive(:deal_card).exactly(10).times
241
241
  # expect(dealer).to receive(:deal_card).at_least(10).times
@@ -247,7 +247,7 @@ module RSpec
247
247
 
248
248
  # Expect a message not to be received at all.
249
249
  #
250
- # @return [MessageExpecation] self, to support further chaining.
250
+ # @return [MessageExpectation] self, to support further chaining.
251
251
  # @example
252
252
  # expect(car).to receive(:stop).never
253
253
  def never
@@ -258,7 +258,7 @@ module RSpec
258
258
 
259
259
  # Expect a message to be received exactly one time.
260
260
  #
261
- # @return [MessageExpecation] self, to support further chaining.
261
+ # @return [MessageExpectation] self, to support further chaining.
262
262
  # @example
263
263
  # expect(car).to receive(:go).once
264
264
  def once(&block)
@@ -269,7 +269,7 @@ module RSpec
269
269
 
270
270
  # Expect a message to be received exactly two times.
271
271
  #
272
- # @return [MessageExpecation] self, to support further chaining.
272
+ # @return [MessageExpectation] self, to support further chaining.
273
273
  # @example
274
274
  # expect(car).to receive(:go).twice
275
275
  def twice(&block)
@@ -280,7 +280,7 @@ module RSpec
280
280
 
281
281
  # Expect a message to be received exactly three times.
282
282
  #
283
- # @return [MessageExpecation] self, to support further chaining.
283
+ # @return [MessageExpectation] self, to support further chaining.
284
284
  # @example
285
285
  # expect(car).to receive(:go).thrice
286
286
  def thrice(&block)
@@ -302,7 +302,7 @@ module RSpec
302
302
  # A message expectation will fail if the message is received with different
303
303
  # arguments.
304
304
  #
305
- # @return [MessageExpecation] self, to support further chaining.
305
+ # @return [MessageExpectation] self, to support further chaining.
306
306
  # @example
307
307
  # allow(cart).to receive(:add) { :failure }
308
308
  # allow(cart).to receive(:add).with(Book.new(:isbn => 1934356379)) { :success }
@@ -330,7 +330,7 @@ module RSpec
330
330
 
331
331
  # Expect messages to be received in a specific order.
332
332
  #
333
- # @return [MessageExpecation] self, to support further chaining.
333
+ # @return [MessageExpectation] self, to support further chaining.
334
334
  # @example
335
335
  # expect(api).to receive(:prepare).ordered
336
336
  # expect(api).to receive(:run).ordered
@@ -345,7 +345,7 @@ module RSpec
345
345
  end
346
346
 
347
347
  # @private
348
- # Contains the parts of `MessageExpecation` that aren't part of
348
+ # Contains the parts of `MessageExpectation` that aren't part of
349
349
  # rspec-mocks' public API. The class is very big and could really use
350
350
  # some collaborators it delegates to for this stuff but for now this was
351
351
  # the simplest way to split the public from private stuff to make it
@@ -3,7 +3,7 @@ module RSpec
3
3
  # @private
4
4
  class MethodDouble
5
5
  # @private
6
- attr_reader :method_name, :object, :expectations, :stubs
6
+ attr_reader :method_name, :object, :expectations, :stubs, :method_stasher
7
7
 
8
8
  # @private
9
9
  def initialize(object, method_name, proxy)
@@ -89,11 +89,11 @@ module RSpec
89
89
  @error_generator.raise_expectation_on_unstubbed_method(expected_method_name)
90
90
  end
91
91
 
92
- @messages_received.each do |(actual_method_name, args, _)|
92
+ @messages_received.each do |(actual_method_name, args, received_block)|
93
93
  next unless expectation.matches?(actual_method_name, *args)
94
94
 
95
95
  expectation.safe_invoke(nil)
96
- block.call(*args) if block
96
+ block.call(*args, &received_block) if block
97
97
  end
98
98
  end
99
99
 
@@ -371,20 +371,36 @@ module RSpec
371
371
 
372
372
  return super unless unbound_method
373
373
  unbound_method.bind(object)
374
+ # :nocov:
375
+ rescue TypeError
376
+ if RUBY_VERSION == '1.8.7'
377
+ # In MRI 1.8.7, a singleton method on a class cannot be rebound to its subclass
378
+ if unbound_method && unbound_method.owner.ancestors.first != unbound_method.owner
379
+ # This is a singleton method; we can't do anything with it
380
+ # But we can work around this using a different implementation
381
+ double = method_double_from_ancestor_for(message)
382
+ return object.method(double.method_stasher.stashed_method_name)
383
+ end
384
+ end
385
+ raise
386
+ # :nocov:
374
387
  end
375
388
 
376
389
  protected
377
390
 
378
391
  def original_unbound_method_handle_from_ancestor_for(message)
379
- method_double = @method_doubles.fetch(message) do
392
+ double = method_double_from_ancestor_for(message)
393
+ double && double.original_method.unbind
394
+ end
395
+
396
+ def method_double_from_ancestor_for(message)
397
+ @method_doubles.fetch(message) do
380
398
  # The fact that there is no method double for this message indicates
381
399
  # that it has not been redefined by rspec-mocks. We need to continue
382
400
  # looking up the ancestor chain.
383
401
  return superclass_proxy &&
384
- superclass_proxy.original_unbound_method_handle_from_ancestor_for(message)
402
+ superclass_proxy.method_double_from_ancestor_for(message)
385
403
  end
386
-
387
- method_double.original_method.unbind
388
404
  end
389
405
 
390
406
  def superclass_proxy
@@ -406,33 +422,62 @@ module RSpec
406
422
  # @private
407
423
  class ProxyForNil < PartialDoubleProxy
408
424
  def initialize(order_group)
409
- @warn_about_expectations = true
425
+ set_expectation_behavior
410
426
  super(nil, order_group)
411
427
  end
412
428
 
429
+ attr_accessor :disallow_expectations
413
430
  attr_accessor :warn_about_expectations
414
- alias warn_about_expectations? warn_about_expectations
415
431
 
416
432
  def add_message_expectation(method_name, opts={}, &block)
417
- warn(method_name) if warn_about_expectations?
433
+ warn_or_raise!(method_name)
418
434
  super
419
435
  end
420
436
 
421
437
  def add_negative_message_expectation(location, method_name, &implementation)
422
- warn(method_name) if warn_about_expectations?
438
+ warn_or_raise!(method_name)
423
439
  super
424
440
  end
425
441
 
426
442
  def add_stub(method_name, opts={}, &implementation)
427
- warn(method_name) if warn_about_expectations?
443
+ warn_or_raise!(method_name)
428
444
  super
429
445
  end
430
446
 
431
447
  private
432
448
 
449
+ def set_expectation_behavior
450
+ case RSpec::Mocks.configuration.allow_message_expectations_on_nil
451
+ when false
452
+ @warn_about_expectations = false
453
+ @disallow_expectations = true
454
+ when true
455
+ @warn_about_expectations = false
456
+ @disallow_expectations = false
457
+ else
458
+ @warn_about_expectations = true
459
+ @disallow_expectations = false
460
+ end
461
+ end
462
+
463
+ def warn_or_raise!(method_name)
464
+ # This method intentionally swallows the message when
465
+ # neither disallow_expectations nor warn_about_expectations
466
+ # are set to true.
467
+ if disallow_expectations
468
+ raise_error(method_name)
469
+ elsif warn_about_expectations
470
+ warn(method_name)
471
+ end
472
+ end
473
+
433
474
  def warn(method_name)
434
- source = CallerFilter.first_non_rspec_line
435
- Kernel.warn("An expectation of :#{method_name} was set on nil. Called from #{source}. Use allow_message_expectations_on_nil to disable warnings.")
475
+ warning_msg = @error_generator.expectation_on_nil_message(method_name)
476
+ RSpec.warning(warning_msg)
477
+ end
478
+
479
+ def raise_error(method_name)
480
+ @error_generator.raise_expectation_on_nil_error(method_name)
436
481
  end
437
482
  end
438
483
  end
@@ -1,4 +1,4 @@
1
- RSpec::Support.require_rspec_mocks 'reentrant_mutex'
1
+ RSpec::Support.require_rspec_support 'reentrant_mutex'
2
2
 
3
3
  module RSpec
4
4
  module Mocks
@@ -145,7 +145,7 @@ module RSpec
145
145
  private
146
146
 
147
147
  def new_mutex
148
- Mocks::ReentrantMutex.new
148
+ Support::ReentrantMutex.new
149
149
  end
150
150
 
151
151
  def proxy_not_found_for(id, object)
@@ -48,7 +48,7 @@ module RSpec
48
48
  end
49
49
 
50
50
  def unstub(message)
51
- ::RSpec::Mocks::Syntax.warn_unless_should_configured(__method__, "`allow(...).to_receive(...).and_call_original` or explicitly enable `:should`")
51
+ ::RSpec::Mocks::Syntax.warn_unless_should_configured(__method__, "`allow(...).to receive(...).and_call_original` or explicitly enable `:should`")
52
52
  ::RSpec::Mocks.space.proxy_for(self).remove_stub(message)
53
53
  end
54
54
 
@@ -19,7 +19,7 @@ module RSpec
19
19
  method_name = options.fetch(:from)
20
20
  define_method(method_name) do |matcher, &block|
21
21
  case matcher
22
- when Matchers::Receive
22
+ when Matchers::Receive, Matchers::HaveReceived
23
23
  define_matcher(matcher, matcher_method, &block)
24
24
  when Matchers::ReceiveMessages, Matchers::ReceiveMessageChain
25
25
  raise_negation_unsupported(method_name, matcher)
@@ -47,7 +47,7 @@ module RSpec
47
47
 
48
48
  def raise_unsupported_matcher(method_name, matcher)
49
49
  raise UnsupportedMatcherError,
50
- "only the `receive` or `receive_messages` matchers are supported " \
50
+ "only the `receive`, `have_received` and `receive_messages` matchers are supported " \
51
51
  "with `#{expression}(...).#{method_name}`, but you have provided: #{matcher}"
52
52
  end
53
53
 
@@ -42,7 +42,7 @@ module RSpec
42
42
  verifier = Support::LooseSignatureVerifier.new(signature, args)
43
43
 
44
44
  unless verifier.valid?
45
- # Fail fast is required, otherwise the message expecation will fail
45
+ # Fail fast is required, otherwise the message expectation will fail
46
46
  # as well ("expected method not called") and clobber this one.
47
47
  @failed_fast = true
48
48
  @error_generator.raise_invalid_arguments_error(verifier)
@@ -1,4 +1,4 @@
1
- RSpec::Support.require_rspec_mocks 'verifying_message_expecation'
1
+ RSpec::Support.require_rspec_mocks 'verifying_message_expectation'
2
2
  RSpec::Support.require_rspec_mocks 'method_reference'
3
3
 
4
4
  module RSpec
@@ -3,7 +3,7 @@ module RSpec
3
3
  # Version information for RSpec mocks.
4
4
  module Version
5
5
  # Version of RSpec mocks currently in use in SemVer format.
6
- STRING = '3.3.2'
6
+ STRING = '3.4.0'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-mocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.2
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Baker
@@ -45,7 +45,7 @@ cert_chain:
45
45
  ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
46
46
  F3MdtaDehhjC
47
47
  -----END CERTIFICATE-----
48
- date: 2015-07-15 00:00:00.000000000 Z
48
+ date: 2015-11-12 00:00:00.000000000 Z
49
49
  dependencies:
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: rspec-support
@@ -53,14 +53,14 @@ dependencies:
53
53
  requirements:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: 3.3.0
56
+ version: 3.4.0
57
57
  type: :runtime
58
58
  prerelease: false
59
59
  version_requirements: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - "~>"
62
62
  - !ruby/object:Gem::Version
63
- version: 3.3.0
63
+ version: 3.4.0
64
64
  - !ruby/object:Gem::Dependency
65
65
  name: diff-lcs
66
66
  requirement: !ruby/object:Gem::Requirement
@@ -115,14 +115,14 @@ dependencies:
115
115
  requirements:
116
116
  - - "~>"
117
117
  - !ruby/object:Gem::Version
118
- version: '0.5'
118
+ version: 0.6.2
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: '0.5'
125
+ version: 0.6.2
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: minitest
128
128
  requirement: !ruby/object:Gem::Requirement
@@ -137,20 +137,6 @@ dependencies:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
139
  version: '5.2'
140
- - !ruby/object:Gem::Dependency
141
- name: thread_order
142
- requirement: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - "~>"
145
- - !ruby/object:Gem::Version
146
- version: 1.1.0
147
- type: :development
148
- prerelease: false
149
- version_requirements: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - "~>"
152
- - !ruby/object:Gem::Version
153
- version: 1.1.0
154
140
  description: RSpec's 'test double' framework, with support for stubbing and mocking
155
141
  email: rspec@googlegroups.com
156
142
  executables: []
@@ -160,7 +146,7 @@ files:
160
146
  - ".document"
161
147
  - ".yardopts"
162
148
  - Changelog.md
163
- - License.txt
149
+ - LICENSE.md
164
150
  - README.md
165
151
  - lib/rspec/mocks.rb
166
152
  - lib/rspec/mocks/any_instance.rb
@@ -190,18 +176,16 @@ files:
190
176
  - lib/rspec/mocks/method_double.rb
191
177
  - lib/rspec/mocks/method_reference.rb
192
178
  - lib/rspec/mocks/mutate_const.rb
193
- - lib/rspec/mocks/mutex.rb
194
179
  - lib/rspec/mocks/object_reference.rb
195
180
  - lib/rspec/mocks/order_group.rb
196
181
  - lib/rspec/mocks/proxy.rb
197
- - lib/rspec/mocks/reentrant_mutex.rb
198
182
  - lib/rspec/mocks/space.rb
199
183
  - lib/rspec/mocks/standalone.rb
200
184
  - lib/rspec/mocks/syntax.rb
201
185
  - lib/rspec/mocks/targets.rb
202
186
  - lib/rspec/mocks/test_double.rb
203
187
  - lib/rspec/mocks/verifying_double.rb
204
- - lib/rspec/mocks/verifying_message_expecation.rb
188
+ - lib/rspec/mocks/verifying_message_expectation.rb
205
189
  - lib/rspec/mocks/verifying_proxy.rb
206
190
  - lib/rspec/mocks/version.rb
207
191
  homepage: http://github.com/rspec/rspec-mocks
@@ -228,6 +212,6 @@ rubyforge_project:
228
212
  rubygems_version: 2.2.2
229
213
  signing_key:
230
214
  specification_version: 4
231
- summary: rspec-mocks-3.3.2
215
+ summary: rspec-mocks-3.4.0
232
216
  test_files: []
233
217
  has_rdoc:
metadata.gz.sig CHANGED
Binary file
@@ -1,73 +0,0 @@
1
- module RSpec
2
- module Mocks
3
- # On 1.8.7, it's in the stdlib.
4
- # We don't want to load the stdlib, b/c this is a test tool, and can affect
5
- # the test environment, causing tests to pass where they should fail.
6
- #
7
- # So we're transcribing/modifying it from
8
- # https://github.com/ruby/ruby/blob/v1_8_7_374/lib/thread.rb#L56
9
- # Some methods we don't need are deleted. Anything I don't
10
- # understand (there's quite a bit, actually) is left in.
11
- #
12
- # Some formating changes are made to appease the robot overlord:
13
- # https://travis-ci.org/rspec/rspec-core/jobs/54410874
14
- # @private
15
- class Mutex
16
- def initialize
17
- @waiting = []
18
- @locked = false
19
- @waiting.taint
20
- taint
21
- end
22
-
23
- # @private
24
- def lock
25
- while Thread.critical = true && @locked
26
- @waiting.push Thread.current
27
- Thread.stop
28
- end
29
- @locked = true
30
- Thread.critical = false
31
- self
32
- end
33
-
34
- # @private
35
- def unlock
36
- return unless @locked
37
- Thread.critical = true
38
- @locked = false
39
- wakeup_and_run_waiting_thread
40
- self
41
- end
42
-
43
- # @private
44
- def synchronize
45
- lock
46
- begin
47
- yield
48
- ensure
49
- unlock
50
- end
51
- end
52
-
53
- private
54
-
55
- def wakeup_and_run_waiting_thread
56
- begin
57
- t = @waiting.shift
58
- t.wakeup if t
59
- rescue ThreadError
60
- retry
61
- end
62
- Thread.critical = false
63
- begin
64
- t.run if t
65
- rescue ThreadError
66
- :noop
67
- end
68
- end
69
-
70
- # Avoid warnings for library wide checks spec
71
- end unless defined?(::RSpec::Mocks::Mutex) || defined?(::Mutex)
72
- end
73
- end
@@ -1,53 +0,0 @@
1
- module RSpec
2
- module Mocks
3
- # Allows a thread to lock out other threads from a critical section of code,
4
- # while allowing the thread with the lock to reenter that section.
5
- #
6
- # Based on Monitor as of 2.2 -
7
- # https://github.com/ruby/ruby/blob/eb7ddaa3a47bf48045d26c72eb0f263a53524ebc/lib/monitor.rb#L9
8
- #
9
- # Depends on Mutex, but Mutex is only available as part of core since 1.9.1:
10
- # exists - http://ruby-doc.org/core-1.9.1/Mutex.html
11
- # dne - http://ruby-doc.org/core-1.9.0/Mutex.html
12
- #
13
- # @private
14
- class ReentrantMutex
15
- def initialize
16
- @owner = nil
17
- @count = 0
18
- @mutex = Mutex.new
19
- end
20
-
21
- def synchronize
22
- enter
23
- yield
24
- ensure
25
- exit
26
- end
27
-
28
- private
29
-
30
- def enter
31
- @mutex.lock if @owner != Thread.current
32
- @owner = Thread.current
33
- @count += 1
34
- end
35
-
36
- def exit
37
- @count -= 1
38
- return unless @count == 0
39
- @owner = nil
40
- @mutex.unlock
41
- end
42
- end
43
-
44
- if defined? ::Mutex
45
- # On 1.9 and up, this is in core, so we just use the real one
46
- Mutex = ::Mutex
47
- else # For 1.8.7
48
- # :nocov:
49
- RSpec::Support.require_rspec_mocks "mutex"
50
- # :nocov:
51
- end
52
- end
53
- end