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.
@@ -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