flexmock 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 13e2dc8c4ffe7a4747a9ee08ee54ab70a9c48b1c
4
- data.tar.gz: 71aea49728f74c048c92a37a000288ef381ea0f0
3
+ metadata.gz: 02acabaf029650f80ab19aed17459f6007aac4d8
4
+ data.tar.gz: 2efb9677abaeb434ec840ce5ad2d174101d333c1
5
5
  SHA512:
6
- metadata.gz: 445fe45046e1ebea766c096ddfcf1aa31eabe3b166efd1027523deca681f6bec19d4c5cda8cd5e8d3af259839e25b04951ca2bca1a4ef65951c20f97d4ef9f1b
7
- data.tar.gz: 3d20d7e3ea5caf5052236e109fbcf31178154467a28b42362a63a8cec7ff9a94655ea72ee6a673719400b79a4a61d1aac3a342d2235c8016eaf0c1dfb600b107
6
+ metadata.gz: 210118eb5a0f18106cb0c3d9ba35b2db3792cbd694a7db7ded0aecebef98607cb5fe763f2e3a2607551b604960c10e820c6d5e3c94308e33430db0ca075bb453
7
+ data.tar.gz: 2abbd364c49ab6f5b392fbff175b15ee5ccb07602ce337530f68886e157940e0349a87ffc696affa2877fd821985bbdd522a406b5c0e2239b34958a4ad5c5457
data/CHANGES CHANGED
@@ -1,5 +1,7 @@
1
1
  = Changes for FlexMock
2
2
 
3
+ SINCE 2.1.0, CHANGES ARE LISTED IN THE README
4
+
3
5
  == Version 2.0.0
4
6
 
5
7
  * bump to 2.0 to mark the change of maintainership. I hope I won't disappoint.
data/README.md CHANGED
@@ -22,6 +22,14 @@ Only significant changes (new APIs, deprecated APIs or backward-compatible
22
22
  changes) are documented here, a.k.a. minor or major version bumps. If you want a
