mocha 2.7.0 → 2.8.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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/RELEASE.md +23 -0
  4. data/lib/mocha/api.rb +1 -1
  5. data/lib/mocha/configuration.rb +8 -1
  6. data/lib/mocha/expectation.rb +26 -5
  7. data/lib/mocha/parameter_matchers/all_of.rb +30 -21
  8. data/lib/mocha/parameter_matchers/any_of.rb +36 -27
  9. data/lib/mocha/parameter_matchers/any_parameters.rb +28 -19
  10. data/lib/mocha/parameter_matchers/anything.rb +25 -16
  11. data/lib/mocha/parameter_matchers/base.rb +22 -4
  12. data/lib/mocha/parameter_matchers/deprecations.rb +46 -0
  13. data/lib/mocha/parameter_matchers/equals.rb +31 -22
  14. data/lib/mocha/parameter_matchers/equivalent_uri.rb +30 -21
  15. data/lib/mocha/parameter_matchers/has_entries.rb +31 -22
  16. data/lib/mocha/parameter_matchers/has_entry.rb +72 -65
  17. data/lib/mocha/parameter_matchers/has_key.rb +31 -22
  18. data/lib/mocha/parameter_matchers/has_keys.rb +31 -22
  19. data/lib/mocha/parameter_matchers/has_value.rb +31 -22
  20. data/lib/mocha/parameter_matchers/includes.rb +69 -60
  21. data/lib/mocha/parameter_matchers/instance_methods.rb +1 -1
  22. data/lib/mocha/parameter_matchers/instance_of.rb +31 -22
  23. data/lib/mocha/parameter_matchers/is_a.rb +32 -23
  24. data/lib/mocha/parameter_matchers/kind_of.rb +31 -22
  25. data/lib/mocha/parameter_matchers/not.rb +31 -22
  26. data/lib/mocha/parameter_matchers/optionally.rb +43 -33
  27. data/lib/mocha/parameter_matchers/positional_or_keyword_hash.rb +6 -1
  28. data/lib/mocha/parameter_matchers/regexp_matches.rb +31 -22
  29. data/lib/mocha/parameter_matchers/responds_with.rb +55 -46
  30. data/lib/mocha/parameter_matchers/yaml_equivalent.rb +30 -21
  31. data/lib/mocha/parameter_matchers.rb +6 -2
  32. data/lib/mocha/parameters_matcher.rb +7 -3
  33. data/lib/mocha/version.rb +1 -1
  34. metadata +4 -3
@@ -1,60 +1,67 @@
1
1
  require 'mocha/parameter_matchers/base'
2
2
  require 'mocha/parameter_matchers/all_of'
3
+ require 'mocha/parameter_matchers/deprecations'
3
4
  require 'yaml'
4
5
 
5
6
  module Mocha
6
7
  module ParameterMatchers
