rspec-mocks 3.3.1 → 3.3.2

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: 4da929a8edc5f89c1d58114f477ae88164702b0c
4
- data.tar.gz: 227ea37af2920626b3b234ccbc2296c675727908
3
+ metadata.gz: 159a6b84817d3fe5b931c2fa0158a88ac84ab6d5
4
+ data.tar.gz: c9b42659f94d5814fc4aeb107954eb15763a9e93
5
5
  SHA512:
6
- metadata.gz: a6300103d6164dcccd0f20a1840bf3d1e36c757be831e3490af21315c9b528d23f6b268f9db75025a3fd51d06fd41b4dfbbe1767cde1adfa180f952ee1467d65
7
- data.tar.gz: 6d36f14ed060d44da89f6b589df55b341a0ff42c706670e5548d6c3991753baf2f334802879fdc90978359820a72ed6e7301d3ee555aab828187b0c8576265eb
6
+ metadata.gz: f0f3c1c4ec0ebd3efbbf608c3c749f1af4354aa78264c0738241a8585d4c8b170508ead0da894f2808fb1c43d692b1d7a910744b95ce20f4c3f1c2f7e8ef2d4e
7
+ data.tar.gz: 52b08792990f741a014390e5886fe49226b7c22ca90db1e01e0b26728571020702ce37d6b635a3df87635275b4c05606dfbd475b68120c7664fade2a86a20d86
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,11 @@
1
+ ### 3.3.2 / 2015-07-15
2
+ [Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.3.1...v3.3.2)
3
+
4
+ Bug Fixes:
5
+
6
+ * Prevent thread deadlock errors during proxy creation (e.g. when using
7
+ `before_verifying_doubles` callbacks). (Jon Rowe, #980, #979)
8
+
1
9
  ### 3.3.1 / 2015-06-19
2
10
  [Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.3.0...v3.3.1)
3
11
 
@@ -0,0 +1,73 @@
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
@@ -0,0 +1,53 @@
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
@@ -1,3 +1,5 @@
1
+ RSpec::Support.require_rspec_mocks 'reentrant_mutex'
2
+
1
3
  module RSpec
2
4
  module Mocks
3
5
  # @private
@@ -142,18 +144,8 @@ module RSpec
142
144
 
143
145
  private
144
146
 
145
- # We don't want to depend on the stdlib ourselves, but if the user is
146
- # using threads then a Mutex will be available to us. If not, we don't
147
- # need to synchronize anyway.
148
147
  def new_mutex
149
- defined?(::Mutex) ? ::Mutex.new : FakeMutex
150
- end
151
-
152
- # @private
153
- module FakeMutex
154
- def self.synchronize
155
- yield
156
- end
148
+ Mocks::ReentrantMutex.new
157
149
  end
158
150
 
159
151
  def proxy_not_found_for(id, object)
@@ -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.1'
6
+ STRING = '3.3.2'
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.1
4
+ version: 3.3.2
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-06-20 00:00:00.000000000 Z
48
+ date: 2015-07-15 00:00:00.000000000 Z
49
49
  dependencies:
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: rspec-support
@@ -137,6 +137,20 @@ 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
140
154
  description: RSpec's 'test double' framework, with support for stubbing and mocking
141
155
  email: rspec@googlegroups.com
142
156
  executables: []
@@ -176,9 +190,11 @@ files:
176
190
  - lib/rspec/mocks/method_double.rb
177
191
  - lib/rspec/mocks/method_reference.rb
178
192
  - lib/rspec/mocks/mutate_const.rb
193
+ - lib/rspec/mocks/mutex.rb
179
194
  - lib/rspec/mocks/object_reference.rb
180
195
  - lib/rspec/mocks/order_group.rb
181
196
  - lib/rspec/mocks/proxy.rb
197
+ - lib/rspec/mocks/reentrant_mutex.rb
182
198
  - lib/rspec/mocks/space.rb
183
199
  - lib/rspec/mocks/standalone.rb
184
200
  - lib/rspec/mocks/syntax.rb
@@ -212,6 +228,6 @@ rubyforge_project:
212
228
  rubygems_version: 2.2.2
213
229
  signing_key:
214
230
  specification_version: 4
215
- summary: rspec-mocks-3.3.1
231
+ summary: rspec-mocks-3.3.2
216
232
  test_files: []
217
233
  has_rdoc:
metadata.gz.sig CHANGED
Binary file