23
23
  detailed changelog, go over the commit log in github (it's pretty low-traffic)
24
24
 
25
+ 2.2.0:
26
+
27
+ - #new_instances now mocks the #initialize method instead of mocking after the
28
+ allocation was done. This allows to do mock methods called by #initialize
29
+ itself. Behaviour when the allocator is explicitely provided is left
30
+ unchanged, which means that the old behaviour is still available by passing
31
+ :new to new_instances.
32
+
25
33
  2.1.0:
26
34
 
27
35
  - added `#and_iterates` to fix some shortcomings of `#and_yield` without
@@ -916,7 +924,7 @@ MiniTest for asserting that mocked methods are actually called.
916
924
  Specify the number of times a matching method should have been
917
925
  invoked. `nil` (or omitted) means any number of times.
918
926
 
919
- * <b>with_block: <em>true/false/nil</em>
927
+ * <b>with_block: <em>true/false/nil</em></b>
920
928
 
921
929
  Is a block required on the invocation? `true` means the method must
922
930
  be invoked with a block. `false` means the method must have been
@@ -972,7 +980,7 @@ spy behavior.
972
980
 
973
981
  *Modifiers for `have_received`*
974
982
 
975
- * <b>with(<em>args</em>)
983
+ * <b>with(<em>args</em>)</b>
976
984
 
977
985
  If a `with` modifier is given, only messages with matching arguments
978
986
  are considered. _args_ can be any of the argument matches mentioned
@@ -68,6 +68,7 @@ class FlexMock
68
68
  @method_definitions = {}
69
69
  @methods_proxied = []
70
70
  @proxy_definition_module = nil
71
+ @initialize_override = nil
71
72
  unless safe_mode
72
73
  add_mock_method(:should_receive)
73
74
  MOCK_METHODS.each do |sym|
@@ -156,8 +157,14 @@ class FlexMock
156
157
  fail ArgumentError, "new_instances requires a Class to stub" unless
157
158
  Class === @obj
158
159
  location = caller
159
- allocators = [:new] if allocators.empty?
160
+ allocators = [:initialize] if allocators.empty?
161
+
160
162
  expectation_recorder = ExpectationRecorder.new
163
+
164
+ if allocators.delete(:initialize)
165
+ initialize_stub(expectation_recorder, block)
166
+ end
167
+
161
168
  allocators.each do |allocate_method|
162
169
  flexmock_define_expectation(location, allocate_method).and_return { |*args|
163
170
  create_new_mocked_object(
@@ -167,6 +174,45 @@ class FlexMock
167
174
  expectation_recorder
168
175
  end
169
176
 
177
+ # Stubs the #initialize method on a class
178
+ def initialize_stub(recorder, expectations_block)
179
+ if !@initialize_override
180
+ expectation_blocks = @initialize_expectation_blocks = Array.new
181
+ expectation_recorders = @initialize_expectation_recorders = Array.new
182
+ @initialize_override = Module.new do
183
+ define_method :initialize do |*args, &block|
184
+ if self.class.respond_to?(:__flexmock_proxy) && (mock = self.class.__flexmock_proxy)
185
+ container = mock.flexmock_container
186
+ mock = container.flexmock(self)
187
+ expectation_blocks.each do |b|
188
+ b.call(mock)
189
+ end
190
+ expectation_recorders.each do |r|
191
+ r.apply(mock)
192
+ end
193
+ end
194
+ super(*args, &block)
195
+ end
196
+ end
197
+ @obj.prepend @initialize_override
198
+ end
199
+ if expectations_block
200
+ @initialize_expectation_blocks << expectations_block
201
+ end
202
+ @initialize_expectation_recorders << recorder
203
+ end
204
+
205
+ def initialize_stub?
206
+ !!@initialize_override
207
+ end
208
+
209
+ def initialize_stub_remove
210
+ if initialize_stub?
211
+ @initialize_expectation_blocks.clear
212
+ @initialize_expectation_recorders.clear
213
+ end
214
+ end
215
+
170
216
  # Create a new mocked object.
171
217
  #
172
218
  # The mocked object is created using the following steps:
@@ -206,6 +252,7 @@ class FlexMock
206
252
  # Remove all traces of the mocking framework from the existing object.
207
253
  def flexmock_teardown
208
254
  if ! detached?
255
+ initialize_stub_remove
209
256
  proxy_module_eval do
210
257
  methods = instance_methods(false).to_a
211
258
  methods.each do |m|
@@ -268,7 +315,7 @@ class FlexMock
268
315
  if !@proxy_definition_module
269
316
  obj = @obj
270
317
  @proxy_definition_module = m = Module.new do
271
- define_method(:__flexmock_proxy) do
318
+ define_method("__flexmock_proxy") do
272
319
  if box = obj.instance_variable_get(:@flexmock_proxy)
273
320
  box.proxy
274
321
  end
@@ -1,3 +1,3 @@
1
1
  class FlexMock
2
- VERSION = "2.1.0"
2
+ VERSION = "2.2.0"
3
3
  end
metadata CHANGED
@@ -1,75 +1,75 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flexmock
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Weirich
8
8
  - Sylvain Joyeux
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-04-26 00:00:00.000000000 Z
12
+ date: 2016-07-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
+ name: minitest
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - ">="
18
19
  - !ruby/object:Gem::Version
19
20
  version: '0'
20
- name: minitest
21
- prerelease: false
22
21
  type: :development
22
+ prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
+ name: rake
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - ">="
32
33
  - !ruby/object:Gem::Version
33
34
  version: '0'
34
- name: rake
35
- prerelease: false
36
35
  type: :development
36
+ prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
+ name: simplecov
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
46
  - - ">="
46
47
  - !ruby/object:Gem::Version
47
48
  version: 0.11.0
48
- name: simplecov
49
- prerelease: false
50
49
  type: :development
50
+ prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: 0.11.0
56
56
  - !ruby/object:Gem::Dependency
57
+ name: coveralls
57
58
  requirement: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - ">="
60
61
  - !ruby/object:Gem::Version
61
62
  version: '0'
62
- name: coveralls
63
- prerelease: false
64
63
  type: :development
64
+ prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
- description: "\n FlexMock is a extremely simple mock object class compatible\n\
71
- \ with the Minitest framework. Although the FlexMock's\n interface is simple,\
72
- \ it is very flexible.\n "
70
+ description: "\n FlexMock is a extremely simple mock object class compatible\n
71
+ \ with the Minitest framework. Although the FlexMock's\n interface is simple,
72
+ it is very flexible.\n "
73
73
  email: sylvain.joyeux@m4x.org
74
74
  executables: []
75
75
  extensions: []
@@ -169,7 +169,7 @@ homepage: https://github.com/doudou/flexmock
169
169
  licenses:
170
170
  - MIT
171
171
  metadata: {}
172
- post_install_message:
172
+ post_install_message:
173
173
  rdoc_options: []
174
174
  require_paths:
175
175
  - lib
@@ -184,9 +184,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
184
  - !ruby/object:Gem::Version
185
185
  version: '0'
186
186
  requirements: []
187
- rubyforge_project:
188
- rubygems_version: 2.4.8
189
- signing_key:
187
+ rubyforge_project:
188
+ rubygems_version: 2.5.1
189
+ signing_key:
190
190
  specification_version: 4
191
191
  summary: Simple and Flexible Mock Objects for Testing
192
192
  test_files: []