flexmock 2.0.6 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +23 -0
- data/lib/flexmock/class_extensions.rb +9 -13
- data/lib/flexmock/expectation.rb +24 -2
- data/lib/flexmock/mock_builder.rb +2 -2
- data/lib/flexmock/version.rb +1 -1
- metadata +17 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13e2dc8c4ffe7a4747a9ee08ee54ab70a9c48b1c
|
4
|
+
data.tar.gz: 71aea49728f74c048c92a37a000288ef381ea0f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 445fe45046e1ebea766c096ddfcf1aa31eabe3b166efd1027523deca681f6bec19d4c5cda8cd5e8d3af259839e25b04951ca2bca1a4ef65951c20f97d4ef9f1b
|
7
|
+
data.tar.gz: 3d20d7e3ea5caf5052236e109fbcf31178154467a28b42362a63a8cec7ff9a94655ea72ee6a673719400b79a4a61d1aac3a342d2235c8016eaf0c1dfb600b107
|
data/README.md
CHANGED
@@ -16,6 +16,20 @@ You can install FlexMock with the following command.
|
|
16
16
|
$ gem install flexmock
|
17
17
|
```
|
18
18
|
|
19
|
+
## Changes
|
20
|
+
|
21
|
+
Only significant changes (new APIs, deprecated APIs or backward-compatible
|
22
|
+
changes) are documented here, a.k.a. minor or major version bumps. If you want a
|
23
|
+
detailed changelog, go over the commit log in github (it's pretty low-traffic)
|
24
|
+
|
25
|
+
2.1.0:
|
26
|
+
|
27
|
+
- added `#and_iterates` to fix some shortcomings of `#and_yield` without
|
28
|
+
breaking backward compatibility
|
29
|
+
- strict partial mocks (and "based mocks" if `FlexMock.partials_are_based` is
|
30
|
+
set to true) are now based on the object's singleton class, instead of its
|
31
|
+
class.
|
32
|
+
|
19
33
|
## Simple Example
|
20
34
|
|
21
35
|
We have a data acquisition class (<code>TemperatureSampler</code>)
|
@@ -572,6 +586,15 @@ determining whether a given expectation matches or not.
|
|
572
586
|
|
573
587
|
Alias for `and_yield( ... )`.
|
574
588
|
|
589
|
+
* <b>and_iterates(<em>value1</em>, <em>value2></em>, ...)</b>
|
590
|
+
|
591
|
+
Declares that the mocked method will receive a block, and the mock
|
592
|
+
will iterate over the values given, calling the block once for each
|
593
|
+
value. Not providing a block will be an error. Providing more than one
|
594
|
+
`and_iterates` or `and_yield` clause one a single expectation will mean
|
595
|
+
that subsquent mock method calls will yield the values provided by the
|
596
|
+
additional `and_iterates`/`and_yield` clause.
|
597
|
+
|
575
598
|
* <b>pass_thru</b>
|
576
599
|
* <b>pass_thru { |<em>value</em>| .... }</b>
|
577
600
|
|
@@ -1,17 +1,13 @@
|
|
1
|
-
# Detecting whether a class has a definition for a method or not
|
2
|
-
# changes between Ruby 1.8 and Ruby 1.9. We introduce the
|
3
|
-
# "flexmock_defined?" method on class objects to have a portable way
|
4
|
-
# to determine that.
|
5
|
-
#
|
6
|
-
# NOTE: responds_to? isn't appropriate. We don't care if the object
|
7
|
-
# responds to the method or not. We want to know if the class
|
8
|
-
# has a definition for the method. A subtle difference.
|
9
|
-
#
|
10
1
|
class Class
|
11
|
-
|
12
|
-
#
|
2
|
+
# Does a class directly defines an instance method named "method_name"?
|
3
|
+
#
|
4
|
+
# Unlike Ruby's Class#instance_methods or #method_defined?, it ignores methods
|
5
|
+
# that have been defined by flexmock's partial mock facility
|
13
6
|
def flexmock_defined?(method_name)
|
14
|
-
|
7
|
+
ancestors.any? do |m|
|
8
|
+
methods = m.instance_methods(false)
|
9
|
+
next if methods.include?(:__flexmock_proxy) # This is a partial mock module
|
10
|
+
m.instance_methods(false).include?(method_name.flexmock_as_name)
|
11
|
+
end
|
15
12
|
end
|
16
|
-
|
17
13
|
end
|
data/lib/flexmock/expectation.rb
CHANGED
@@ -116,7 +116,9 @@ class FlexMock
|
|
116
116
|
block = args.last
|
117
117
|
values = (@yield_queue.size == 1) ? @yield_queue.first : @yield_queue.shift
|
118
118
|
if block && block.respond_to?(:call)
|
119
|
-
|
119
|
+
values.each do |v|
|
120
|
+
@return_value = block.call(*v)
|
121
|
+
end
|
120
122
|
else
|
121
123
|
fail MockError, "No Block given to mock with 'and_yield' expectation"
|
122
124
|
end
|
@@ -251,10 +253,30 @@ class FlexMock
|
|
251
253
|
# An error is raised if the mocked method is not called with a
|
252
254
|
# block.
|
253
255
|
def and_yield(*yield_values)
|
254
|
-
@yield_queue << yield_values
|
256
|
+
@yield_queue << [yield_values]
|
255
257
|
end
|
256
258
|
alias :yields :and_yield
|
257
259
|
|
260
|
+
# Declare that the mocked method is expected to be given a block
|
261
|
+
# and that the block will iterate over the provided values.
|
262
|
+
# If the mock is called multiple times, mulitple
|
263
|
+
# <tt>and_iterates</tt> declarations can be used to supply different
|
264
|
+
# values on each call.
|
265
|
+
#
|
266
|
+
# The iteration is queued with the yield values provided with {#and_yield}.
|
267
|
+
#
|
268
|
+
# An error is raised if the mocked method is not called with a
|
269
|
+
# block.
|
270
|
+
#
|
271
|
+
# @example interaction of and_yield and and_iterates
|
272
|
+
# mock.should_receive(:each).and_yield(10).and_iterates(1, 2, 3).and_yield(20)
|
273
|
+
# mock.enum_for(:each).to_a # => [10]
|
274
|
+
# mock.enum_for(:each).to_a # => [1,2,3]
|
275
|
+
# mock.enum_for(:each).to_a # => [20]
|
276
|
+
#
|
277
|
+
def and_iterates(*yield_values)
|
278
|
+
@yield_queue << yield_values
|
279
|
+
end
|
258
280
|
|
259
281
|
# :call-seq:
|
260
282
|
# and_raise(an_exception)
|
@@ -95,7 +95,7 @@ class FlexMock
|
|
95
95
|
# Set the base class if not defined and partials are based.
|
96
96
|
def set_base_class(opts)
|
97
97
|
if ! opts.base_class && opts.domain_obj && FlexMock.partials_are_based
|
98
|
-
opts.base_class = opts.domain_obj.
|
98
|
+
opts.base_class = opts.domain_obj.singleton_class
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
@@ -110,7 +110,7 @@ class FlexMock
|
|
110
110
|
if !opts.domain_obj
|
111
111
|
raise ArgumentError, "cannot use :strict outside a partial mock"
|
112
112
|
end
|
113
|
-
opts.base_class = opts.domain_obj.
|
113
|
+
opts.base_class = opts.domain_obj.singleton_class
|
114
114
|
else
|
115
115
|
opts.base_class = args.shift
|
116
116
|
end
|
data/lib/flexmock/version.rb
CHANGED
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.0
|
4
|
+
version: 2.1.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
12
|
date: 2016-04-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name: minitest
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
16
|
requirements:
|
18
17
|
- - ">="
|
19
18
|
- !ruby/object:Gem::Version
|
20
19
|
version: '0'
|
21
|
-
|
20
|
+
name: minitest
|
22
21
|
prerelease: false
|
22
|
+
type: :development
|
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
|
30
29
|
requirement: !ruby/object:Gem::Requirement
|
31
30
|
requirements:
|
32
31
|
- - ">="
|
33
32
|
- !ruby/object:Gem::Version
|
34
33
|
version: '0'
|
35
|
-
|
34
|
+
name: rake
|
36
35
|
prerelease: false
|
36
|
+
type: :development
|
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
|
44
43
|
requirement: !ruby/object:Gem::Requirement
|
45
44
|
requirements:
|
46
45
|
- - ">="
|
47
46
|
- !ruby/object:Gem::Version
|
48
47
|
version: 0.11.0
|
49
|
-
|
48
|
+
name: simplecov
|
50
49
|
prerelease: false
|
50
|
+
type: :development
|
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
|
58
57
|
requirement: !ruby/object:Gem::Requirement
|
59
58
|
requirements:
|
60
59
|
- - ">="
|
61
60
|
- !ruby/object:Gem::Version
|
62
61
|
version: '0'
|
63
|
-
|
62
|
+
name: coveralls
|
64
63
|
prerelease: false
|
64
|
+
type: :development
|
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
|
-
\
|
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,10 +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.
|
189
|
-
signing_key:
|
187
|
+
rubyforge_project:
|
188
|
+
rubygems_version: 2.4.8
|
189
|
+
signing_key:
|
190
190
|
specification_version: 4
|
191
191
|
summary: Simple and Flexible Mock Objects for Testing
|
192
192
|
test_files: []
|
193
|
-
has_rdoc:
|