7
- # @overload def responds_with(message, result)
8
- # Matches any object that responds to +message+ with +result+. To put it another way, it tests the quack, not the duck.
9
- # @param [Symbol] message method to invoke.
10
- # @param [Object] result expected result of sending +message+.
11
- # @overload def responds_with(messages_vs_results)
12
- # Matches any object that responds to all the messages with the corresponding results as specified by +messages_vs_results+.
13
- # @param [Hash<Symbol,Object>] messages_vs_results +Hash+ of messages vs results.
14
- # @raise [ArgumentError] if +messages_vs_results+ does not contain at least one entry.
15
- #
16
- # @return [RespondsWith] parameter matcher.
17
- #
18
- # @see Expectation#with
19
- #
20
- # @example Actual parameter responds with "FOO" when :upcase is invoked.
21
- # object = mock()
22
- # object.expects(:method_1).with(responds_with(:upcase, "FOO"))
23
- # object.method_1("foo")
24
- # # no error raised, because "foo".upcase == "FOO"
25
- #
26
- # @example Actual parameter does not respond with "FOO" when :upcase is invoked.
27
- # object = mock()
28
- # object.expects(:method_1).with(responds_with(:upcase, "BAR"))
29
- # object.method_1("foo")
30
- # # error raised, because "foo".upcase != "BAR"
31
- #
32
- # @example Actual parameter responds with "FOO" when :upcase is invoked and "oof" when :reverse is invoked.
33
- # object = mock()
34
- # object.expects(:method_1).with(responds_with(upcase: "FOO", reverse: "oof"))
35
- # object.method_1("foo")
36
- # # no error raised, because "foo".upcase == "FOO" and "foo".reverse == "oof"
37
- def responds_with(*options)
38
- case options.length
39
- when 0
40
- raise ArgumentError, 'No arguments. Expecting at least one.'
41
- when 1
42
- option = options.first
43
- raise ArgumentError, 'Argument is not a Hash.' unless option.is_a?(Hash)
44
- raise ArgumentError, 'Argument has no entries.' if option.empty?
8
+ module Methods
9
+ # @overload def responds_with(message, result)
10
+ # Matches any object that responds to +message+ with +result+. To put it another way, it tests the quack, not the duck.
11
+ # @param [Symbol] message method to invoke.
12
+ # @param [Object] result expected result of sending +message+.
13
+ # @overload def responds_with(messages_vs_results)
14
+ # Matches any object that responds to all the messages with the corresponding results as specified by +messages_vs_results+.
15
+ # @param [Hash<Symbol,Object>] messages_vs_results +Hash+ of messages vs results.
16
+ # @raise [ArgumentError] if +messages_vs_results+ does not contain at least one entry.
17
+ #
18
+ # @return [RespondsWith] parameter matcher.
19
+ #
20
+ # @see Expectation#with
21
+ #
22
+ # @example Actual parameter responds with "FOO" when :upcase is invoked.
23
+ # object = mock()
24
+ # object.expects(:method_1).with(responds_with(:upcase, "FOO"))
25
+ # object.method_1("foo")
26
+ # # no error raised, because "foo".upcase == "FOO"
27
+ #
28
+ # @example Actual parameter does not respond with "FOO" when :upcase is invoked.
29
+ # object = mock()
30
+ # object.expects(:method_1).with(responds_with(:upcase, "BAR"))
31
+ # object.method_1("foo")
32
+ # # error raised, because "foo".upcase != "BAR"
33
+ #
34
+ # @example Actual parameter responds with "FOO" when :upcase is invoked and "oof" when :reverse is invoked.
35
+ # object = mock()
36
+ # object.expects(:method_1).with(responds_with(upcase: "FOO", reverse: "oof"))
37
+ # object.method_1("foo")
38
+ # # no error raised, because "foo".upcase == "FOO" and "foo".reverse == "oof"
39
+ def responds_with(*options)
40
+ case options.length
41
+ when 0
42
+ raise ArgumentError, 'No arguments. Expecting at least one.'
43
+ when 1
44
+ option = options.first
45
+ raise ArgumentError, 'Argument is not a Hash.' unless option.is_a?(Hash)
46
+ raise ArgumentError, 'Argument has no entries.' if option.empty?
45
47
 
46
- matchers = option.map { |message, result| RespondsWith.new(message, result) }
47
- AllOf.new(*matchers)
48
- when 2
49
- message, result = options
50
- RespondsWith.new(message, result)
51
- else
52
- raise ArgumentError, 'Too many arguments; use either a single argument (must be a Hash) or two arguments (a message and a result).'
48
+ matchers = option.map { |message, result| RespondsWith.new(message, result) }
49
+ AllOf.new(*matchers)
50
+ when 2
51
+ message, result = options
52
+ RespondsWith.new(message, result)
53
+ else
54
+ raise ArgumentError, 'Too many arguments; use either a single argument (must be a Hash) or two arguments (a message and a result).'
55
+ end
53
56
  end
54
57
  end
55
58
 
59
+ define_deprecated_matcher_method(:responds_with)
60
+
56
61
  # Parameter matcher which matches if actual parameter returns expected result when specified method is invoked.
57
- class RespondsWith < Base
62
+ class RespondsWith
63
+ include BaseMethods
64
+
58
65
  # @private
59
66
  def initialize(message, result)
60
67
  @message = message
@@ -72,5 +79,7 @@ module Mocha
72
79
  "responds_with(#{@message.mocha_inspect}, #{@result.mocha_inspect})"
73
80
  end
74
81
  end
82
+
83
+ provide_deprecated_access_to(:RespondsWith)
75
84
  end
76
85
  end
@@ -1,32 +1,39 @@
1
1
  require 'mocha/parameter_matchers/base'
2
+ require 'mocha/parameter_matchers/deprecations'
2
3
  require 'yaml'
3
4
 
4
5
  module Mocha
5
6
  module ParameterMatchers
