mocha 1.1.0 → 1.2.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 +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
@@ -64,6 +64,19 @@ class StubbingNonExistentAnyInstanceMethodTest < Mocha::TestCase
|
|
64
64
|
assert_passed(test_result)
|
65
65
|
end
|
66
66
|
|
67
|
+
def test_should_allow_stubbing_method_to_which_any_instance_responds
|
68
|
+
Mocha::Configuration.prevent(:stubbing_non_existent_method)
|
69
|
+
klass = Class.new do
|
70
|
+
def respond_to?(method, include_private = false)
|
71
|
+
(method == :method_to_which_instance_responds)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
test_result = run_as_test do
|
75
|
+
klass.any_instance.stubs(:method_to_which_instance_responds)
|
76
|
+
end
|
77
|
+
assert_passed(test_result)
|
78
|
+
end
|
79
|
+
|
67
80
|
def test_should_allow_stubbing_existing_protected_any_instance_method
|
68
81
|
Mocha::Configuration.prevent(:stubbing_non_existent_method)
|
69
82
|
klass = Class.new do
|
data/test/assertions.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
require 'mocha/ruby_version'
|
2
|
+
|
1
3
|
module Assertions
|
2
|
-
def
|
3
|
-
method_key =
|
4
|
-
assert object.send("#{visiblity}_methods"
|
4
|
+
def assert_method_visibility(object, method_name, visiblity)
|
5
|
+
method_key = Mocha::PRE_RUBY_V19 ? method_name.to_s : method_name.to_sym
|
6
|
+
assert object.send("#{visiblity}_methods").include?(method_key), "#{method_name} is not #{visiblity}"
|
5
7
|
end
|
6
|
-
end
|
8
|
+
end
|
data/test/minitest_result.rb
CHANGED
@@ -20,7 +20,7 @@ class MinitestResult
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def failures
|
23
|
-
@tests.map(&:failures).flatten.select { |r| Minitest::Assertion
|
23
|
+
@tests.map(&:failures).flatten.select { |r| r.instance_of?(Minitest::Assertion) }.map { |f| Failure.new(f) }
|
24
24
|
end
|
25
25
|
|
26
26
|
def failure_count
|
@@ -32,7 +32,7 @@ class MinitestResult
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def errors
|
35
|
-
@tests.map(&:failures).flatten.select { |r| Minitest::UnexpectedError
|
35
|
+
@tests.map(&:failures).flatten.select { |r| r.instance_of?(Minitest::UnexpectedError) }
|
36
36
|
end
|
37
37
|
|
38
38
|
def error_count
|
data/test/test_runner.rb
CHANGED
@@ -49,7 +49,7 @@ module TestRunner
|
|
49
49
|
|
50
50
|
def assert_passed(test_result)
|
51
51
|
flunk "Test failed unexpectedly with message: #{test_result.failures}" if test_result.failure_count > 0
|
52
|
-
flunk "Test failed unexpectedly with message: #{test_result.errors}" if test_result.error_count > 0
|
52
|
+
flunk "Test failed unexpectedly with message: #{test_result.errors.map(&:exception)}" if test_result.error_count > 0
|
53
53
|
end
|
54
54
|
|
55
55
|
def assert_failed(test_result)
|
@@ -7,6 +7,7 @@ class AnyInstanceMethodTest < Mocha::TestCase
|
|
7
7
|
|
8
8
|
include Mocha
|
9
9
|
|
10
|
+
unless RUBY_V2_PLUS
|
10
11
|
def test_should_hide_original_method
|
11
12
|
klass = Class.new { def method_x; end }
|
12
13
|
method = AnyInstanceMethod.new(klass, :method_x)
|
@@ -15,6 +16,7 @@ class AnyInstanceMethodTest < Mocha::TestCase
|
|
15
16
|
|
16
17
|
assert_equal false, klass.method_defined?(:method_x)
|
17
18
|
end
|
19
|
+
end
|
18
20
|
|
19
21
|
def test_should_not_raise_error_hiding_method_that_isnt_defined
|
20
22
|
klass = Class.new
|
@@ -8,6 +8,7 @@ class ClassMethodTest < Mocha::TestCase
|
|
8
8
|
|
9
9
|
include Mocha
|
10
10
|
|
11
|
+
unless RUBY_V2_PLUS
|
11
12
|
def test_should_hide_original_method
|
12
13
|
klass = Class.new { def self.method_x; end }
|
13
14
|
method = ClassMethod.new(klass, :method_x)
|
@@ -16,6 +17,7 @@ class ClassMethodTest < Mocha::TestCase
|
|
16
17
|
|
17
18
|
assert_equal false, klass.respond_to?(:method_x)
|
18
19
|
end
|
20
|
+
end
|
19
21
|
|
20
22
|
def test_should_not_raise_error_hiding_method_that_isnt_defined
|
21
23
|
klass = Class.new
|
data/test/unit/mock_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require File.expand_path('../../test_helper', __FILE__)
|
2
|
+
require 'mocha/ruby_version'
|
2
3
|
require 'mocha/mock'
|
3
4
|
require 'mocha/expectation_error_factory'
|
4
5
|
require 'set'
|
@@ -44,7 +45,7 @@ class MockTest < Mocha::TestCase
|
|
44
45
|
assert_equal true, mock.eql?(mock)
|
45
46
|
end
|
46
47
|
|
47
|
-
if
|
48
|
+
if PRE_RUBY_V19
|
48
49
|
OBJECT_METHODS = STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS.reject { |m| m =~ /^__.*__$/ || ["method_missing", "singleton_method_undefined", "initialize"].include?(m)}
|
49
50
|
else
|
50
51
|
OBJECT_METHODS = STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS.reject { |m| m =~ /^__.*__$/ || [:object_id, :method_missing, :singleton_method_undefined, :initialize, :String, :singleton_method_added].include?(m) }
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require File.expand_path('../../test_helper', __FILE__)
|
2
|
+
require 'mocha/ruby_version'
|
2
3
|
require 'mocha/inspect'
|
3
4
|
require 'method_definer'
|
4
5
|
|
@@ -25,7 +26,7 @@ class ObjectInspectTest < Mocha::TestCase
|
|
25
26
|
def test_should_use_underscored_id_instead_of_object_id_or_id_so_that_they_can_be_stubbed
|
26
27
|
calls = []
|
27
28
|
object = Object.new
|
28
|
-
object.replace_instance_method(:id) { calls << :id; return 1 } if
|
29
|
+
object.replace_instance_method(:id) { calls << :id; return 1 } if Mocha::PRE_RUBY_V19
|
29
30
|
object.replace_instance_method(:object_id) { calls << :object_id; return 1 }
|
30
31
|
object.replace_instance_method(:__id__) { calls << :__id__; return 1 }
|
31
32
|
object.replace_instance_method(:inspect) { "object-description" }
|
@@ -1,6 +1,9 @@
|
|
1
1
|
require File.expand_path('../../../test_helper', __FILE__)
|
2
2
|
|
3
3
|
require 'mocha/parameter_matchers/includes'
|
4
|
+
require 'mocha/parameter_matchers/object'
|
5
|
+
require 'mocha/parameter_matchers/has_key'
|
6
|
+
require 'mocha/parameter_matchers/regexp_matches'
|
4
7
|
require 'mocha/inspect'
|
5
8
|
|
6
9
|
class IncludesTest < Mocha::TestCase
|
@@ -56,4 +59,44 @@ class IncludesTest < Mocha::TestCase
|
|
56
59
|
matcher = includes(:x)
|
57
60
|
assert !matcher.matches?([:x])
|
58
61
|
end
|
62
|
+
|
63
|
+
def test_should_match_object_including_value_which_matches_nested_matcher
|
64
|
+
matcher = includes(has_key(:key))
|
65
|
+
assert matcher.matches?([[:non_matching_element, {:key => 'value'}]])
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_should_not_match_object_which_doesnt_include_value_that_matches_nested_matcher
|
69
|
+
matcher = includes(has_key(:key))
|
70
|
+
assert !matcher.matches?([[:non_matching_element, {:other_key => 'other-value'}]])
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_should_match_string_argument_containing_substring
|
74
|
+
matcher = includes('bar')
|
75
|
+
assert matcher.matches?(['foobarbaz'])
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_should_not_match_string_argument_without_substring
|
79
|
+
matcher = includes('bar')
|
80
|
+
assert !matcher.matches?(['foobaz'])
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_should_match_hash_argument_containing_given_key
|
84
|
+
matcher = includes(:key)
|
85
|
+
assert matcher.matches?([{:thing => 1, :key => 2}])
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_should_not_match_hash_argument_missing_given_key
|
89
|
+
matcher = includes(:key)
|
90
|
+
assert !matcher.matches?([{:thing => 1, :other => :key}])
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_should_match_hash_when_nested_matcher_matches_key
|
94
|
+
matcher = includes(regexp_matches(/ar/))
|
95
|
+
assert matcher.matches?([{'foo' => 1, 'bar' => 2}])
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_should_not_match_hash_when_nested_matcher_doesn_not_match_key
|
99
|
+
matcher = includes(regexp_matches(/az/))
|
100
|
+
assert !matcher.matches?([{'foo' => 1, 'bar' => 2}])
|
101
|
+
end
|
59
102
|
end
|
metadata
CHANGED
@@ -1,85 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mocha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Mead
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: metaclass
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.0.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.0.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: introspection
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 0.0.1
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.0.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: yard
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: redcarpet
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
89
|
+
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '0'
|
83
97
|
description: Mocking and stubbing library with JMock/SchMock syntax, which allows
|
84
98
|
mocking and stubbing of methods on real (non-mock) classes.
|
85
99
|
email: mocha-developer@googlegroups.com
|
@@ -87,8 +101,8 @@ executables: []
|
|
87
101
|
extensions: []
|
88
102
|
extra_rdoc_files: []
|
89
103
|
files:
|
90
|
-
- .gemtest
|
91
|
-
- .yardopts
|
104
|
+
- ".gemtest"
|
105
|
+
- ".yardopts"
|
92
106
|
- CONTRIBUTING.md
|
93
107
|
- COPYING.md
|
94
108
|
- Gemfile
|
@@ -199,6 +213,7 @@ files:
|
|
199
213
|
- lib/mocha/pretty_parameters.rb
|
200
214
|
- lib/mocha/receivers.rb
|
201
215
|
- lib/mocha/return_values.rb
|
216
|
+
- lib/mocha/ruby_version.rb
|
202
217
|
- lib/mocha/sequence.rb
|
203
218
|
- lib/mocha/setup.rb
|
204
219
|
- lib/mocha/single_return_value.rb
|
@@ -252,6 +267,7 @@ files:
|
|
252
267
|
- test/acceptance/stub_instance_method_defined_on_object_class_test.rb
|
253
268
|
- test/acceptance/stub_instance_method_defined_on_singleton_class_test.rb
|
254
269
|
- test/acceptance/stub_instance_method_defined_on_superclass_test.rb
|
270
|
+
- test/acceptance/stub_method_defined_on_module_and_aliased_test.rb
|
255
271
|
- test/acceptance/stub_module_method_test.rb
|
256
272
|
- test/acceptance/stub_test.rb
|
257
273
|
- test/acceptance/stubba_example_test.rb
|
@@ -339,7 +355,9 @@ files:
|
|
339
355
|
- yard-templates/default/layout/html/google_analytics.erb
|
340
356
|
- yard-templates/default/layout/html/setup.rb
|
341
357
|
homepage: http://gofreerange.com/mocha/docs
|
342
|
-
licenses:
|
358
|
+
licenses:
|
359
|
+
- MIT
|
360
|
+
- BSD-2-Clause
|
343
361
|
metadata: {}
|
344
362
|
post_install_message:
|
345
363
|
rdoc_options: []
|
@@ -347,19 +365,18 @@ require_paths:
|
|
347
365
|
- lib
|
348
366
|
required_ruby_version: !ruby/object:Gem::Requirement
|
349
367
|
requirements:
|
350
|
-
- -
|
368
|
+
- - ">="
|
351
369
|
- !ruby/object:Gem::Version
|
352
370
|
version: '0'
|
353
371
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
354
372
|
requirements:
|
355
|
-
- -
|
373
|
+
- - ">="
|
356
374
|
- !ruby/object:Gem::Version
|
357
375
|
version: '0'
|
358
376
|
requirements: []
|
359
377
|
rubyforge_project: mocha
|
360
|
-
rubygems_version: 2.
|
378
|
+
rubygems_version: 2.5.1
|
361
379
|
signing_key:
|
362
380
|
specification_version: 3
|
363
381
|
summary: Mocking and stubbing library
|
364
382
|
test_files: []
|
365
|
-
has_rdoc: yard
|