flexmock 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/flexmock/core.rb +2 -0
- data/lib/flexmock/core_class_methods.rb +34 -1
- data/lib/flexmock/expectation_director.rb +3 -2
- data/lib/flexmock/partial_mock.rb +1 -0
- data/lib/flexmock/spy_describers.rb +3 -10
- data/lib/flexmock/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98384ea13adbc6183d9341511891b3a9f8f03d45
|
4
|
+
data.tar.gz: 3590aed927dd2b5639cd89bc5ef4a94721cc019a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81593e3d1ac8834dfa7a2984a5673979b9a609cd2269711be7ddaa989f31542066bbec7a26b927f9d268a0880a332d26b7db70e642abac4aa24579cadc09c933
|
7
|
+
data.tar.gz: 157647079491431589151fd0a1297c7b78d8b179b73ff2e97fc2d7415cf3f8b25bf0985d5577b210490633291e83e2e4bdae57014ff2cc5140640ed28cb5f6bf
|
data/lib/flexmock/core.rb
CHANGED
@@ -106,6 +106,8 @@ class FlexMock
|
|
106
106
|
|
107
107
|
# Handle missing methods by attempting to look up a handler.
|
108
108
|
def method_missing(sym, *args, &block)
|
109
|
+
FlexMock.verify_mocking_allowed!
|
110
|
+
|
109
111
|
enhanced_args = block_given? ? args + [block] : args
|
110
112
|
call_record = CallRecord.new(sym, enhanced_args, block_given?)
|
111
113
|
@calls << call_record
|
@@ -48,6 +48,34 @@ class FlexMock
|
|
48
48
|
container.flexmock_teardown
|
49
49
|
end
|
50
50
|
|
51
|
+
FORBID_MOCKING = :__flexmock_forbid_mocking
|
52
|
+
|
53
|
+
# Forbid mock calls to happen while the block is being evaluated
|
54
|
+
#
|
55
|
+
# @param [Object] mocking_forbidden_return the return value that should be
|
56
|
+
# used if a mocking call has happened. If no mocking calls happened,
|
57
|
+
# returns the return value of the block
|
58
|
+
def forbid_mocking(mocking_forbidden_return = nil)
|
59
|
+
current, Thread.current[FORBID_MOCKING] =
|
60
|
+
Thread.current[FORBID_MOCKING], true
|
61
|
+
|
62
|
+
catch(FORBID_MOCKING) do
|
63
|
+
return yield
|
64
|
+
end
|
65
|
+
mocking_forbidden_return
|
66
|
+
|
67
|
+
ensure
|
68
|
+
Thread.current[FORBID_MOCKING] = current
|
69
|
+
end
|
70
|
+
|
71
|
+
# Verify that mocking is allowed in the current context. Throws if it is
|
72
|
+
# not.
|
73
|
+
def verify_mocking_allowed!
|
74
|
+
if Thread.current[FORBID_MOCKING]
|
75
|
+
throw FORBID_MOCKING
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
51
79
|
# Class method to format a method name and argument list as a nice
|
52
80
|
# looking string.
|
53
81
|
def format_call(sym, args) # :nodoc:
|
@@ -58,7 +86,12 @@ class FlexMock
|
|
58
86
|
# parenthesis).
|
59
87
|
def format_args(args)
|
60
88
|
if args
|
61
|
-
args.
|
89
|
+
args = args.map do |a|
|
90
|
+
FlexMock.forbid_mocking("<recursive call to mocked method in #inspect>") do
|
91
|
+
a.inspect
|
92
|
+
end
|
93
|
+
end
|
94
|
+
args.join(', ')
|
62
95
|
else
|
63
96
|
"*args"
|
64
97
|
end
|
@@ -39,8 +39,9 @@ class FlexMock
|
|
39
39
|
exp = find_expectation(*args)
|
40
40
|
call_record.expectation = exp if call_record
|
41
41
|
FlexMock.check(
|
42
|
-
"no matching handler found for " +
|
43
|
-
|
42
|
+
proc { "no matching handler found for " +
|
43
|
+
FlexMock.format_call(@sym, args) }
|
44
|
+
) { !exp.nil? }
|
44
45
|
returned_value = exp.verify_call(*args)
|
45
46
|
returned_value
|
46
47
|
end
|
@@ -3,7 +3,7 @@ class FlexMock
|
|
3
3
|
module SpyDescribers
|
4
4
|
def spy_description(spy, sym, args, options)
|
5
5
|
result = "have received "
|
6
|
-
result <<
|
6
|
+
result << FlexMock.format_call(sym, args)
|
7
7
|
result << times_description(options[:times])
|
8
8
|
result << block_description(options[:with_block])
|
9
9
|
result
|
@@ -19,7 +19,7 @@ class FlexMock
|
|
19
19
|
|
20
20
|
def describe_spy(spy, sym, args, options, not_clause="")
|
21
21
|
result = "expected "
|
22
|
-
result <<
|
22
|
+
result << FlexMock.format_call(sym, args)
|
23
23
|
result << " to#{not_clause} be received by " << spy.inspect
|
24
24
|
result << times_description(options[:times])
|
25
25
|
result << block_description(options[:with_block])
|
@@ -44,7 +44,7 @@ class FlexMock
|
|
44
44
|
def append_call_record(result, call_record)
|
45
45
|
result <<
|
46
46
|
" " <<
|
47
|
-
|
47
|
+
FlexMock.format_call(call_record.method_name, call_record.args)
|
48
48
|
if call_record.expectation
|
49
49
|
result <<
|
50
50
|
" matched by " <<
|
@@ -79,13 +79,6 @@ class FlexMock
|
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
|
-
def call_description(sym, args)
|
83
|
-
if args
|
84
|
-
"#{sym}(#{args.map { |o| o.inspect }.join(', ')})"
|
85
|
-
else
|
86
|
-
"#{sym}(...)"
|
87
|
-
end
|
88
|
-
end
|
89
82
|
extend SpyDescribers
|
90
83
|
end
|
91
84
|
|
data/lib/flexmock/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flexmock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Weirich
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-11-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -176,3 +176,4 @@ signing_key:
|
|
176
176
|
specification_version: 4
|
177
177
|
summary: Simple and Flexible Mock Objects for Testing
|
178
178
|
test_files: []
|
179
|
+
has_rdoc:
|