6
- # Matches any YAML that represents the specified +object+
7
- #
8
- # @param [Object] object object whose YAML to compare.
9
- # @return [YamlEquivalent] parameter matcher.
10
- #
11
- # @see Expectation#with
12
- #
13
- # @example Actual parameter is YAML equivalent of specified +object+.
14
- # object = mock()
15
- # object.expects(:method_1).with(yaml_equivalent(1, 2, 3))
16
- # object.method_1("--- \n- 1\n- 2\n- 3\n")
17
- # # no error raised
18
- #
19
- # @example Actual parameter is not YAML equivalent of specified +object+.
20
- # object = mock()
21
- # object.expects(:method_1).with(yaml_equivalent(1, 2, 3))
22
- # object.method_1("--- \n- 1\n- 2\n")
23
- # # error raised, because method_1 was not called with YAML representing the specified Array
24
- def yaml_equivalent(object)
25
- YamlEquivalent.new(object)
7
+ module Methods
8
+ # Matches any YAML that represents the specified +object+
9
+ #
10
+ # @param [Object] object object whose YAML to compare.
11
+ # @return [YamlEquivalent] parameter matcher.
12
+ #
13
+ # @see Expectation#with
14
+ #
15
+ # @example Actual parameter is YAML equivalent of specified +object+.
16
+ # object = mock()
17
+ # object.expects(:method_1).with(yaml_equivalent(1, 2, 3))
18
+ # object.method_1("--- \n- 1\n- 2\n- 3\n")
19
+ # # no error raised
20
+ #
21
+ # @example Actual parameter is not YAML equivalent of specified +object+.
22
+ # object = mock()
23
+ # object.expects(:method_1).with(yaml_equivalent(1, 2, 3))
24
+ # object.method_1("--- \n- 1\n- 2\n")
25
+ # # error raised, because method_1 was not called with YAML representing the specified Array
26
+ def yaml_equivalent(object)
27
+ YamlEquivalent.new(object)
28
+ end
26
29
  end
27
30
 
31
+ define_deprecated_matcher_method(:yaml_equivalent)
32
+
28
33
  # Parameter matcher which matches if actual parameter is YAML equivalent of specified object.
29
- class YamlEquivalent < Base
34
+ class YamlEquivalent
35
+ include BaseMethods
36
+
30
37
  # @private
31
38
  def initialize(object)
32
39
  @object = object
@@ -45,5 +52,7 @@ module Mocha
45
52
  "yaml_equivalent(#{@object.mocha_inspect})"
46
53
  end
47
54
  end
55
+
56
+ provide_deprecated_access_to(:YamlEquivalent)
48
57
  end
49
58
  end
@@ -1,8 +1,12 @@
1
1
  module Mocha
2
- # Used as parameters for {Expectation#with} to restrict the parameter values which will match the expectation. Can be nested.
3
- module ParameterMatchers; end
2
+ # Matcher classes used as parameters for {Expectation#with} to restrict the parameter values which will match the expectation. Can be nested. Build matcher instances in tests using methods in {Methods}, e.g. {Methods#includes}.
3
+ module ParameterMatchers
4
+ # These methods build instances of the {ParameterMatchers} classes which are used with {Expectation#with} to restrict the parameter values. Can be nested, e.g. see {Methods#all_of} examples.
5
+ module Methods; end
6
+ end
4
7
  end
5
8
 
9
+ require 'mocha/parameter_matchers/deprecations'
6
10
  require 'mocha/parameter_matchers/instance_methods'
7
11
 
8
12
  require 'mocha/parameter_matchers/all_of'
@@ -22,9 +22,13 @@ module Mocha
22
22
  end
23
23
 
24
24
  def mocha_inspect
25
- signature = matchers.mocha_inspect
26
- signature = signature.gsub(/^\[|\]$/, '')
27
- "(#{signature})"
25
+ if @matching_block
26
+ '(arguments_accepted_by_custom_matching_block)'
27
+ else
28
+ signature = matchers.mocha_inspect
29
+ signature = signature.gsub(/^\[|\]$/, '')
30
+ "(#{signature})"
31
+ end
28
32
  end
29
33
 
30
34
  def matchers
data/lib/mocha/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mocha
2
- VERSION = '2.7.0'.freeze
2
+ VERSION = '2.8.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mocha
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.0
4
+ version: 2.8.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: 2024-12-07 00:00:00.000000000 Z
11
+ date: 2025-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby2_keywords
@@ -94,6 +94,7 @@ files:
94
94
  - lib/mocha/parameter_matchers/any_parameters.rb
95
95
  - lib/mocha/parameter_matchers/anything.rb
96
96
  - lib/mocha/parameter_matchers/base.rb
97
+ - lib/mocha/parameter_matchers/deprecations.rb
97
98
  - lib/mocha/parameter_matchers/equals.rb
98
99
  - lib/mocha/parameter_matchers/equivalent_uri.rb
99
100
  - lib/mocha/parameter_matchers/has_entries.rb
@@ -154,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
155
  - !ruby/object:Gem::Version
155
156
  version: '0'
156
157
  requirements: []
157
- rubygems_version: 3.5.22
158
+ rubygems_version: 3.5.3
158
159
  signing_key:
159
160
  specification_version: 4
160
161
  summary: Mocking and stubbing library