mocha 1.1.0 → 1.2.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 +4 -4
- data/README.md +90 -3
- data/RELEASE.md +17 -0
- data/Rakefile +15 -5
- data/bin/build-matrix +0 -1
- data/gemfiles/Gemfile.test-unit.latest +5 -1
- data/lib/mocha/any_instance_method.rb +17 -29
- data/lib/mocha/api.rb +2 -2
- data/lib/mocha/class_method.rb +28 -36
- data/lib/mocha/class_methods.rb +1 -0
- data/lib/mocha/integration/monkey_patcher.rb +13 -5
- data/lib/mocha/mockery.rb +2 -1
- data/lib/mocha/parameter_matchers/equals.rb +1 -1
- data/lib/mocha/parameter_matchers/includes.rb +45 -2
- data/lib/mocha/ruby_version.rb +4 -0
- data/lib/mocha/version.rb +1 -1
- data/mocha.gemspec +31 -9
- data/test/acceptance/prepend_test.rb +2 -1
- data/test/acceptance/stub_any_instance_method_test.rb +50 -8
- data/test/acceptance/stub_class_method_defined_on_class_test.rb +3 -3
- data/test/acceptance/stub_instance_method_defined_on_class_test.rb +3 -3
- data/test/acceptance/stub_instance_method_defined_on_module_test.rb +3 -0
- data/test/acceptance/stub_method_defined_on_module_and_aliased_test.rb +39 -0
- data/test/acceptance/stubbing_nil_test.rb +35 -33
- data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +13 -0
- data/test/assertions.rb +6 -4
- data/test/minitest_result.rb +2 -2
- data/test/test_runner.rb +1 -1
- data/test/unit/any_instance_method_test.rb +2 -0
- data/test/unit/class_method_test.rb +2 -0
- data/test/unit/mock_test.rb +2 -1
- data/test/unit/object_inspect_test.rb +2 -1
- data/test/unit/parameter_matchers/includes_test.rb +43 -0
- metadata +38 -21
data/lib/mocha/mockery.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'mocha/ruby_version'
|
1
2
|
require 'mocha/central'
|
2
3
|
require 'mocha/mock'
|
3
4
|
require 'mocha/names'
|
@@ -97,7 +98,7 @@ module Mocha
|
|
97
98
|
end
|
98
99
|
|
99
100
|
def on_stubbing(object, method)
|
100
|
-
method =
|
101
|
+
method = PRE_RUBY_V19 ? method.to_s : method.to_sym
|
101
102
|
unless Mocha::Configuration.allow?(:stubbing_non_existent_method)
|
102
103
|
unless object.method_exists?(method, include_public_methods = true)
|
103
104
|
on_stubbing_non_existent_method(object, method)
|
@@ -22,7 +22,7 @@ module Mocha
|
|
22
22
|
# object = mock()
|
23
23
|
# object.expects(:method_1).with(equals(2))
|
24
24
|
# object.method_1(3)
|
25
|
-
# # error raised, because method_1 was not called with an +Object+ that equals
|
25
|
+
# # error raised, because method_1 was not called with an +Object+ that equals 2
|
26
26
|
def equals(value)
|
27
27
|
Equals.new(value)
|
28
28
|
end
|
@@ -22,6 +22,46 @@ module Mocha
|
|
22
22
|
# @example Actual parameter does not include all items.
|
23
23
|
# object.method_1(['foo', 'baz'])
|
24
24
|
# # error raised, because ['foo', 'baz'] does not include 'bar'.
|
25
|
+
#
|
26
|
+
# @example Actual parameter includes item which matches nested matcher.
|
27
|
+
# object = mock()
|
28
|
+
# object.expects(:method_1).with(includes(has_key(:key)))
|
29
|
+
# object.method_1(['foo', 'bar', {:key => 'baz'}])
|
30
|
+
# # no error raised
|
31
|
+
#
|
32
|
+
# @example Actual parameter does not include item matching nested matcher.
|
33
|
+
# object.method_1(['foo', 'bar', {:other_key => 'baz'}])
|
34
|
+
# # error raised, because no element matches `has_key(:key)` matcher
|
35
|
+
#
|
36
|
+
# @example Actual parameter is a String including substring.
|
37
|
+
# object = mock()
|
38
|
+
# object.expects(:method_1).with(includes('bar'))
|
39
|
+
# object.method_1('foobarbaz')
|
40
|
+
# # no error raised
|
41
|
+
#
|
42
|
+
# @example Actual parameter is a String not including substring.
|
43
|
+
# object.method_1('foobaz')
|
44
|
+
# # error raised, because 'foobaz' does not include 'bar'
|
45
|
+
#
|
46
|
+
# @example Actual parameter is a Hash including the given key.
|
47
|
+
# object = mock()
|
48
|
+
# object.expects(:method_1).with(includes(:bar))
|
49
|
+
# object.method_1({:foo => 1, :bar => 2})
|
50
|
+
# # no error raised
|
51
|
+
#
|
52
|
+
# @example Actual parameter is a Hash without the given key.
|
53
|
+
# object.method_1({:foo => 1, :baz => 2})
|
54
|
+
# # error raised, because hash does not include key 'bar'
|
55
|
+
#
|
56
|
+
# @example Actual parameter is a Hash with a key matching the given matcher.
|
57
|
+
# object = mock()
|
58
|
+
# object.expects(:method_1).with(includes(regexp_matches(/ar/)))
|
59
|
+
# object.method_1({'foo' => 1, 'bar' => 2})
|
60
|
+
# # no error raised
|
61
|
+
#
|
62
|
+
# @example Actual parameter is a Hash no key matching the given matcher.
|
63
|
+
# object.method_1({'foo' => 1, 'baz' => 3})
|
64
|
+
# # error raised, because hash does not include a key matching /ar/
|
25
65
|
def includes(*items)
|
26
66
|
Includes.new(*items)
|
27
67
|
end
|
@@ -38,9 +78,12 @@ module Mocha
|
|
38
78
|
def matches?(available_parameters)
|
39
79
|
parameter = available_parameters.shift
|
40
80
|
return false unless parameter.respond_to?(:include?)
|
41
|
-
|
42
81
|
if @items.size == 1
|
43
|
-
|
82
|
+
if parameter.respond_to?(:any?) && !parameter.is_a?(String)
|
83
|
+
return parameter.any? { |(p,_)| @items.first.to_matcher.matches?([p]) }
|
84
|
+
else
|
85
|
+
return parameter.include?(@items.first)
|
86
|
+
end
|
44
87
|
else
|
45
88
|
includes_matchers = @items.map { |item| Includes.new(item) }
|
46
89
|
AllOf.new(*includes_matchers).matches?([parameter])
|
data/lib/mocha/version.rb
CHANGED
data/mocha.gemspec
CHANGED
@@ -6,6 +6,7 @@ require "mocha/version"
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "mocha"
|
8
8
|
s.version = Mocha::VERSION
|
9
|
+
s.licenses = ['MIT', 'BSD-2-Clause']
|
9
10
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
12
|
s.authors = ["James Mead"]
|
@@ -28,26 +29,47 @@ Gem::Specification.new do |s|
|
|
28
29
|
s.specification_version = 3
|
29
30
|
|
30
31
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
31
|
-
|
32
|
+
if RUBY_VERSION >= '1.9.3'
|
33
|
+
s.add_development_dependency("rake", ">= 0")
|
34
|
+
else
|
35
|
+
s.add_development_dependency("rake", "~> 10.0")
|
36
|
+
end
|
32
37
|
s.add_development_dependency("introspection", "~> 0.0.1")
|
33
|
-
|
38
|
+
if RUBY_VERSION >= '2.2.0'
|
39
|
+
s.add_development_dependency("minitest")
|
40
|
+
end
|
41
|
+
if ENV["MOCHA_GENERATE_DOCS"]
|
34
42
|
s.add_development_dependency("yard")
|
35
|
-
s.add_development_dependency("redcarpet"
|
43
|
+
s.add_development_dependency("redcarpet")
|
36
44
|
end
|
37
45
|
else
|
38
|
-
|
46
|
+
if RUBY_VERSION >= '1.9.3'
|
47
|
+
s.add_development_dependency("rake", ">= 0")
|
48
|
+
else
|
49
|
+
s.add_development_dependency("rake", "~> 10.0")
|
50
|
+
end
|
39
51
|
s.add_dependency("introspection", "~> 0.0.1")
|
40
|
-
|
52
|
+
if RUBY_VERSION >= '2.2.0'
|
53
|
+
s.add_dependency("minitest")
|
54
|
+
end
|
55
|
+
if ENV["MOCHA_GENERATE_DOCS"]
|
41
56
|
s.add_dependency("yard")
|
42
|
-
s.add_dependency("redcarpet"
|
57
|
+
s.add_dependency("redcarpet")
|
43
58
|
end
|
44
59
|
end
|
45
60
|
else
|
46
|
-
|
61
|
+
if RUBY_VERSION >= '1.9.3'
|
62
|
+
s.add_development_dependency("rake", ">= 0")
|
63
|
+
else
|
64
|
+
s.add_development_dependency("rake", "~> 10.0")
|
65
|
+
end
|
47
66
|
s.add_dependency("introspection", "~> 0.0.1")
|
48
|
-
|
67
|
+
if RUBY_VERSION >= '2.2.0'
|
68
|
+
s.add_dependency("minitest")
|
69
|
+
end
|
70
|
+
if ENV["MOCHA_GENERATE_DOCS"]
|
49
71
|
s.add_dependency("yard")
|
50
|
-
s.add_dependency("redcarpet"
|
72
|
+
s.add_dependency("redcarpet")
|
51
73
|
end
|
52
74
|
end
|
53
75
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require File.expand_path('../acceptance_test_helper', __FILE__)
|
2
2
|
require 'mocha/setup'
|
3
|
+
require 'mocha/ruby_version'
|
3
4
|
|
4
5
|
class PrependTest < Mocha::TestCase
|
5
6
|
|
@@ -13,7 +14,7 @@ class PrependTest < Mocha::TestCase
|
|
13
14
|
teardown_acceptance_test
|
14
15
|
end
|
15
16
|
|
16
|
-
if
|
17
|
+
if Mocha::RUBY_V2_PLUS
|
17
18
|
|
18
19
|
module Mod1
|
19
20
|
def my_method
|
@@ -22,7 +22,7 @@ class StubAnyInstanceMethodTest < Mocha::TestCase
|
|
22
22
|
instance = klass.new
|
23
23
|
test_result = run_as_test do
|
24
24
|
klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
|
25
|
-
|
25
|
+
assert_method_visibility instance, :my_instance_method, :public
|
26
26
|
assert_equal :new_return_value, instance.my_instance_method
|
27
27
|
end
|
28
28
|
assert_passed(test_result)
|
@@ -77,7 +77,7 @@ class StubAnyInstanceMethodTest < Mocha::TestCase
|
|
77
77
|
instance = klass.new
|
78
78
|
test_result = run_as_test do
|
79
79
|
klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
|
80
|
-
|
80
|
+
assert_method_visibility instance, :my_instance_method, :protected
|
81
81
|
end
|
82
82
|
assert_passed(test_result)
|
83
83
|
end
|
@@ -109,7 +109,7 @@ class StubAnyInstanceMethodTest < Mocha::TestCase
|
|
109
109
|
instance = klass.new
|
110
110
|
test_result = run_as_test do
|
111
111
|
klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
|
112
|
-
|
112
|
+
assert_method_visibility instance, :my_instance_method, :private
|
113
113
|
end
|
114
114
|
assert_passed(test_result)
|
115
115
|
end
|
@@ -127,16 +127,18 @@ class StubAnyInstanceMethodTest < Mocha::TestCase
|
|
127
127
|
assert_equal 0, klass.any_instance.mocha.__expectations__.length
|
128
128
|
end
|
129
129
|
|
130
|
-
def
|
130
|
+
def test_should_be_able_to_stub_a_public_superclass_method
|
131
131
|
superklass = Class.new do
|
132
132
|
def my_superclass_method
|
133
133
|
:original_return_value
|
134
134
|
end
|
135
|
+
public :my_superclass_method
|
135
136
|
end
|
136
137
|
klass = Class.new(superklass)
|
137
138
|
instance = klass.new
|
138
139
|
test_result = run_as_test do
|
139
140
|
klass.any_instance.stubs(:my_superclass_method).returns(:new_return_value)
|
141
|
+
assert_method_visibility instance, :my_superclass_method, :public
|
140
142
|
assert_equal :new_return_value, instance.my_superclass_method
|
141
143
|
end
|
142
144
|
assert_passed(test_result)
|
@@ -145,6 +147,46 @@ class StubAnyInstanceMethodTest < Mocha::TestCase
|
|
145
147
|
assert_equal :original_return_value, instance.my_superclass_method
|
146
148
|
end
|
147
149
|
|
150
|
+
def test_should_be_able_to_stub_a_protected_superclass_method
|
151
|
+
superklass = Class.new do
|
152
|
+
def my_superclass_method
|
153
|
+
:original_return_value
|
154
|
+
end
|
155
|
+
protected :my_superclass_method
|
156
|
+
end
|
157
|
+
klass = Class.new(superklass)
|
158
|
+
instance = klass.new
|
159
|
+
test_result = run_as_test do
|
160
|
+
klass.any_instance.stubs(:my_superclass_method).returns(:new_return_value)
|
161
|
+
assert_method_visibility instance, :my_superclass_method, :protected
|
162
|
+
assert_equal :new_return_value, instance.send(:my_superclass_method)
|
163
|
+
end
|
164
|
+
assert_passed(test_result)
|
165
|
+
assert instance.protected_methods(true).any? { |m| m.to_s == 'my_superclass_method' }
|
166
|
+
assert !klass.protected_methods(false).any? { |m| m.to_s == 'my_superclass_method' }
|
167
|
+
assert_equal :original_return_value, instance.send(:my_superclass_method)
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_should_be_able_to_stub_a_private_superclass_method
|
171
|
+
superklass = Class.new do
|
172
|
+
def my_superclass_method
|
173
|
+
:original_return_value
|
174
|
+
end
|
175
|
+
private :my_superclass_method
|
176
|
+
end
|
177
|
+
klass = Class.new(superklass)
|
178
|
+
instance = klass.new
|
179
|
+
test_result = run_as_test do
|
180
|
+
klass.any_instance.stubs(:my_superclass_method).returns(:new_return_value)
|
181
|
+
assert_method_visibility instance, :my_superclass_method, :private
|
182
|
+
assert_equal :new_return_value, instance.send(:my_superclass_method)
|
183
|
+
end
|
184
|
+
assert_passed(test_result)
|
185
|
+
assert instance.private_methods(true).any? { |m| m.to_s == 'my_superclass_method' }
|
186
|
+
assert !klass.private_methods(false).any? { |m| m.to_s == 'my_superclass_method' }
|
187
|
+
assert_equal :original_return_value, instance.send(:my_superclass_method)
|
188
|
+
end
|
189
|
+
|
148
190
|
def test_should_be_able_to_stub_method_if_ruby18_public_instance_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
|
149
191
|
ruby18_klass = Class.new do
|
150
192
|
class << self
|
@@ -185,7 +227,7 @@ class StubAnyInstanceMethodTest < Mocha::TestCase
|
|
185
227
|
end
|
186
228
|
test_result = run_as_test do
|
187
229
|
ruby18_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
|
188
|
-
assert_equal :new_return_value, ruby18_klass.new.my_instance_method
|
230
|
+
assert_equal :new_return_value, ruby18_klass.new.send(:my_instance_method)
|
189
231
|
end
|
190
232
|
assert_passed(test_result)
|
191
233
|
end
|
@@ -200,7 +242,7 @@ class StubAnyInstanceMethodTest < Mocha::TestCase
|
|
200
242
|
end
|
201
243
|
test_result = run_as_test do
|
202
244
|
ruby19_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
|
203
|
-
assert_equal :new_return_value, ruby19_klass.new.my_instance_method
|
245
|
+
assert_equal :new_return_value, ruby19_klass.new.send(:my_instance_method)
|
204
246
|
end
|
205
247
|
assert_passed(test_result)
|
206
248
|
end
|
@@ -215,7 +257,7 @@ class StubAnyInstanceMethodTest < Mocha::TestCase
|
|
215
257
|
end
|
216
258
|
test_result = run_as_test do
|
217
259
|
ruby18_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
|
218
|
-
assert_equal :new_return_value, ruby18_klass.new.my_instance_method
|
260
|
+
assert_equal :new_return_value, ruby18_klass.new.send(:my_instance_method)
|
219
261
|
end
|
220
262
|
assert_passed(test_result)
|
221
263
|
end
|
@@ -230,7 +272,7 @@ class StubAnyInstanceMethodTest < Mocha::TestCase
|
|
230
272
|
end
|
231
273
|
test_result = run_as_test do
|
232
274
|
ruby19_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
|
233
|
-
assert_equal :new_return_value, ruby19_klass.new.my_instance_method
|
275
|
+
assert_equal :new_return_value, ruby19_klass.new.send(:my_instance_method)
|
234
276
|
end
|
235
277
|
assert_passed(test_result)
|
236
278
|
end
|
@@ -26,7 +26,7 @@ class StubClassMethodDefinedOnClassTest < Mocha::TestCase
|
|
26
26
|
assert_snapshot_unchanged(klass) do
|
27
27
|
test_result = run_as_test do
|
28
28
|
klass.stubs(:my_class_method).returns(:new_return_value)
|
29
|
-
|
29
|
+
assert_method_visibility klass, :my_class_method, :public
|
30
30
|
assert_equal :new_return_value, klass.my_class_method
|
31
31
|
end
|
32
32
|
assert_passed(test_result)
|
@@ -47,7 +47,7 @@ class StubClassMethodDefinedOnClassTest < Mocha::TestCase
|
|
47
47
|
assert_snapshot_unchanged(klass) do
|
48
48
|
test_result = run_as_test do
|
49
49
|
klass.stubs(:my_class_method).returns(:new_return_value)
|
50
|
-
|
50
|
+
assert_method_visibility klass, :my_class_method, :protected
|
51
51
|
assert_equal :new_return_value, klass.send(:my_class_method)
|
52
52
|
end
|
53
53
|
assert_passed(test_result)
|
@@ -68,7 +68,7 @@ class StubClassMethodDefinedOnClassTest < Mocha::TestCase
|
|
68
68
|
assert_snapshot_unchanged(klass) do
|
69
69
|
test_result = run_as_test do
|
70
70
|
klass.stubs(:my_class_method).returns(:new_return_value)
|
71
|
-
|
71
|
+
assert_method_visibility klass, :my_class_method, :private
|
72
72
|
assert_equal :new_return_value, klass.send(:my_class_method)
|
73
73
|
end
|
74
74
|
assert_passed(test_result)
|
@@ -23,7 +23,7 @@ class StubInstanceMethodDefinedOnClassTest < Mocha::TestCase
|
|
23
23
|
assert_snapshot_unchanged(instance) do
|
24
24
|
test_result = run_as_test do
|
25
25
|
instance.stubs(:my_instance_method).returns(:new_return_value)
|
26
|
-
|
26
|
+
assert_method_visibility instance, :my_instance_method, :public
|
27
27
|
assert_equal :new_return_value, instance.my_instance_method
|
28
28
|
end
|
29
29
|
assert_passed(test_result)
|
@@ -41,7 +41,7 @@ class StubInstanceMethodDefinedOnClassTest < Mocha::TestCase
|
|
41
41
|
assert_snapshot_unchanged(instance) do
|
42
42
|
test_result = run_as_test do
|
43
43
|
instance.stubs(:my_instance_method).returns(:new_return_value)
|
44
|
-
|
44
|
+
assert_method_visibility instance, :my_instance_method, :protected
|
45
45
|
assert_equal :new_return_value, instance.send(:my_instance_method)
|
46
46
|
end
|
47
47
|
assert_passed(test_result)
|
@@ -59,7 +59,7 @@ class StubInstanceMethodDefinedOnClassTest < Mocha::TestCase
|
|
59
59
|
assert_snapshot_unchanged(instance) do
|
60
60
|
test_result = run_as_test do
|
61
61
|
instance.stubs(:my_instance_method).returns(:new_return_value)
|
62
|
-
|
62
|
+
assert_method_visibility instance, :my_instance_method, :private
|
63
63
|
assert_equal :new_return_value, instance.send(:my_instance_method)
|
64
64
|
end
|
65
65
|
assert_passed(test_result)
|
@@ -26,6 +26,7 @@ class StubInstanceMethodDefinedOnModuleTest < Mocha::TestCase
|
|
26
26
|
assert_snapshot_unchanged(instance) do
|
27
27
|
test_result = run_as_test do
|
28
28
|
instance.stubs(:my_module_method).returns(:new_return_value)
|
29
|
+
assert_method_visibility instance, :my_module_method, :public
|
29
30
|
assert_equal :new_return_value, instance.my_module_method
|
30
31
|
end
|
31
32
|
assert_passed(test_result)
|
@@ -46,6 +47,7 @@ class StubInstanceMethodDefinedOnModuleTest < Mocha::TestCase
|
|
46
47
|
assert_snapshot_unchanged(instance) do
|
47
48
|
test_result = run_as_test do
|
48
49
|
instance.stubs(:my_module_method).returns(:new_return_value)
|
50
|
+
assert_method_visibility instance, :my_module_method, :protected
|
49
51
|
assert_equal :new_return_value, instance.send(:my_module_method)
|
50
52
|
end
|
51
53
|
assert_passed(test_result)
|
@@ -66,6 +68,7 @@ class StubInstanceMethodDefinedOnModuleTest < Mocha::TestCase
|
|
66
68
|
assert_snapshot_unchanged(instance) do
|
67
69
|
test_result = run_as_test do
|
68
70
|
instance.stubs(:my_module_method).returns(:new_return_value)
|
71
|
+
assert_method_visibility instance, :my_module_method, :private
|
69
72
|
assert_equal :new_return_value, instance.send(:my_module_method)
|
70
73
|
end
|
71
74
|
assert_passed(test_result)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path('../acceptance_test_helper', __FILE__)
|
2
|
+
require 'mocha/setup'
|
3
|
+
|
4
|
+
unless Mocha::PRE_RUBY_V19
|
5
|
+
class StubMethodDefinedOnModuleAndAliasedTest < Mocha::TestCase
|
6
|
+
include AcceptanceTest
|
7
|
+
|
8
|
+
def setup
|
9
|
+
setup_acceptance_test
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
teardown_acceptance_test
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_stubbing_class_method_defined_by_aliasing_module_instance_method
|
17
|
+
mod = Module.new do
|
18
|
+
def module_instance_method
|
19
|
+
'module-instance-method'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
klass = Class.new do
|
24
|
+
extend mod
|
25
|
+
class << self
|
26
|
+
alias_method :aliased_module_instance_method, :module_instance_method
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
assert_snapshot_unchanged(klass) do
|
31
|
+
test_result = run_as_test do
|
32
|
+
klass.stubs(:aliased_module_instance_method).returns('stubbed-aliased-module-instance-method')
|
33
|
+
assert_equal 'stubbed-aliased-module-instance-method', klass.aliased_module_instance_method
|
34
|
+
end
|
35
|
+
assert_passed(test_result)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -13,47 +13,49 @@ class StubbingNilTest < Mocha::TestCase
|
|
13
13
|
teardown_acceptance_test
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
if RUBY_VERSION < '2.2.0'
|
17
|
+
def test_should_allow_stubbing_method_on_nil
|
18
|
+
Mocha::Configuration.allow(:stubbing_method_on_nil)
|
19
|
+
test_result = run_as_test do
|
20
|
+
nil.stubs(:stubbed_method)
|
21
|
+
end
|
22
|
+
assert_passed(test_result)
|
23
|
+
assert !@logger.warnings.include?("stubbing method on nil: nil.stubbed_method")
|
20
24
|
end
|
21
|
-
assert_passed(test_result)
|
22
|
-
assert !@logger.warnings.include?("stubbing method on nil: nil.stubbed_method")
|
23
|
-
end
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
def test_should_warn_on_stubbing_method_on_nil
|
27
|
+
Mocha::Configuration.warn_when(:stubbing_method_on_nil)
|
28
|
+
test_result = run_as_test do
|
29
|
+
nil.stubs(:stubbed_method)
|
30
|
+
end
|
31
|
+
assert_passed(test_result)
|
32
|
+
assert @logger.warnings.include?("stubbing method on nil: nil.stubbed_method")
|
29
33
|
end
|
30
|
-
assert_passed(test_result)
|
31
|
-
assert @logger.warnings.include?("stubbing method on nil: nil.stubbed_method")
|
32
|
-
end
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
def test_should_prevent_stubbing_method_on_nil
|
36
|
+
Mocha::Configuration.prevent(:stubbing_method_on_nil)
|
37
|
+
test_result = run_as_test do
|
38
|
+
nil.stubs(:stubbed_method)
|
39
|
+
end
|
40
|
+
assert_failed(test_result)
|
41
|
+
assert test_result.error_messages.include?("Mocha::StubbingError: stubbing method on nil: nil.stubbed_method")
|
38
42
|
end
|
39
|
-
assert_failed(test_result)
|
40
|
-
assert test_result.error_messages.include?("Mocha::StubbingError: stubbing method on nil: nil.stubbed_method")
|
41
|
-
end
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
def test_should_default_to_prevent_stubbing_method_on_non_mock_object
|
45
|
+
test_result = run_as_test do
|
46
|
+
nil.stubs(:stubbed_method)
|
47
|
+
end
|
48
|
+
assert_failed(test_result)
|
49
|
+
assert test_result.error_messages.include?("Mocha::StubbingError: stubbing method on nil: nil.stubbed_method")
|
46
50
|
end
|
47
|
-
assert_failed(test_result)
|
48
|
-
assert test_result.error_messages.include?("Mocha::StubbingError: stubbing method on nil: nil.stubbed_method")
|
49
|
-
end
|
50
51
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
def test_should_allow_stubbing_method_on_non_nil_object
|
53
|
+
Mocha::Configuration.prevent(:stubbing_method_on_nil)
|
54
|
+
object = Object.new
|
55
|
+
test_result = run_as_test do
|
56
|
+
object.stubs(:stubbed_method)
|
57
|
+
end
|
58
|
+
assert_passed(test_result)
|
56
59
|
end
|
57
|
-
assert_passed(test_result)
|
58
60
|
end
|
59
61
|
end
|