mocha 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 = RUBY_VERSION < '1.9' ? method.to_s : method.to_sym
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 3
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
- return parameter.include?(@items.first)
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])
@@ -0,0 +1,4 @@
1
+ module Mocha
2
+ PRE_RUBY_V19 = Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('1.9')
3
+ RUBY_V2_PLUS = Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2')
4
+ end
@@ -1,3 +1,3 @@
1
1
  module Mocha
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -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
- s.add_development_dependency("rake", ">= 0")
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
- unless ENV["MOCHA_NO_DOCS"]
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", "~> 1")
43
+ s.add_development_dependency("redcarpet")
36
44
  end
37
45
  else
38
- s.add_dependency("rake", ">= 0")
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
- unless ENV["MOCHA_NO_DOCS"]
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", "~> 1")
57
+ s.add_dependency("redcarpet")
43
58
  end
44
59
  end
45
60
  else
46
- s.add_dependency("rake", ">= 0")
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
- unless ENV["MOCHA_NO_DOCS"]
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", "~> 1")
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 RUBY_VERSION >= '2.0'
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
- assert_method_visiblity instance, :my_instance_method, :public
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
- assert_method_visiblity instance, :my_instance_method, :protected
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
- assert_method_visiblity instance, :my_instance_method, :private
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 test_should_be_able_to_stub_a_superclass_method
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
- assert_method_visiblity klass, :my_class_method, :public
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
- assert_method_visiblity klass, :my_class_method, :protected
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
- assert_method_visiblity klass, :my_class_method, :private
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
- assert_method_visiblity instance, :my_instance_method, :public
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
- assert_method_visiblity instance, :my_instance_method, :protected
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
- assert_method_visiblity instance, :my_instance_method, :private
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
- def test_should_allow_stubbing_method_on_nil
17
- Mocha::Configuration.allow(:stubbing_method_on_nil)
18
- test_result = run_as_test do
19
- nil.stubs(:stubbed_method)
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
- def test_should_warn_on_stubbing_method_on_nil
26
- Mocha::Configuration.warn_when(:stubbing_method_on_nil)
27
- test_result = run_as_test do
28
- nil.stubs(:stubbed_method)
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
- def test_should_prevent_stubbing_method_on_nil
35
- Mocha::Configuration.prevent(:stubbing_method_on_nil)
36
- test_result = run_as_test do
37
- nil.stubs(:stubbed_method)
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
- def test_should_default_to_prevent_stubbing_method_on_non_mock_object
44
- test_result = run_as_test do
45
- nil.stubs(:stubbed_method)
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
- def test_should_allow_stubbing_method_on_non_nil_object
52
- Mocha::Configuration.prevent(:stubbing_method_on_nil)
53
- object = Object.new
54
- test_result = run_as_test do
55
- object.stubs(:stubbed_method)
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