mocha 1.2.1 → 1.16.1
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/.github/FUNDING.yml +1 -0
- data/.rubocop.yml +61 -0
- data/.rubocop_todo.yml +27 -0
- data/.yardopts +1 -0
- data/CONTRIBUTING.md +4 -9
- data/Gemfile +29 -0
- data/README.md +104 -106
- data/RELEASE.md +277 -1
- data/Rakefile +46 -44
- data/gemfiles/Gemfile.minitest.latest +1 -0
- data/gemfiles/Gemfile.test-unit.latest +2 -5
- data/init.rb +1 -3
- data/lib/mocha/any_instance_method.rb +9 -62
- data/lib/mocha/api.rb +144 -68
- data/lib/mocha/argument_iterator.rb +4 -8
- data/lib/mocha/backtrace_filter.rb +1 -5
- data/lib/mocha/block_matcher.rb +31 -0
- data/lib/mocha/cardinality.rb +60 -49
- data/lib/mocha/central.rb +21 -12
- data/lib/mocha/change_state_side_effect.rb +0 -4
- data/lib/mocha/class_methods.rb +19 -21
- data/lib/mocha/configuration.rb +372 -18
- data/lib/mocha/debug.rb +3 -2
- data/lib/mocha/deprecation.rb +8 -11
- data/lib/mocha/detection/mini_test.rb +0 -2
- data/lib/mocha/detection/test_unit.rb +3 -5
- data/lib/mocha/error_with_filtered_backtrace.rb +13 -0
- data/lib/mocha/exception_raiser.rb +4 -6
- data/lib/mocha/expectation.rb +125 -89
- data/lib/mocha/expectation_error.rb +1 -1
- data/lib/mocha/expectation_error_factory.rb +0 -1
- data/lib/mocha/expectation_list.rb +7 -11
- data/lib/mocha/hooks.rb +1 -3
- data/lib/mocha/in_state_ordering_constraint.rb +0 -4
- data/lib/mocha/inspect.rb +30 -38
- data/lib/mocha/instance_method.rb +11 -8
- 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/mini_test.rb +7 -0
- 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_186_and_above.rb +4 -1
- data/lib/mocha/integration/test_unit.rb +7 -2
- data/lib/mocha/integration.rb +2 -5
- data/lib/mocha/invocation.rb +86 -0
- data/lib/mocha/is_a.rb +0 -2
- data/lib/mocha/logger.rb +0 -4
- data/lib/mocha/macos_version.rb +5 -0
- data/lib/mocha/method_matcher.rb +1 -5
- data/lib/mocha/minitest.rb +9 -0
- data/lib/mocha/mock.rb +102 -58
- data/lib/mocha/mockery.rb +70 -99
- data/lib/mocha/names.rb +2 -12
- data/lib/mocha/not_initialized_error.rb +7 -0
- data/lib/mocha/object_methods.rb +25 -31
- data/lib/mocha/parameter_matchers/all_of.rb +2 -8
- data/lib/mocha/parameter_matchers/any_of.rb +2 -8
- 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/{query_string.rb → equivalent_uri.rb} +15 -15
- data/lib/mocha/parameter_matchers/has_entries.rb +2 -7
- data/lib/mocha/parameter_matchers/has_entry.rb +26 -21
- data/lib/mocha/parameter_matchers/has_key.rb +2 -7
- data/lib/mocha/parameter_matchers/has_keys.rb +53 -0
- data/lib/mocha/parameter_matchers/has_value.rb +2 -7
- data/lib/mocha/parameter_matchers/includes.rb +6 -7
- data/lib/mocha/parameter_matchers/instance_methods.rb +18 -0
- data/lib/mocha/parameter_matchers/instance_of.rb +0 -6
- data/lib/mocha/parameter_matchers/is_a.rb +2 -7
- data/lib/mocha/parameter_matchers/kind_of.rb +2 -6
- data/lib/mocha/parameter_matchers/not.rb +2 -7
- 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 +3 -4
- data/lib/mocha/parameters_matcher.rb +6 -9
- data/lib/mocha/raised_exception.rb +11 -0
- data/lib/mocha/receivers.rb +10 -14
- data/lib/mocha/return_values.rb +4 -8
- data/lib/mocha/ruby_version.rb +8 -1
- data/lib/mocha/sequence.rb +4 -9
- data/lib/mocha/setup.rb +5 -0
- data/lib/mocha/single_return_value.rb +2 -5
- data/lib/mocha/state_machine.rb +33 -46
- data/lib/mocha/stubbed_method.rb +124 -0
- data/lib/mocha/stubbing_error.rb +2 -13
- data/lib/mocha/test_unit.rb +8 -2
- data/lib/mocha/thrower.rb +4 -6
- data/lib/mocha/thrown_object.rb +12 -0
- data/lib/mocha/version.rb +1 -1
- data/lib/mocha/yield_parameters.rb +7 -17
- data/mocha.gemspec +14 -65
- data/yard-templates/default/layout/html/google_analytics.erb +6 -9
- data/yard-templates/default/layout/html/setup.rb +2 -3
- metadata +25 -247
- data/bin/build-matrix +0 -70
- data/gemfiles/Gemfile.minitest.1.3.0 +0 -7
- data/gemfiles/Gemfile.minitest.1.4.0 +0 -7
- data/gemfiles/Gemfile.minitest.1.4.1 +0 -7
- data/gemfiles/Gemfile.minitest.1.4.2 +0 -7
- data/gemfiles/Gemfile.minitest.2.0.0 +0 -7
- data/gemfiles/Gemfile.minitest.2.0.1 +0 -7
- data/gemfiles/Gemfile.minitest.2.11.0 +0 -7
- data/gemfiles/Gemfile.minitest.2.11.2 +0 -7
- data/gemfiles/Gemfile.minitest.2.3.0 +0 -7
- data/gemfiles/Gemfile.test-unit.2.0.0 +0 -7
- data/gemfiles/Gemfile.test-unit.2.0.1 +0 -7
- data/gemfiles/Gemfile.test-unit.2.0.3 +0 -7
- data/lib/mocha/class_method.rb +0 -119
- data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +0 -58
- data/lib/mocha/mini_test.rb +0 -3
- data/lib/mocha/module_method.rb +0 -16
- data/lib/mocha/module_methods.rb +0 -14
- data/lib/mocha/multiple_yields.rb +0 -20
- data/lib/mocha/no_yields.rb +0 -11
- data/lib/mocha/parameter_matchers/object.rb +0 -17
- data/lib/mocha/pretty_parameters.rb +0 -28
- data/lib/mocha/single_yield.rb +0 -18
- data/lib/mocha/standalone.rb +0 -4
- data/lib/mocha/unexpected_invocation.rb +0 -26
- data/lib/mocha_standalone.rb +0 -4
- data/test/acceptance/acceptance_test_helper.rb +0 -41
- data/test/acceptance/bug_18914_test.rb +0 -43
- data/test/acceptance/bug_21465_test.rb +0 -34
- data/test/acceptance/bug_21563_test.rb +0 -25
- data/test/acceptance/exception_rescue_test.rb +0 -55
- data/test/acceptance/expectations_on_multiple_methods_test.rb +0 -55
- data/test/acceptance/expected_invocation_count_test.rb +0 -232
- data/test/acceptance/failure_messages_test.rb +0 -64
- data/test/acceptance/issue_272_test.rb +0 -52
- data/test/acceptance/issue_65_test.rb +0 -63
- data/test/acceptance/issue_70_test.rb +0 -55
- data/test/acceptance/mocha_example_test.rb +0 -98
- data/test/acceptance/mocha_test_result_test.rb +0 -84
- data/test/acceptance/mock_test.rb +0 -100
- data/test/acceptance/mock_with_initializer_block_test.rb +0 -51
- data/test/acceptance/mocked_methods_dispatch_test.rb +0 -78
- data/test/acceptance/multiple_expectations_failure_message_test.rb +0 -68
- data/test/acceptance/optional_parameters_test.rb +0 -70
- data/test/acceptance/parameter_matcher_test.rb +0 -337
- data/test/acceptance/partial_mocks_test.rb +0 -47
- data/test/acceptance/prepend_test.rb +0 -89
- data/test/acceptance/raise_exception_test.rb +0 -39
- data/test/acceptance/return_value_test.rb +0 -52
- data/test/acceptance/sequence_test.rb +0 -192
- data/test/acceptance/states_test.rb +0 -70
- data/test/acceptance/stub_any_instance_method_defined_on_superclass_test.rb +0 -34
- data/test/acceptance/stub_any_instance_method_test.rb +0 -280
- data/test/acceptance/stub_class_method_defined_on_active_record_association_proxy_test.rb +0 -106
- data/test/acceptance/stub_class_method_defined_on_class_test.rb +0 -78
- data/test/acceptance/stub_class_method_defined_on_module_test.rb +0 -75
- data/test/acceptance/stub_class_method_defined_on_superclass_test.rb +0 -112
- data/test/acceptance/stub_everything_test.rb +0 -56
- data/test/acceptance/stub_instance_method_defined_on_active_record_association_proxy_test.rb +0 -93
- data/test/acceptance/stub_instance_method_defined_on_class_and_aliased_test.rb +0 -69
- data/test/acceptance/stub_instance_method_defined_on_class_test.rb +0 -69
- data/test/acceptance/stub_instance_method_defined_on_kernel_module_test.rb +0 -75
- data/test/acceptance/stub_instance_method_defined_on_module_test.rb +0 -78
- data/test/acceptance/stub_instance_method_defined_on_object_class_test.rb +0 -75
- data/test/acceptance/stub_instance_method_defined_on_singleton_class_test.rb +0 -70
- data/test/acceptance/stub_instance_method_defined_on_superclass_test.rb +0 -72
- data/test/acceptance/stub_method_defined_on_module_and_aliased_test.rb +0 -39
- data/test/acceptance/stub_module_method_test.rb +0 -163
- data/test/acceptance/stub_test.rb +0 -52
- data/test/acceptance/stubba_example_test.rb +0 -102
- data/test/acceptance/stubba_test_result_test.rb +0 -66
- data/test/acceptance/stubbing_error_backtrace_test.rb +0 -64
- data/test/acceptance/stubbing_frozen_object_test.rb +0 -88
- data/test/acceptance/stubbing_method_accepting_block_parameter_test.rb +0 -48
- data/test/acceptance/stubbing_method_unnecessarily_test.rb +0 -65
- data/test/acceptance/stubbing_nil_test.rb +0 -61
- data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +0 -143
- data/test/acceptance/stubbing_non_existent_class_method_test.rb +0 -157
- data/test/acceptance/stubbing_non_existent_instance_method_test.rb +0 -147
- data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +0 -130
- data/test/acceptance/stubbing_non_public_class_method_test.rb +0 -163
- data/test/acceptance/stubbing_non_public_instance_method_test.rb +0 -143
- data/test/acceptance/stubbing_on_non_mock_object_test.rb +0 -64
- data/test/acceptance/stubbing_same_class_method_on_parent_and_child_classes_test.rb +0 -35
- data/test/acceptance/throw_test.rb +0 -45
- data/test/acceptance/unexpected_invocation_test.rb +0 -25
- data/test/acceptance/unstubbing_test.rb +0 -168
- data/test/assertions.rb +0 -8
- data/test/deprecation_disabler.rb +0 -15
- data/test/execution_point.rb +0 -36
- data/test/integration/mini_test_test.rb +0 -8
- data/test/integration/shared_tests.rb +0 -174
- data/test/integration/test_unit_test.rb +0 -8
- data/test/method_definer.rb +0 -24
- data/test/mini_test_result.rb +0 -90
- data/test/minitest_result.rb +0 -49
- data/test/simple_counter.rb +0 -13
- data/test/test_helper.rb +0 -50
- data/test/test_runner.rb +0 -58
- data/test/test_unit_result.rb +0 -20
- data/test/unit/any_instance_method_test.rb +0 -134
- data/test/unit/array_inspect_test.rb +0 -16
- data/test/unit/backtrace_filter_test.rb +0 -19
- data/test/unit/cardinality_test.rb +0 -56
- data/test/unit/central_test.rb +0 -100
- data/test/unit/change_state_side_effect_test.rb +0 -41
- data/test/unit/class_method_test.rb +0 -225
- data/test/unit/class_methods_test.rb +0 -40
- data/test/unit/configuration_test.rb +0 -38
- data/test/unit/date_time_inspect_test.rb +0 -21
- data/test/unit/exception_raiser_test.rb +0 -42
- data/test/unit/expectation_list_test.rb +0 -82
- data/test/unit/expectation_test.rb +0 -497
- data/test/unit/hash_inspect_test.rb +0 -16
- data/test/unit/hooks_test.rb +0 -29
- data/test/unit/in_state_ordering_constraint_test.rb +0 -43
- data/test/unit/method_matcher_test.rb +0 -28
- data/test/unit/mock_test.rb +0 -342
- data/test/unit/mockery_test.rb +0 -151
- data/test/unit/module_methods_test.rb +0 -19
- data/test/unit/multiple_yields_test.rb +0 -18
- data/test/unit/no_yields_test.rb +0 -18
- data/test/unit/object_inspect_test.rb +0 -39
- data/test/unit/object_methods_test.rb +0 -46
- data/test/unit/parameter_matchers/all_of_test.rb +0 -26
- data/test/unit/parameter_matchers/any_of_test.rb +0 -26
- data/test/unit/parameter_matchers/anything_test.rb +0 -21
- data/test/unit/parameter_matchers/equals_test.rb +0 -25
- data/test/unit/parameter_matchers/has_entries_test.rb +0 -51
- data/test/unit/parameter_matchers/has_entry_test.rb +0 -129
- data/test/unit/parameter_matchers/has_key_test.rb +0 -55
- data/test/unit/parameter_matchers/has_value_test.rb +0 -57
- data/test/unit/parameter_matchers/includes_test.rb +0 -102
- data/test/unit/parameter_matchers/instance_of_test.rb +0 -25
- data/test/unit/parameter_matchers/is_a_test.rb +0 -25
- data/test/unit/parameter_matchers/kind_of_test.rb +0 -25
- data/test/unit/parameter_matchers/not_test.rb +0 -26
- data/test/unit/parameter_matchers/regexp_matches_test.rb +0 -46
- data/test/unit/parameter_matchers/responds_with_test.rb +0 -32
- data/test/unit/parameter_matchers/stub_matcher.rb +0 -27
- data/test/unit/parameter_matchers/yaml_equivalent_test.rb +0 -25
- data/test/unit/parameters_matcher_test.rb +0 -121
- data/test/unit/receivers_test.rb +0 -66
- data/test/unit/return_values_test.rb +0 -63
- data/test/unit/sequence_test.rb +0 -104
- data/test/unit/single_return_value_test.rb +0 -14
- data/test/unit/single_yield_test.rb +0 -18
- data/test/unit/state_machine_test.rb +0 -98
- data/test/unit/string_inspect_test.rb +0 -11
- data/test/unit/thrower_test.rb +0 -20
- data/test/unit/yield_parameters_test.rb +0 -93
@@ -1,34 +1,34 @@
|
|
1
|
+
require 'mocha/deprecation'
|
1
2
|
require 'mocha/parameter_matchers/base'
|
2
3
|
require 'uri'
|
4
|
+
require 'cgi'
|
3
5
|
|
4
6
|
module Mocha
|
5
7
|
module ParameterMatchers
|
6
|
-
|
7
8
|
# Matches a URI without regard to the ordering of parameters in the query string.
|
8
9
|
#
|
9
10
|
# @param [String] uri URI to match.
|
10
|
-
# @return [
|
11
|
+
# @return [EquivalentUri] parameter matcher.
|
11
12
|
#
|
12
13
|
# @see Expectation#with
|
13
14
|
#
|
14
|
-
# @example Actual URI
|
15
|
+
# @example Actual URI is equivalent.
|
15
16
|
# object = mock()
|
16
|
-
# object.expects(:method_1).with(
|
17
|
+
# object.expects(:method_1).with(equivalent_uri('http://example.com/foo?a=1&b=2))
|
17
18
|
# object.method_1('http://example.com/foo?b=2&a=1')
|
18
19
|
# # no error raised
|
19
20
|
#
|
20
|
-
# @example Actual URI
|
21
|
+
# @example Actual URI is not equivalent.
|
21
22
|
# object = mock()
|
22
|
-
# object.expects(:method_1).with(
|
23
|
+
# object.expects(:method_1).with(equivalent_uri('http://example.com/foo?a=1&b=2))
|
23
24
|
# object.method_1('http://example.com/foo?a=1&b=3')
|
24
25
|
# # error raised, because the query parameters were different
|
25
|
-
def
|
26
|
-
|
26
|
+
def equivalent_uri(uri)
|
27
|
+
EquivalentUri.new(uri)
|
27
28
|
end
|
28
29
|
|
29
30
|
# Parameter matcher which matches URIs with equivalent query strings.
|
30
|
-
class
|
31
|
-
|
31
|
+
class EquivalentUri < Base
|
32
32
|
# @private
|
33
33
|
def initialize(uri)
|
34
34
|
@uri = URI.parse(uri)
|
@@ -43,16 +43,16 @@ module Mocha
|
|
43
43
|
|
44
44
|
# @private
|
45
45
|
def mocha_inspect
|
46
|
-
"
|
46
|
+
"equivalent_uri(#{@uri.mocha_inspect})"
|
47
47
|
end
|
48
48
|
|
49
|
-
|
49
|
+
private
|
50
|
+
|
50
51
|
# @private
|
51
52
|
def explode(uri)
|
52
|
-
query_hash = (uri.query || '')
|
53
|
-
URI::Generic::COMPONENT.inject({}){ |h, k| h.merge(k => uri.__send__(k)) }.merge(:query => query_hash)
|
53
|
+
query_hash = CGI.parse(uri.query || '')
|
54
|
+
URI::Generic::COMPONENT.inject({}) { |h, k| h.merge(k => uri.__send__(k)) }.merge(:query => query_hash)
|
54
55
|
end
|
55
|
-
|
56
56
|
end
|
57
57
|
end
|
58
58
|
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,13 @@ 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
|
27
|
-
|
25
|
+
#
|
26
|
+
def has_entries(entries) # rubocop:disable Naming/PredicateName
|
28
27
|
HasEntries.new(entries)
|
29
28
|
end
|
30
29
|
|
31
30
|
# Parameter matcher which matches when actual parameter contains all expected +Hash+ entries.
|
32
31
|
class HasEntries < Base
|
33
|
-
|
34
32
|
# @private
|
35
33
|
def initialize(entries)
|
36
34
|
@entries = entries
|
@@ -47,9 +45,6 @@ module Mocha
|
|
47
45
|
def mocha_inspect
|
48
46
|
"has_entries(#{@entries.mocha_inspect})"
|
49
47
|
end
|
50
|
-
|
51
48
|
end
|
52
|
-
|
53
49
|
end
|
54
|
-
|
55
50
|
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,36 +39,27 @@ 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
|
44
|
-
|
42
|
+
#
|
43
|
+
def has_entry(*options) # rubocop:disable Naming/PredicateName
|
45
44
|
case options.length
|
45
|
+
when 0
|
46
|
+
raise ArgumentError, 'No arguments. Expecting at least one.'
|
46
47
|
when 1
|
47
|
-
|
48
|
-
when Hash
|
49
|
-
case options[0].length
|
50
|
-
when 0
|
51
|
-
raise ArgumentError.new("Argument has no entries.")
|
52
|
-
when 1
|
53
|
-
key, value = options[0].first
|
54
|
-
else
|
55
|
-
raise ArgumentError.new("Argument has multiple entries. Use Mocha::ParameterMatchers#has_entries instead.")
|
56
|
-
end
|
57
|
-
else
|
58
|
-
raise ArgumentError.new("Argument is not a Hash.")
|
59
|
-
end
|
48
|
+
key, value = parse_option(options[0])
|
60
49
|
when 2
|
61
50
|
key, value = options
|
62
51
|
else
|
63
|
-
raise ArgumentError
|
52
|
+
raise ArgumentError, 'Too many arguments; use either a single argument (must be a Hash) or two arguments (a key and a value).'
|
64
53
|
end
|
65
54
|
HasEntry.new(key, value)
|
66
55
|
end
|
67
56
|
|
68
57
|
# Parameter matcher which matches when actual parameter contains expected +Hash+ entry.
|
69
58
|
class HasEntry < Base
|
70
|
-
|
71
59
|
# @private
|
72
60
|
def initialize(key, value)
|
73
|
-
@key
|
61
|
+
@key = key
|
62
|
+
@value = value
|
74
63
|
end
|
75
64
|
|
76
65
|
# @private
|
@@ -85,9 +74,25 @@ module Mocha
|
|
85
74
|
def mocha_inspect
|
86
75
|
"has_entry(#{@key.mocha_inspect} => #{@value.mocha_inspect})"
|
87
76
|
end
|
88
|
-
|
89
77
|
end
|
90
78
|
|
91
|
-
|
79
|
+
private
|
92
80
|
|
81
|
+
# @private
|
82
|
+
def parse_option(option)
|
83
|
+
case option
|
84
|
+
when Hash
|
85
|
+
case option.length
|
86
|
+
when 0
|
87
|
+
raise ArgumentError, 'Argument has no entries.'
|
88
|
+
when 1
|
89
|
+
option.first
|
90
|
+
else
|
91
|
+
raise ArgumentError, 'Argument has multiple entries. Use Mocha::ParameterMatchers#has_entries instead.'
|
92
|
+
end
|
93
|
+
else
|
94
|
+
raise ArgumentError, 'Argument is not a Hash.'
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
93
98
|
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,13 @@ 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'
|
25
|
-
|
23
|
+
#
|
24
|
+
def has_key(key) # rubocop:disable Naming/PredicateName
|
26
25
|
HasKey.new(key)
|
27
26
|
end
|
28
27
|
|
29
28
|
# Parameter matcher which matches when actual parameter contains +Hash+ entry with expected key.
|
30
29
|
class HasKey < Base
|
31
|
-
|
32
30
|
# @private
|
33
31
|
def initialize(key)
|
34
32
|
@key = key
|
@@ -45,9 +43,6 @@ module Mocha
|
|
45
43
|
def mocha_inspect
|
46
44
|
"has_key(#{@key.mocha_inspect})"
|
47
45
|
end
|
48
|
-
|
49
46
|
end
|
50
|
-
|
51
47
|
end
|
52
|
-
|
53
48
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'mocha/parameter_matchers/base'
|
2
|
+
|
3
|
+
module Mocha
|
4
|
+
module ParameterMatchers
|
5
|
+
# Matches +Hash+ containing +keys+.
|
6
|
+
#
|
7
|
+
# @param [*Array<Object>] keys expected keys.
|
8
|
+
# @return [HasKeys] parameter matcher.
|
9
|
+
#
|
10
|
+
# @see Expectation#with
|
11
|
+
#
|
12
|
+
# @example Actual parameter contains entry with expected keys.
|
13
|
+
# object = mock()
|
14
|
+
# object.expects(:method_1).with(has_keys(:key_1, :key_2))
|
15
|
+
# object.method_1(:key_1 => 1, :key_2 => 2, :key_3 => 3)
|
16
|
+
# # no error raised
|
17
|
+
#
|
18
|
+
# @example Actual parameter does not contain all expected keys.
|
19
|
+
# object = mock()
|
20
|
+
# object.expects(:method_1).with(has_keys(:key_1, :key_2))
|
21
|
+
# object.method_1(:key_2 => 2)
|
22
|
+
# # error raised, because method_1 was not called with Hash containing key: :key_1
|
23
|
+
#
|
24
|
+
def has_keys(*keys) # rubocop:disable Naming/PredicateName
|
25
|
+
HasKeys.new(*keys)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Parameter matcher which matches when actual parameter contains +Hash+ with all expected keys.
|
29
|
+
class HasKeys < Base
|
30
|
+
# @private
|
31
|
+
def initialize(*keys)
|
32
|
+
raise ArgumentError, 'No arguments. Expecting at least one.' if keys.empty?
|
33
|
+
|
34
|
+
@keys = keys
|
35
|
+
end
|
36
|
+
|
37
|
+
# @private
|
38
|
+
def matches?(available_parameters)
|
39
|
+
parameter = available_parameters.shift
|
40
|
+
return false unless parameter.respond_to?(:keys)
|
41
|
+
|
42
|
+
@keys.map(&:to_matcher).all? do |matcher|
|
43
|
+
parameter.keys.any? { |key| matcher.matches?([key]) }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# @private
|
48
|
+
def mocha_inspect
|
49
|
+
"has_keys(#{@keys.mocha_inspect(false)})"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
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,13 @@ 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
|
25
|
-
|
23
|
+
#
|
24
|
+
def has_value(value) # rubocop:disable Naming/PredicateName
|
26
25
|
HasValue.new(value)
|
27
26
|
end
|
28
27
|
|
29
28
|
# Parameter matcher which matches when actual parameter contains +Hash+ entry with expected value.
|
30
29
|
class HasValue < Base
|
31
|
-
|
32
30
|
# @private
|
33
31
|
def initialize(value)
|
34
32
|
@value = value
|
@@ -45,9 +43,6 @@ module Mocha
|
|
45
43
|
def mocha_inspect
|
46
44
|
"has_value(#{@value.mocha_inspect})"
|
47
45
|
end
|
48
|
-
|
49
46
|
end
|
50
|
-
|
51
47
|
end
|
52
|
-
|
53
48
|
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,36 +66,37 @@ 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
|
75
72
|
end
|
76
73
|
|
77
74
|
# @private
|
75
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
78
76
|
def matches?(available_parameters)
|
79
77
|
parameter = available_parameters.shift
|
80
78
|
return false unless parameter.respond_to?(:include?)
|
81
79
|
if @items.size == 1
|
80
|
+
# rubocop:disable Style/GuardClause
|
82
81
|
if parameter.respond_to?(:any?) && !parameter.is_a?(String)
|
83
|
-
|
82
|
+
parameter = parameter.keys if parameter.is_a?(Hash)
|
83
|
+
return parameter.any? { |p| @items.first.to_matcher.matches?([p]) }
|
84
84
|
else
|
85
85
|
return parameter.include?(@items.first)
|
86
86
|
end
|
87
|
+
# rubocop:enable Style/GuardClause
|
87
88
|
else
|
88
89
|
includes_matchers = @items.map { |item| Includes.new(item) }
|
89
90
|
AllOf.new(*includes_matchers).matches?([parameter])
|
90
91
|
end
|
91
92
|
end
|
93
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
92
94
|
|
93
95
|
# @private
|
94
96
|
def mocha_inspect
|
95
97
|
item_descriptions = @items.map(&:mocha_inspect)
|
96
98
|
"includes(#{item_descriptions.join(', ')})"
|
97
99
|
end
|
98
|
-
|
99
100
|
end
|
100
|
-
|
101
101
|
end
|
102
|
-
|
103
102
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'mocha/parameter_matchers/equals'
|
2
|
+
|
3
|
+
module Mocha
|
4
|
+
module ParameterMatchers
|
5
|
+
# @private
|
6
|
+
module InstanceMethods
|
7
|
+
# @private
|
8
|
+
def to_matcher
|
9
|
+
Mocha::ParameterMatchers::Equals.new(self)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# @private
|
16
|
+
class Object
|
17
|
+
include Mocha::ParameterMatchers::InstanceMethods
|
18
|
+
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,13 @@ 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
|
26
|
-
|
24
|
+
#
|
25
|
+
def is_a(klass) # rubocop:disable Naming/PredicateName
|
27
26
|
IsA.new(klass)
|
28
27
|
end
|
29
28
|
|
30
29
|
# Parameter matcher which matches when actual parameter is a specific class.
|
31
30
|
class IsA < Base
|
32
|
-
|
33
31
|
# @private
|
34
32
|
def initialize(klass)
|
35
33
|
@klass = klass
|
@@ -45,9 +43,6 @@ module Mocha
|
|
45
43
|
def mocha_inspect
|
46
44
|
"is_a(#{@klass.mocha_inspect})"
|
47
45
|
end
|
48
|
-
|
49
46
|
end
|
50
|
-
|
51
47
|
end
|
52
|
-
|
53
48
|
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,13 @@ 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
|
25
|
-
|
23
|
+
#
|
24
|
+
def Not(matcher) # rubocop:disable Naming/MethodName
|
26
25
|
Not.new(matcher)
|
27
26
|
end
|
28
27
|
|
29
28
|
# Parameter matcher which inverts the logic of the specified matcher using a logical NOT operation.
|
30
29
|
class Not < Base
|
31
|
-
|
32
30
|
# @private
|
33
31
|
def initialize(matcher)
|
34
32
|
@matcher = matcher
|
@@ -44,9 +42,6 @@ module Mocha
|
|
44
42
|
def mocha_inspect
|
45
43
|
"Not(#{@matcher.mocha_inspect})"
|
46
44
|
end
|
47
|
-
|
48
45
|
end
|
49
|
-
|
50
46
|
end
|
51
|
-
|
52
47
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
module ParameterMatchers
|
4
|
-
|
5
3
|
# Matches optional parameters if available.
|
6
4
|
#
|
7
5
|
# @param [*Array<Base>] matchers matchers for optional parameters.
|
@@ -38,30 +36,26 @@ module Mocha
|
|
38
36
|
|
39
37
|
# Parameter matcher which allows optional parameters to be specified.
|
40
38
|
class Optionally < Base
|
41
|
-
|
42
39
|
# @private
|
43
40
|
def initialize(*parameters)
|
44
|
-
@matchers = parameters.map
|
41
|
+
@matchers = parameters.map(&:to_matcher)
|
45
42
|
end
|
46
43
|
|
47
44
|
# @private
|
48
45
|
def matches?(available_parameters)
|
49
46
|
index = 0
|
50
|
-
while
|
47
|
+
while !available_parameters.empty? && (index < @matchers.length)
|
51
48
|
matcher = @matchers[index]
|
52
49
|
return false unless matcher.matches?(available_parameters)
|
53
50
|
index += 1
|
54
51
|
end
|
55
|
-
|
52
|
+
true
|
56
53
|
end
|
57
54
|
|
58
55
|
# @private
|
59
56
|
def mocha_inspect
|
60
|
-
"optionally(#{@matchers.map
|
57
|
+
"optionally(#{@matchers.map(&:mocha_inspect).join(', ')})"
|
61
58
|
end
|
62
|
-
|
63
59
|
end
|
64
|
-
|
65
60
|
end
|
66
|
-
|
67
61
|
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 matches +regexp+.
|
8
6
|
#
|
9
7
|
# @param [Regexp] regexp regular expression to match.
|
@@ -29,7 +27,6 @@ module Mocha
|
|
29
27
|
|
30
28
|
# Parameter matcher which matches if specified regular expression matches actual paramter.
|
31
29
|
class RegexpMatches < Base
|
32
|
-
|
33
30
|
# @private
|
34
31
|
def initialize(regexp)
|
35
32
|
@regexp = regexp
|
@@ -46,9 +43,6 @@ module Mocha
|
|
46
43
|
def mocha_inspect
|
47
44
|
"regexp_matches(#{@regexp.mocha_inspect})"
|
48
45
|
end
|
49
|
-
|
50
46
|
end
|
51
|
-
|
52
47
|
end
|
53
|
-
|
54
48
|
end
|
@@ -2,9 +2,7 @@ require 'mocha/parameter_matchers/base'
|
|
2
2
|
require 'yaml'
|
3
3
|
|
4
4
|
module Mocha
|
5
|
-
|
6
5
|
module ParameterMatchers
|
7
|
-
|
8
6
|
# Matches any object that responds to +message+ with +result+. To put it another way, it tests the quack, not the duck.
|
9
7
|
#
|
10
8
|
# @param [Symbol] message method to invoke.
|
@@ -30,25 +28,22 @@ module Mocha
|
|
30
28
|
|
31
29
|
# Parameter matcher which matches if actual parameter returns expected result when specified method is invoked.
|
32
30
|
class RespondsWith < Base
|
33
|
-
|
34
31
|
# @private
|
35
32
|
def initialize(message, result)
|
36
|
-
@message
|
33
|
+
@message = message
|
34
|
+
@result = result
|
37
35
|
end
|
38
36
|
|
39
37
|
# @private
|
40
38
|
def matches?(available_parameters)
|
41
39
|
parameter = available_parameters.shift
|
42
|
-
@result.to_matcher.matches?(
|
40
|
+
@result.to_matcher.matches?([parameter.__send__(@message)])
|
43
41
|
end
|
44
42
|
|
45
43
|
# @private
|
46
44
|
def mocha_inspect
|
47
45
|
"responds_with(#{@message.mocha_inspect}, #{@result.mocha_inspect})"
|
48
46
|
end
|
49
|
-
|
50
47
|
end
|
51
|
-
|
52
48
|
end
|
53
|
-
|
54
49
|
end
|
@@ -2,9 +2,7 @@ require 'mocha/parameter_matchers/base'
|
|
2
2
|
require 'yaml'
|
3
3
|
|
4
4
|
module Mocha
|
5
|
-
|
6
5
|
module ParameterMatchers
|
7
|
-
|
8
6
|
# Matches any YAML that represents the specified +object+
|
9
7
|
#
|
10
8
|
# @param [Object] object object whose YAML to compare.
|
@@ -29,7 +27,6 @@ module Mocha
|
|
29
27
|
|
30
28
|
# Parameter matcher which matches if actual parameter is YAML equivalent of specified object.
|
31
29
|
class YamlEquivalent < Base
|
32
|
-
|
33
30
|
# @private
|
34
31
|
def initialize(object)
|
35
32
|
@object = object
|
@@ -38,16 +35,15 @@ module Mocha
|
|
38
35
|
# @private
|
39
36
|
def matches?(available_parameters)
|
40
37
|
parameter = available_parameters.shift
|
38
|
+
# rubocop:disable Security/YAMLLoad
|
41
39
|
@object == YAML.load(parameter)
|
40
|
+
# rubocop:enable Security/YAMLLoad
|
42
41
|
end
|
43
42
|
|
44
43
|
# @private
|
45
44
|
def mocha_inspect
|
46
45
|
"yaml_equivalent(#{@object.mocha_inspect})"
|
47
46
|
end
|
48
|
-
|
49
47
|
end
|
50
|
-
|
51
48
|
end
|
52
|
-
|
53
49
|
end
|