mocha 1.4.0 → 1.7.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 +5 -5
- data/.rubocop.yml +58 -0
- data/.rubocop_todo.yml +50 -0
- data/README.md +12 -71
- data/RELEASE.md +19 -0
- data/Rakefile +35 -28
- data/bin/build-matrix +17 -18
- data/lib/mocha/any_instance_method.rb +19 -25
- data/lib/mocha/api.rb +1 -5
- data/lib/mocha/argument_iterator.rb +4 -8
- data/lib/mocha/backtrace_filter.rb +1 -5
- data/lib/mocha/cardinality.rb +20 -27
- data/lib/mocha/central.rb +21 -12
- data/lib/mocha/change_state_side_effect.rb +0 -4
- data/lib/mocha/class_method.rb +31 -37
- data/lib/mocha/class_methods.rb +11 -15
- data/lib/mocha/configuration.rb +69 -10
- data/lib/mocha/debug.rb +3 -2
- data/lib/mocha/deprecation.rb +4 -11
- data/lib/mocha/detection/mini_test.rb +0 -2
- data/lib/mocha/detection/test_unit.rb +4 -4
- data/lib/mocha/error_with_filtered_backtrace.rb +13 -0
- data/lib/mocha/exception_raiser.rb +2 -5
- data/lib/mocha/expectation.rb +15 -18
- data/lib/mocha/expectation_error.rb +2 -0
- data/lib/mocha/expectation_error_factory.rb +0 -1
- data/lib/mocha/expectation_list.rb +2 -6
- data/lib/mocha/hooks.rb +1 -3
- data/lib/mocha/in_state_ordering_constraint.rb +0 -4
- data/lib/mocha/inspect.rb +3 -5
- data/lib/mocha/instance_method.rb +0 -2
- data/lib/mocha/integration/mini_test/adapter.rb +2 -4
- data/lib/mocha/integration/mini_test/exception_translation.rb +1 -1
- data/lib/mocha/integration/mini_test/nothing.rb +4 -4
- data/lib/mocha/integration/mini_test/version_13.rb +4 -1
- data/lib/mocha/integration/mini_test/version_140.rb +4 -1
- data/lib/mocha/integration/mini_test/version_141.rb +4 -1
- data/lib/mocha/integration/mini_test/version_142_to_172.rb +4 -1
- data/lib/mocha/integration/mini_test/version_200.rb +4 -1
- data/lib/mocha/integration/mini_test/version_201_to_222.rb +4 -1
- data/lib/mocha/integration/mini_test/version_2110_to_2111.rb +4 -1
- data/lib/mocha/integration/mini_test/version_2112_to_320.rb +4 -1
- data/lib/mocha/integration/mini_test/version_230_to_2101.rb +4 -1
- data/lib/mocha/integration/monkey_patcher.rb +5 -7
- data/lib/mocha/integration/test_unit/adapter.rb +5 -6
- data/lib/mocha/integration/test_unit/gem_version_200.rb +5 -2
- data/lib/mocha/integration/test_unit/gem_version_201_to_202.rb +5 -2
- data/lib/mocha/integration/test_unit/gem_version_203_to_220.rb +5 -2
- data/lib/mocha/integration/test_unit/gem_version_230_to_250.rb +5 -2
- data/lib/mocha/integration/test_unit/nothing.rb +4 -4
- data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +4 -1
- data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +4 -1
- data/lib/mocha/integration.rb +3 -4
- data/lib/mocha/is_a.rb +0 -2
- data/lib/mocha/logger.rb +0 -4
- data/lib/mocha/method_matcher.rb +1 -5
- data/lib/mocha/minitest.rb +1 -1
- data/lib/mocha/mock.rb +25 -30
- data/lib/mocha/mockery.rb +62 -43
- data/lib/mocha/module_method.rb +0 -10
- data/lib/mocha/module_methods.rb +0 -4
- data/lib/mocha/multiple_yields.rb +0 -5
- data/lib/mocha/names.rb +1 -11
- data/lib/mocha/no_yields.rb +1 -7
- data/lib/mocha/not_initialized_error.rb +7 -0
- data/lib/mocha/object_methods.rb +16 -16
- data/lib/mocha/parameter_matchers/all_of.rb +1 -7
- data/lib/mocha/parameter_matchers/any_of.rb +1 -7
- data/lib/mocha/parameter_matchers/any_parameters.rb +3 -9
- data/lib/mocha/parameter_matchers/anything.rb +2 -8
- data/lib/mocha/parameter_matchers/base.rb +6 -12
- data/lib/mocha/parameter_matchers/equals.rb +0 -6
- data/lib/mocha/parameter_matchers/equivalent_uri.rb +6 -6
- data/lib/mocha/parameter_matchers/has_entries.rb +2 -6
- data/lib/mocha/parameter_matchers/has_entry.rb +8 -11
- data/lib/mocha/parameter_matchers/has_key.rb +2 -6
- data/lib/mocha/parameter_matchers/has_value.rb +2 -6
- data/lib/mocha/parameter_matchers/includes.rb +2 -6
- data/lib/mocha/parameter_matchers/instance_of.rb +0 -6
- data/lib/mocha/parameter_matchers/is_a.rb +2 -6
- data/lib/mocha/parameter_matchers/kind_of.rb +2 -6
- data/lib/mocha/parameter_matchers/not.rb +2 -6
- data/lib/mocha/parameter_matchers/object.rb +0 -2
- data/lib/mocha/parameter_matchers/optionally.rb +4 -10
- data/lib/mocha/parameter_matchers/regexp_matches.rb +0 -6
- data/lib/mocha/parameter_matchers/responds_with.rb +3 -8
- data/lib/mocha/parameter_matchers/yaml_equivalent.rb +2 -6
- data/lib/mocha/parameter_matchers.rb +0 -2
- data/lib/mocha/parameters_matcher.rb +6 -9
- data/lib/mocha/pretty_parameters.rb +0 -4
- data/lib/mocha/receivers.rb +10 -14
- data/lib/mocha/return_values.rb +3 -7
- data/lib/mocha/sequence.rb +4 -9
- data/lib/mocha/single_return_value.rb +0 -4
- data/lib/mocha/single_yield.rb +0 -5
- data/lib/mocha/state_machine.rb +6 -10
- data/lib/mocha/stubbing_error.rb +2 -13
- data/lib/mocha/test_unit.rb +1 -1
- data/lib/mocha/thrower.rb +2 -5
- data/lib/mocha/unexpected_invocation.rb +3 -5
- data/lib/mocha/version.rb +1 -1
- data/lib/mocha/yield_parameters.rb +3 -7
- data/mocha.gemspec +34 -58
- data/test/acceptance/acceptance_test_helper.rb +0 -6
- data/test/acceptance/bug_18914_test.rb +7 -12
- data/test/acceptance/bug_21465_test.rb +0 -2
- data/test/acceptance/bug_21563_test.rb +0 -2
- data/test/acceptance/exception_rescue_test.rb +7 -8
- data/test/acceptance/expectations_on_multiple_methods_test.rb +2 -1
- data/test/acceptance/expected_invocation_count_test.rb +27 -29
- data/test/acceptance/failure_messages_test.rb +3 -5
- data/test/acceptance/issue_272_test.rb +0 -1
- data/test/acceptance/issue_65_test.rb +15 -13
- data/test/acceptance/issue_70_test.rb +0 -1
- data/test/acceptance/mocha_example_test.rb +5 -6
- data/test/acceptance/mocha_test_result_test.rb +7 -7
- data/test/acceptance/mock_test.rb +2 -4
- data/test/acceptance/mock_with_initializer_block_test.rb +0 -2
- data/test/acceptance/mocked_methods_dispatch_test.rb +0 -2
- data/test/acceptance/multiple_expectations_failure_message_test.rb +16 -17
- data/test/acceptance/optional_parameters_test.rb +0 -2
- data/test/acceptance/parameter_matcher_test.rb +2 -3
- data/test/acceptance/partial_mocks_test.rb +4 -6
- data/test/acceptance/prepend_test.rb +14 -16
- data/test/acceptance/prevent_use_of_mocha_outside_test_test.rb +77 -0
- data/test/acceptance/raise_exception_test.rb +2 -4
- data/test/acceptance/return_value_test.rb +0 -2
- data/test/acceptance/sequence_test.rb +9 -11
- data/test/acceptance/states_test.rb +6 -4
- data/test/acceptance/stub_any_instance_method_defined_on_superclass_test.rb +33 -2
- data/test/acceptance/stub_any_instance_method_test.rb +19 -17
- data/test/acceptance/stub_class_method_defined_on_active_record_association_proxy_test.rb +8 -8
- data/test/acceptance/stub_class_method_defined_on_class_test.rb +2 -1
- data/test/acceptance/stub_class_method_defined_on_module_test.rb +0 -1
- data/test/acceptance/stub_class_method_defined_on_superclass_test.rb +34 -1
- data/test/acceptance/stub_everything_test.rb +1 -3
- data/test/acceptance/stub_instance_method_defined_on_active_record_association_proxy_test.rb +6 -7
- data/test/acceptance/stub_instance_method_defined_on_class_and_aliased_test.rb +0 -1
- data/test/acceptance/stub_instance_method_defined_on_class_test.rb +0 -1
- data/test/acceptance/stub_instance_method_defined_on_kernel_module_test.rb +63 -1
- data/test/acceptance/stub_instance_method_defined_on_module_test.rb +0 -1
- data/test/acceptance/stub_instance_method_defined_on_object_class_test.rb +2 -1
- data/test/acceptance/stub_instance_method_defined_on_singleton_class_test.rb +0 -2
- data/test/acceptance/stub_instance_method_defined_on_superclass_test.rb +0 -1
- data/test/acceptance/stub_module_method_test.rb +13 -13
- data/test/acceptance/stub_test.rb +1 -3
- data/test/acceptance/stubba_example_test.rb +6 -14
- data/test/acceptance/stubba_test_result_test.rb +5 -8
- data/test/acceptance/stubbing_error_backtrace_test.rb +2 -2
- data/test/acceptance/stubbing_frozen_object_test.rb +2 -1
- data/test/acceptance/stubbing_method_accepting_block_parameter_test.rb +12 -7
- data/test/acceptance/stubbing_method_unnecessarily_test.rb +0 -2
- data/test/acceptance/stubbing_nil_test.rb +4 -5
- data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +1 -3
- data/test/acceptance/stubbing_non_existent_class_method_test.rb +3 -3
- data/test/acceptance/stubbing_non_existent_instance_method_test.rb +1 -3
- data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +0 -2
- data/test/acceptance/stubbing_non_public_class_method_test.rb +3 -3
- data/test/acceptance/stubbing_non_public_instance_method_test.rb +1 -3
- data/test/acceptance/stubbing_on_non_mock_object_test.rb +4 -10
- data/test/acceptance/stubbing_same_class_method_on_parent_and_child_classes_test.rb +3 -4
- data/test/acceptance/throw_test.rb +0 -2
- data/test/acceptance/unexpected_invocation_test.rb +2 -3
- data/test/acceptance/unstubbing_test.rb +41 -14
- data/test/deprecation_disabler.rb +0 -1
- data/test/execution_point.rb +2 -4
- data/test/integration/mini_test_test.rb +2 -2
- data/test/integration/shared_tests.rb +24 -22
- data/test/integration/test_unit_test.rb +2 -2
- data/test/method_definer.rb +1 -3
- data/test/mini_test_result.rb +17 -11
- data/test/minitest_result.rb +0 -1
- data/test/simple_counter.rb +0 -2
- data/test/test_helper.rb +13 -5
- data/test/test_runner.rb +2 -4
- data/test/test_unit_result.rb +4 -2
- data/test/unit/any_instance_method_test.rb +31 -17
- data/test/unit/array_inspect_test.rb +2 -4
- data/test/unit/backtrace_filter_test.rb +3 -5
- data/test/unit/cardinality_test.rb +0 -2
- data/test/unit/central_test.rb +26 -27
- data/test/unit/change_state_side_effect_test.rb +0 -4
- data/test/unit/class_method_test.rb +59 -34
- data/test/unit/class_methods_test.rb +34 -5
- data/test/unit/configuration_test.rb +1 -2
- data/test/unit/date_time_inspect_test.rb +1 -3
- data/test/unit/exception_raiser_test.rb +0 -2
- data/test/unit/expectation_list_test.rb +0 -2
- data/test/unit/expectation_test.rb +41 -46
- data/test/unit/hash_inspect_test.rb +3 -5
- data/test/unit/hooks_test.rb +14 -8
- data/test/unit/in_state_ordering_constraint_test.rb +0 -4
- data/test/unit/method_matcher_test.rb +1 -3
- data/test/unit/mock_test.rb +35 -22
- data/test/unit/mockery_test.rb +45 -28
- data/test/unit/module_methods_test.rb +0 -2
- data/test/unit/multiple_yields_test.rb +0 -2
- data/test/unit/no_yields_test.rb +0 -2
- data/test/unit/object_inspect_test.rb +16 -7
- data/test/unit/object_methods_test.rb +22 -6
- data/test/unit/parameter_matchers/all_of_test.rb +0 -2
- data/test/unit/parameter_matchers/any_of_test.rb +0 -2
- data/test/unit/parameter_matchers/anything_test.rb +2 -4
- data/test/unit/parameter_matchers/equals_test.rb +1 -3
- data/test/unit/parameter_matchers/equivalent_uri_test.rb +0 -1
- data/test/unit/parameter_matchers/has_entries_test.rb +2 -2
- data/test/unit/parameter_matchers/has_entry_test.rb +13 -14
- data/test/unit/parameter_matchers/has_key_test.rb +0 -1
- data/test/unit/parameter_matchers/has_value_test.rb +0 -2
- data/test/unit/parameter_matchers/includes_test.rb +8 -9
- data/test/unit/parameter_matchers/instance_of_test.rb +1 -3
- data/test/unit/parameter_matchers/is_a_test.rb +1 -3
- data/test/unit/parameter_matchers/kind_of_test.rb +1 -3
- data/test/unit/parameter_matchers/not_test.rb +0 -2
- data/test/unit/parameter_matchers/regexp_matches_test.rb +1 -2
- data/test/unit/parameter_matchers/responds_with_test.rb +9 -3
- data/test/unit/parameter_matchers/stub_matcher.rb +0 -4
- data/test/unit/parameter_matchers/yaml_equivalent_test.rb +1 -3
- data/test/unit/parameters_matcher_test.rb +2 -4
- data/test/unit/receivers_test.rb +35 -5
- data/test/unit/return_values_test.rb +3 -5
- data/test/unit/sequence_test.rb +1 -5
- data/test/unit/single_return_value_test.rb +0 -2
- data/test/unit/single_yield_test.rb +0 -2
- data/test/unit/state_machine_test.rb +1 -3
- data/test/unit/string_inspect_test.rb +2 -4
- data/test/unit/thrower_test.rb +0 -2
- data/test/unit/yield_parameters_test.rb +0 -2
- data/yard-templates/default/layout/html/setup.rb +2 -3
- metadata +25 -6
data/lib/mocha/object_methods.rb
CHANGED
@@ -4,18 +4,20 @@ require 'mocha/argument_iterator'
|
|
4
4
|
require 'mocha/expectation_error_factory'
|
5
5
|
|
6
6
|
module Mocha
|
7
|
-
|
8
7
|
# Methods added to all objects to allow mocking and stubbing on real (i.e. non-mock) objects.
|
9
8
|
#
|
10
9
|
# Both {#expects} and {#stubs} return an {Expectation} which can be further modified by methods on {Expectation}.
|
11
10
|
module ObjectMethods
|
12
|
-
|
13
11
|
# @private
|
14
12
|
alias_method :_method, :method
|
15
13
|
|
16
14
|
# @private
|
17
|
-
def mocha
|
18
|
-
|
15
|
+
def mocha(instantiate = true)
|
16
|
+
if instantiate
|
17
|
+
@mocha ||= Mocha::Mockery.instance.mock_impersonating(self)
|
18
|
+
else
|
19
|
+
defined?(@mocha) ? @mocha : nil
|
20
|
+
end
|
19
21
|
end
|
20
22
|
|
21
23
|
# @private
|
@@ -71,14 +73,14 @@ module Mocha
|
|
71
73
|
expectation = nil
|
72
74
|
mockery = Mocha::Mockery.instance
|
73
75
|
iterator = ArgumentIterator.new(expected_methods_vs_return_values)
|
74
|
-
iterator.each
|
76
|
+
iterator.each do |*args|
|
75
77
|
method_name = args.shift
|
76
78
|
mockery.on_stubbing(self, method_name)
|
77
79
|
method = stubba_method.new(stubba_object, method_name)
|
78
80
|
mockery.stubba.stub(method)
|
79
81
|
expectation = mocha.expects(method_name, caller)
|
80
|
-
expectation.returns(args.shift)
|
81
|
-
|
82
|
+
expectation.returns(args.shift) unless args.empty?
|
83
|
+
end
|
82
84
|
expectation
|
83
85
|
end
|
84
86
|
|
@@ -117,14 +119,14 @@ module Mocha
|
|
117
119
|
expectation = nil
|
118
120
|
mockery = Mocha::Mockery.instance
|
119
121
|
iterator = ArgumentIterator.new(stubbed_methods_vs_return_values)
|
120
|
-
iterator.each
|
122
|
+
iterator.each do |*args|
|
121
123
|
method_name = args.shift
|
122
124
|
mockery.on_stubbing(self, method_name)
|
123
125
|
method = stubba_method.new(stubba_object, method_name)
|
124
126
|
mockery.stubba.stub(method)
|
125
127
|
expectation = mocha.stubs(method_name, caller)
|
126
|
-
expectation.returns(args.shift)
|
127
|
-
|
128
|
+
expectation.returns(args.shift) unless args.empty?
|
129
|
+
end
|
128
130
|
expectation
|
129
131
|
end
|
130
132
|
|
@@ -162,14 +164,12 @@ module Mocha
|
|
162
164
|
# @private
|
163
165
|
def method_exists?(method, include_public_methods = true)
|
164
166
|
if include_public_methods
|
165
|
-
return true if public_methods(
|
167
|
+
return true if public_methods(true).include?(method)
|
166
168
|
return true if respond_to?(method.to_sym)
|
167
169
|
end
|
168
|
-
return true if protected_methods(
|
169
|
-
return true if private_methods(
|
170
|
-
|
170
|
+
return true if protected_methods(true).include?(method)
|
171
|
+
return true if private_methods(true).include?(method)
|
172
|
+
false
|
171
173
|
end
|
172
|
-
|
173
174
|
end
|
174
|
-
|
175
175
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches if all +matchers+ match.
|
8
6
|
#
|
9
7
|
# @param [*Array<Base>] parameter_matchers parameter matchers.
|
@@ -28,7 +26,6 @@ module Mocha
|
|
28
26
|
|
29
27
|
# Parameter matcher which combines a number of other matchers using a logical AND.
|
30
28
|
class AllOf < Base
|
31
|
-
|
32
29
|
# @private
|
33
30
|
def initialize(*matchers)
|
34
31
|
@matchers = matchers
|
@@ -42,11 +39,8 @@ module Mocha
|
|
42
39
|
|
43
40
|
# @private
|
44
41
|
def mocha_inspect
|
45
|
-
"all_of(#{@matchers.map
|
42
|
+
"all_of(#{@matchers.map(&:mocha_inspect).join(', ')})"
|
46
43
|
end
|
47
|
-
|
48
44
|
end
|
49
|
-
|
50
45
|
end
|
51
|
-
|
52
46
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches if any +matchers+ match.
|
8
6
|
#
|
9
7
|
# @param [*Array<Base>] parameter_matchers parameter matchers.
|
@@ -34,7 +32,6 @@ module Mocha
|
|
34
32
|
|
35
33
|
# Parameter matcher which combines a number of other matchers using a logical OR.
|
36
34
|
class AnyOf < Base
|
37
|
-
|
38
35
|
# @private
|
39
36
|
def initialize(*matchers)
|
40
37
|
@matchers = matchers
|
@@ -48,11 +45,8 @@ module Mocha
|
|
48
45
|
|
49
46
|
# @private
|
50
47
|
def mocha_inspect
|
51
|
-
"any_of(#{@matchers.map
|
48
|
+
"any_of(#{@matchers.map(&:mocha_inspect).join(', ')})"
|
52
49
|
end
|
53
|
-
|
54
50
|
end
|
55
|
-
|
56
51
|
end
|
57
|
-
|
58
52
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches any parameters. This is used as the default for a newly built expectation.
|
8
6
|
#
|
9
7
|
# @return [AnyParameters] parameter matcher.
|
@@ -26,22 +24,18 @@ module Mocha
|
|
26
24
|
|
27
25
|
# Parameter matcher which always matches whatever the parameters.
|
28
26
|
class AnyParameters < Base
|
29
|
-
|
30
27
|
# @private
|
31
28
|
def matches?(available_parameters)
|
32
|
-
|
29
|
+
until available_parameters.empty?
|
33
30
|
available_parameters.shift
|
34
31
|
end
|
35
|
-
|
32
|
+
true
|
36
33
|
end
|
37
34
|
|
38
35
|
# @private
|
39
36
|
def mocha_inspect
|
40
|
-
|
37
|
+
'any_parameters'
|
41
38
|
end
|
42
|
-
|
43
39
|
end
|
44
|
-
|
45
40
|
end
|
46
|
-
|
47
41
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches any object.
|
8
6
|
#
|
9
7
|
# @return [Anything] parameter matcher.
|
@@ -23,20 +21,16 @@ module Mocha
|
|
23
21
|
|
24
22
|
# Parameter matcher which always matches a single parameter.
|
25
23
|
class Anything < Base
|
26
|
-
|
27
24
|
# @private
|
28
25
|
def matches?(available_parameters)
|
29
26
|
available_parameters.shift
|
30
|
-
|
27
|
+
true
|
31
28
|
end
|
32
29
|
|
33
30
|
# @private
|
34
31
|
def mocha_inspect
|
35
|
-
|
32
|
+
'anything'
|
36
33
|
end
|
37
|
-
|
38
34
|
end
|
39
|
-
|
40
35
|
end
|
41
|
-
|
42
36
|
end
|
@@ -1,10 +1,7 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
module ParameterMatchers
|
4
|
-
|
5
3
|
# @abstract Subclass and implement +#matches?+ and +#mocha_inspect+ to define a custom matcher. Also add a suitably named instance method to {ParameterMatchers} to build an instance of the new matcher c.f. {#equals}.
|
6
4
|
class Base
|
7
|
-
|
8
5
|
# @private
|
9
6
|
def to_matcher
|
10
7
|
self
|
@@ -16,7 +13,7 @@ module Mocha
|
|
16
13
|
#
|
17
14
|
# This shorthand will not work with an implicit equals match. Instead, an explicit {Equals} matcher should be used.
|
18
15
|
#
|
19
|
-
# @param [Base]
|
16
|
+
# @param [Base] other parameter matcher.
|
20
17
|
# @return [AllOf] parameter matcher.
|
21
18
|
#
|
22
19
|
# @see Expectation#with
|
@@ -30,8 +27,8 @@ module Mocha
|
|
30
27
|
#
|
31
28
|
# object.expects(:run).with(has_key(:foo) & has_key(:bar))
|
32
29
|
# object.run(:foo => 'foovalue', :bar => 'barvalue)
|
33
|
-
def &(
|
34
|
-
AllOf.new(self,
|
30
|
+
def &(other)
|
31
|
+
AllOf.new(self, other)
|
35
32
|
end
|
36
33
|
|
37
34
|
# A shorthand way of combining two matchers when at least one must match.
|
@@ -40,7 +37,7 @@ module Mocha
|
|
40
37
|
#
|
41
38
|
# This shorthand will not work with an implicit equals match. Instead, an explicit {Equals} matcher should be used.
|
42
39
|
#
|
43
|
-
# @param [Base]
|
40
|
+
# @param [Base] other parameter matcher.
|
44
41
|
# @return [AnyOf] parameter matcher.
|
45
42
|
#
|
46
43
|
# @see Expectation#with
|
@@ -60,12 +57,9 @@ module Mocha
|
|
60
57
|
# object.run(1) # passes
|
61
58
|
# object.run(2) # passes
|
62
59
|
# object.run(3) # fails
|
63
|
-
def |(
|
64
|
-
AnyOf.new(self,
|
60
|
+
def |(other)
|
61
|
+
AnyOf.new(self, other)
|
65
62
|
end
|
66
|
-
|
67
63
|
end
|
68
|
-
|
69
64
|
end
|
70
|
-
|
71
65
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches any +Object+ equalling +value+.
|
8
6
|
#
|
9
7
|
# @param [Object] value expected value.
|
@@ -29,7 +27,6 @@ module Mocha
|
|
29
27
|
|
30
28
|
# Parameter matcher which matches when actual parameter equals expected value.
|
31
29
|
class Equals < Base
|
32
|
-
|
33
30
|
# @private
|
34
31
|
def initialize(value)
|
35
32
|
@value = value
|
@@ -45,9 +42,6 @@ module Mocha
|
|
45
42
|
def mocha_inspect
|
46
43
|
@value.mocha_inspect
|
47
44
|
end
|
48
|
-
|
49
45
|
end
|
50
|
-
|
51
46
|
end
|
52
|
-
|
53
47
|
end
|
@@ -5,7 +5,6 @@ require 'cgi'
|
|
5
5
|
|
6
6
|
module Mocha
|
7
7
|
module ParameterMatchers
|
8
|
-
|
9
8
|
# Matches a URI without regard to the ordering of parameters in the query string.
|
10
9
|
#
|
11
10
|
# @param [String] uri URI to match.
|
@@ -29,15 +28,16 @@ module Mocha
|
|
29
28
|
end
|
30
29
|
|
31
30
|
# @deprecated Use {#equivalent_uri} instead.
|
31
|
+
# rubocop:disable Naming/PredicateName
|
32
32
|
def has_equivalent_query_string(uri)
|
33
|
-
Mocha::Deprecation.warning(
|
33
|
+
Mocha::Deprecation.warning('`has_equivalent_query_string` is deprecated. Please use `equivalent_uri` instead.')
|
34
34
|
|
35
35
|
equivalent_uri(uri)
|
36
36
|
end
|
37
|
+
# rubocop:enable Naming/PredicateName
|
37
38
|
|
38
39
|
# Parameter matcher which matches URIs with equivalent query strings.
|
39
40
|
class EquivalentUri < Base
|
40
|
-
|
41
41
|
# @private
|
42
42
|
def initialize(uri)
|
43
43
|
@uri = URI.parse(uri)
|
@@ -55,13 +55,13 @@ module Mocha
|
|
55
55
|
"equivalent_uri(#{@uri.mocha_inspect})"
|
56
56
|
end
|
57
57
|
|
58
|
-
|
58
|
+
private
|
59
|
+
|
59
60
|
# @private
|
60
61
|
def explode(uri)
|
61
62
|
query_hash = CGI.parse(uri.query || '')
|
62
|
-
URI::Generic::COMPONENT.inject({}){ |h, k| h.merge(k => uri.__send__(k)) }.merge(:query => query_hash)
|
63
|
+
URI::Generic::COMPONENT.inject({}) { |h, k| h.merge(k => uri.__send__(k)) }.merge(:query => query_hash)
|
63
64
|
end
|
64
|
-
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
@@ -3,9 +3,7 @@ require 'mocha/parameter_matchers/all_of'
|
|
3
3
|
require 'mocha/parameter_matchers/has_entry'
|
4
4
|
|
5
5
|
module Mocha
|
6
|
-
|
7
6
|
module ParameterMatchers
|
8
|
-
|
9
7
|
# Matches +Hash+ containing all +entries+.
|
10
8
|
#
|
11
9
|
# @param [Hash] entries expected +Hash+ entries.
|
@@ -24,13 +22,14 @@ module Mocha
|
|
24
22
|
# object.expects(:method_1).with(has_entries('key_1' => 1, 'key_2' => 2))
|
25
23
|
# object.method_1('key_1' => 1, 'key_2' => 99)
|
26
24
|
# # error raised, because method_1 was not called with Hash containing entries: 'key_1' => 1, 'key_2' => 2
|
25
|
+
# rubocop:disable Naming/PredicateName
|
27
26
|
def has_entries(entries)
|
28
27
|
HasEntries.new(entries)
|
29
28
|
end
|
29
|
+
# rubocop:enable Naming/PredicateName
|
30
30
|
|
31
31
|
# Parameter matcher which matches when actual parameter contains all expected +Hash+ entries.
|
32
32
|
class HasEntries < Base
|
33
|
-
|
34
33
|
# @private
|
35
34
|
def initialize(entries)
|
36
35
|
@entries = entries
|
@@ -47,9 +46,6 @@ module Mocha
|
|
47
46
|
def mocha_inspect
|
48
47
|
"has_entries(#{@entries.mocha_inspect})"
|
49
48
|
end
|
50
|
-
|
51
49
|
end
|
52
|
-
|
53
50
|
end
|
54
|
-
|
55
51
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches +Hash+ containing entry with +key+ and +value+.
|
8
6
|
#
|
9
7
|
# @overload def has_entry(key, value)
|
@@ -41,6 +39,7 @@ module Mocha
|
|
41
39
|
# object.expects(:method_1).with(has_entry('key_1' => 1))
|
42
40
|
# object.method_1('key_1' => 2, 'key_2' => 1)
|
43
41
|
# # error raised, because method_1 was not called with Hash containing entry: 'key_1' => 1
|
42
|
+
# rubocop:disable Naming/PredicateName
|
44
43
|
def has_entry(*options)
|
45
44
|
case options.length
|
46
45
|
when 1
|
@@ -48,29 +47,30 @@ module Mocha
|
|
48
47
|
when Hash
|
49
48
|
case options[0].length
|
50
49
|
when 0
|
51
|
-
raise ArgumentError
|
50
|
+
raise ArgumentError, 'Argument has no entries.'
|
52
51
|
when 1
|
53
52
|
key, value = options[0].first
|
54
53
|
else
|
55
|
-
raise ArgumentError
|
54
|
+
raise ArgumentError, 'Argument has multiple entries. Use Mocha::ParameterMatchers#has_entries instead.'
|
56
55
|
end
|
57
56
|
else
|
58
|
-
raise ArgumentError
|
57
|
+
raise ArgumentError, 'Argument is not a Hash.'
|
59
58
|
end
|
60
59
|
when 2
|
61
60
|
key, value = options
|
62
61
|
else
|
63
|
-
raise ArgumentError
|
62
|
+
raise ArgumentError, 'Too many arguments; use either a single argument (must be a Hash) or two arguments (a key and a value).'
|
64
63
|
end
|
65
64
|
HasEntry.new(key, value)
|
66
65
|
end
|
66
|
+
# rubocop:enable Naming/PredicateName
|
67
67
|
|
68
68
|
# Parameter matcher which matches when actual parameter contains expected +Hash+ entry.
|
69
69
|
class HasEntry < Base
|
70
|
-
|
71
70
|
# @private
|
72
71
|
def initialize(key, value)
|
73
|
-
@key
|
72
|
+
@key = key
|
73
|
+
@value = value
|
74
74
|
end
|
75
75
|
|
76
76
|
# @private
|
@@ -85,9 +85,6 @@ module Mocha
|
|
85
85
|
def mocha_inspect
|
86
86
|
"has_entry(#{@key.mocha_inspect} => #{@value.mocha_inspect})"
|
87
87
|
end
|
88
|
-
|
89
88
|
end
|
90
|
-
|
91
89
|
end
|
92
|
-
|
93
90
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches +Hash+ containing +key+.
|
8
6
|
#
|
9
7
|
# @param [Object] key expected key.
|
@@ -22,13 +20,14 @@ module Mocha
|
|
22
20
|
# object.expects(:method_1).with(has_key('key_1'))
|
23
21
|
# object.method_1('key_2' => 2)
|
24
22
|
# # error raised, because method_1 was not called with Hash containing key: 'key_1'
|
23
|
+
# rubocop:disable Naming/PredicateName
|
25
24
|
def has_key(key)
|
26
25
|
HasKey.new(key)
|
27
26
|
end
|
27
|
+
# rubocop:enable Naming/PredicateName
|
28
28
|
|
29
29
|
# Parameter matcher which matches when actual parameter contains +Hash+ entry with expected key.
|
30
30
|
class HasKey < Base
|
31
|
-
|
32
31
|
# @private
|
33
32
|
def initialize(key)
|
34
33
|
@key = key
|
@@ -45,9 +44,6 @@ module Mocha
|
|
45
44
|
def mocha_inspect
|
46
45
|
"has_key(#{@key.mocha_inspect})"
|
47
46
|
end
|
48
|
-
|
49
47
|
end
|
50
|
-
|
51
48
|
end
|
52
|
-
|
53
49
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches +Hash+ containing +value+.
|
8
6
|
#
|
9
7
|
# @param [Object] value expected value.
|
@@ -22,13 +20,14 @@ module Mocha
|
|
22
20
|
# object.expects(:method_1).with(has_value(1))
|
23
21
|
# object.method_1('key_2' => 2)
|
24
22
|
# # error raised, because method_1 was not called with Hash containing value: 1
|
23
|
+
# rubocop:disable Naming/PredicateName
|
25
24
|
def has_value(value)
|
26
25
|
HasValue.new(value)
|
27
26
|
end
|
27
|
+
# rubocop:enable Naming/PredicateName
|
28
28
|
|
29
29
|
# Parameter matcher which matches when actual parameter contains +Hash+ entry with expected value.
|
30
30
|
class HasValue < Base
|
31
|
-
|
32
31
|
# @private
|
33
32
|
def initialize(value)
|
34
33
|
@value = value
|
@@ -45,9 +44,6 @@ module Mocha
|
|
45
44
|
def mocha_inspect
|
46
45
|
"has_value(#{@value.mocha_inspect})"
|
47
46
|
end
|
48
|
-
|
49
47
|
end
|
50
|
-
|
51
48
|
end
|
52
|
-
|
53
49
|
end
|
@@ -2,9 +2,7 @@ require 'mocha/parameter_matchers/all_of'
|
|
2
2
|
require 'mocha/parameter_matchers/base'
|
3
3
|
|
4
4
|
module Mocha
|
5
|
-
|
6
5
|
module ParameterMatchers
|
7
|
-
|
8
6
|
# Matches any object that responds with +true+ to +include?(item)+
|
9
7
|
# for all items.
|
10
8
|
#
|
@@ -68,7 +66,6 @@ module Mocha
|
|
68
66
|
|
69
67
|
# Parameter matcher which matches when actual parameter includes expected values.
|
70
68
|
class Includes < Base
|
71
|
-
|
72
69
|
# @private
|
73
70
|
def initialize(*items)
|
74
71
|
@items = items
|
@@ -79,12 +76,14 @@ module Mocha
|
|
79
76
|
parameter = available_parameters.shift
|
80
77
|
return false unless parameter.respond_to?(:include?)
|
81
78
|
if @items.size == 1
|
79
|
+
# rubocop:disable Style/GuardClause
|
82
80
|
if parameter.respond_to?(:any?) && !parameter.is_a?(String)
|
83
81
|
parameter = parameter.keys if parameter.is_a?(Hash)
|
84
82
|
return parameter.any? { |p| @items.first.to_matcher.matches?([p]) }
|
85
83
|
else
|
86
84
|
return parameter.include?(@items.first)
|
87
85
|
end
|
86
|
+
# rubocop:enable Style/GuardClause
|
88
87
|
else
|
89
88
|
includes_matchers = @items.map { |item| Includes.new(item) }
|
90
89
|
AllOf.new(*includes_matchers).matches?([parameter])
|
@@ -96,9 +95,6 @@ module Mocha
|
|
96
95
|
item_descriptions = @items.map(&:mocha_inspect)
|
97
96
|
"includes(#{item_descriptions.join(', ')})"
|
98
97
|
end
|
99
|
-
|
100
98
|
end
|
101
|
-
|
102
99
|
end
|
103
|
-
|
104
100
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches any object that is an instance of +klass+
|
8
6
|
#
|
9
7
|
# @param [Class] klass expected class.
|
@@ -29,7 +27,6 @@ module Mocha
|
|
29
27
|
|
30
28
|
# Parameter matcher which matches when actual parameter is an instance of the specified class.
|
31
29
|
class InstanceOf < Base
|
32
|
-
|
33
30
|
# @private
|
34
31
|
def initialize(klass)
|
35
32
|
@klass = klass
|
@@ -45,9 +42,6 @@ module Mocha
|
|
45
42
|
def mocha_inspect
|
46
43
|
"instance_of(#{@klass.mocha_inspect})"
|
47
44
|
end
|
48
|
-
|
49
45
|
end
|
50
|
-
|
51
46
|
end
|
52
|
-
|
53
47
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches any object that is a +klass+.
|
8
6
|
#
|
9
7
|
# @param [Class] klass expected class.
|
@@ -23,13 +21,14 @@ module Mocha
|
|
23
21
|
# object.expects(:method_1).with(is_a(Integer))
|
24
22
|
# object.method_1('string')
|
25
23
|
# # error raised, because method_1 was not called with an Integer
|
24
|
+
# rubocop:disable Naming/PredicateName
|
26
25
|
def is_a(klass)
|
27
26
|
IsA.new(klass)
|
28
27
|
end
|
28
|
+
# rubocop:enable Naming/PredicateName
|
29
29
|
|
30
30
|
# Parameter matcher which matches when actual parameter is a specific class.
|
31
31
|
class IsA < Base
|
32
|
-
|
33
32
|
# @private
|
34
33
|
def initialize(klass)
|
35
34
|
@klass = klass
|
@@ -45,9 +44,6 @@ module Mocha
|
|
45
44
|
def mocha_inspect
|
46
45
|
"is_a(#{@klass.mocha_inspect})"
|
47
46
|
end
|
48
|
-
|
49
47
|
end
|
50
|
-
|
51
48
|
end
|
52
|
-
|
53
49
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches any +Object+ that is a kind of +klass+.
|
8
6
|
#
|
9
7
|
# @param [Class] klass expected class.
|
@@ -29,7 +27,6 @@ module Mocha
|
|
29
27
|
|
30
28
|
# Parameter matcher which matches when actual parameter is a kind of specified class.
|
31
29
|
class KindOf < Base
|
32
|
-
|
33
30
|
# @private
|
34
31
|
def initialize(klass)
|
35
32
|
@klass = klass
|
@@ -38,16 +35,15 @@ module Mocha
|
|
38
35
|
# @private
|
39
36
|
def matches?(available_parameters)
|
40
37
|
parameter = available_parameters.shift
|
38
|
+
# rubocop:disable Style/ClassCheck
|
41
39
|
parameter.kind_of?(@klass)
|
40
|
+
# rubocop:enable Style/ClassCheck
|
42
41
|
end
|
43
42
|
|
44
43
|
# @private
|
45
44
|
def mocha_inspect
|
46
45
|
"kind_of(#{@klass.mocha_inspect})"
|
47
46
|
end
|
48
|
-
|
49
47
|
end
|
50
|
-
|
51
48
|
end
|
52
|
-
|
53
49
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches if +matcher+ does *not* match.
|
8
6
|
#
|
9
7
|
# @param [Base] matcher matcher whose logic to invert.
|
@@ -22,13 +20,14 @@ module Mocha
|
|
22
20
|
# object.expects(:method_1).with(Not(includes(1)))
|
23
21
|
# object.method_1([0, 1, 2, 3])
|
24
22
|
# # error raised, because method_1 was not called with object not including 1
|
23
|
+
# rubocop:disable Naming/MethodName
|
25
24
|
def Not(matcher)
|
26
25
|
Not.new(matcher)
|
27
26
|
end
|
27
|
+
# rubocop:enable Naming/MethodName
|
28
28
|
|
29
29
|
# Parameter matcher which inverts the logic of the specified matcher using a logical NOT operation.
|
30
30
|
class Not < Base
|
31
|
-
|
32
31
|
# @private
|
33
32
|
def initialize(matcher)
|
34
33
|
@matcher = matcher
|
@@ -44,9 +43,6 @@ module Mocha
|
|
44
43
|
def mocha_inspect
|
45
44
|
"Not(#{@matcher.mocha_inspect})"
|
46
45
|
end
|
47
|
-
|
48
46
|
end
|
49
|
-
|
50
47
|
end
|
51
|
-
|
52
48
|
end
|