mocha 2.7.1 → 3.0.0.pre.rc.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.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +67 -3
  3. data/.rubocop_todo.yml +25 -13
  4. data/Gemfile +11 -27
  5. data/README.md +3 -4
  6. data/RELEASE.md +37 -0
  7. data/Rakefile +6 -5
  8. data/gemfiles/Gemfile.minitest.latest +3 -3
  9. data/gemfiles/Gemfile.rubocop +9 -0
  10. data/gemfiles/Gemfile.test-unit.latest +3 -3
  11. data/lib/mocha/any_instance_method.rb +2 -0
  12. data/lib/mocha/any_instance_receiver.rb +20 -0
  13. data/lib/mocha/api.rb +4 -2
  14. data/lib/mocha/argument_iterator.rb +5 -5
  15. data/lib/mocha/backtrace_filter.rb +2 -0
  16. data/lib/mocha/{block_matcher.rb → block_matchers.rb} +2 -0
  17. data/lib/mocha/cardinality.rb +2 -2
  18. data/lib/mocha/central.rb +4 -0
  19. data/lib/mocha/change_state_side_effect.rb +2 -0
  20. data/lib/mocha/class_methods.rb +5 -4
  21. data/lib/mocha/configuration.rb +18 -41
  22. data/lib/mocha/default_name.rb +15 -0
  23. data/lib/mocha/default_receiver.rb +13 -0
  24. data/lib/mocha/deprecation.rb +15 -9
  25. data/lib/mocha/detection/minitest.rb +2 -0
  26. data/lib/mocha/detection/test_unit.rb +4 -1
  27. data/lib/mocha/error_with_filtered_backtrace.rb +2 -0
  28. data/lib/mocha/exception_raiser.rb +3 -0
  29. data/lib/mocha/expectation.rb +57 -23
  30. data/lib/mocha/expectation_error.rb +2 -0
  31. data/lib/mocha/expectation_error_factory.rb +2 -0
  32. data/lib/mocha/expectation_list.rb +2 -0
  33. data/lib/mocha/hooks.rb +2 -0
  34. data/lib/mocha/impersonating_any_instance_name.rb +13 -0
  35. data/lib/mocha/impersonating_name.rb +13 -0
  36. data/lib/mocha/in_state_ordering_constraint.rb +2 -0
  37. data/lib/mocha/inspect.rb +13 -10
  38. data/lib/mocha/instance_method.rb +2 -0
  39. data/lib/mocha/integration/assertion_counter.rb +2 -0
  40. data/lib/mocha/integration/minitest/adapter.rb +3 -0
  41. data/lib/mocha/integration/minitest.rb +4 -3
  42. data/lib/mocha/integration/monkey_patcher.rb +4 -2
  43. data/lib/mocha/integration/test_unit/adapter.rb +3 -0
  44. data/lib/mocha/integration/test_unit.rb +4 -3
  45. data/lib/mocha/invocation.rb +9 -6
  46. data/lib/mocha/logger.rb +2 -0
  47. data/lib/mocha/macos_version.rb +2 -0
  48. data/lib/mocha/method_matcher.rb +2 -0
  49. data/lib/mocha/minitest.rb +2 -1
  50. data/lib/mocha/mock.rb +8 -8
  51. data/lib/mocha/mockery.rb +16 -6
  52. data/lib/mocha/name.rb +13 -0
  53. data/lib/mocha/not_initialized_error.rb +2 -0
  54. data/lib/mocha/object_methods.rb +7 -5
  55. data/lib/mocha/object_receiver.rb +20 -0
  56. data/lib/mocha/parameter_matchers/all_of.rb +5 -1
  57. data/lib/mocha/parameter_matchers/any_of.rb +5 -1
  58. data/lib/mocha/parameter_matchers/any_parameters.rb +5 -1
  59. data/lib/mocha/parameter_matchers/anything.rb +5 -1
  60. data/lib/mocha/parameter_matchers/base.rb +4 -2
  61. data/lib/mocha/parameter_matchers/equals.rb +5 -1
  62. data/lib/mocha/parameter_matchers/equivalent_uri.rb +5 -1
  63. data/lib/mocha/parameter_matchers/has_entries.rb +5 -1
  64. data/lib/mocha/parameter_matchers/has_entry.rb +6 -1
  65. data/lib/mocha/parameter_matchers/has_key.rb +6 -1
  66. data/lib/mocha/parameter_matchers/has_keys.rb +6 -2
  67. data/lib/mocha/parameter_matchers/has_value.rb +6 -1
  68. data/lib/mocha/parameter_matchers/includes.rb +8 -7
  69. data/lib/mocha/parameter_matchers/instance_methods.rb +4 -2
  70. data/lib/mocha/parameter_matchers/instance_of.rb +5 -1
  71. data/lib/mocha/parameter_matchers/is_a.rb +5 -1
  72. data/lib/mocha/parameter_matchers/kind_of.rb +5 -1
  73. data/lib/mocha/parameter_matchers/not.rb +5 -1
  74. data/lib/mocha/parameter_matchers/optionally.rb +6 -1
  75. data/lib/mocha/parameter_matchers/positional_or_keyword_hash.rb +41 -16
  76. data/lib/mocha/parameter_matchers/regexp_matches.rb +6 -1
  77. data/lib/mocha/parameter_matchers/responds_with.rb +5 -1
  78. data/lib/mocha/parameter_matchers/yaml_equivalent.rb +5 -1
  79. data/lib/mocha/parameter_matchers.rb +2 -0
  80. data/lib/mocha/parameters_matcher.rb +9 -1
  81. data/lib/mocha/raised_exception.rb +2 -0
  82. data/lib/mocha/return_values.rb +2 -0
  83. data/lib/mocha/ruby_version.rb +3 -0
  84. data/lib/mocha/sequence.rb +2 -0
  85. data/lib/mocha/single_return_value.rb +1 -1
  86. data/lib/mocha/state_machine.rb +2 -0
  87. data/lib/mocha/stubbed_method.rb +9 -2
  88. data/lib/mocha/stubbing_error.rb +2 -0
  89. data/lib/mocha/test_unit.rb +2 -1
  90. data/lib/mocha/thrower.rb +2 -0
  91. data/lib/mocha/thrown_object.rb +2 -0
  92. data/lib/mocha/version.rb +3 -1
  93. data/lib/mocha/yield_parameters.rb +2 -0
  94. data/lib/mocha.rb +5 -0
  95. data/mocha.gemspec +10 -4
  96. metadata +17 -15
  97. data/lib/mocha/debug.rb +0 -9
  98. data/lib/mocha/integration/minitest/exception_translation.rb +0 -14
  99. data/lib/mocha/is_a.rb +0 -7
  100. data/lib/mocha/names.rb +0 -43
  101. data/lib/mocha/receivers.rb +0 -45
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mocha
2
4
  # Used to constrain the order in which expectations can occur.
3
5
  #
@@ -1,4 +1,4 @@
1
- require 'mocha/is_a'
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Mocha
4
4
  class SingleReturnValue
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mocha
2
4
  # A state machine that is used to constrain the order of invocations.
3
5
  # An invocation can be constrained to occur when a state {#is}, or {#is_not}, active.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ruby2_keywords'
2
4
  require 'mocha/ruby_version'
3
5
 
@@ -23,6 +25,7 @@ module Mocha
23
25
  remove_new_method
24
26
  mock.unstub(method_name.to_sym)
25
27
  return if mock.any_expectations?
28
+
26
29
  reset_mocha
27
30
  end
28
31
 
@@ -36,6 +39,7 @@ module Mocha
36
39
 
37
40
  def hide_original_method
38
41
  return unless original_method_owner.__method_exists__?(method_name)
42
+
39
43
  store_original_method_visibility
40
44
  use_prepended_module_for_stub_method
41
45
  end
@@ -55,8 +59,10 @@ module Mocha
55
59
  end
56
60
 
57
61
  def matches?(other)
58
- return false unless other.class == self.class
59
- (stubbee.object_id == other.stubbee.object_id) && (method_name == other.method_name)
62
+ return false unless other.instance_of?(self.class)
63
+
64
+ (stubbee.object_id == other.stubbee.object_id) && # rubocop:disable Lint/IdentityComparison
65
+ (method_name == other.method_name)
60
66
  end
61
67
 
62
68
  alias_method :==, :eql?
@@ -69,6 +75,7 @@ module Mocha
69
75
 
70
76
  def retain_original_visibility(method_owner)
71
77
  return unless @original_visibility
78
+
72
79
  Module.instance_method(@original_visibility).bind(method_owner).call(method_name)
73
80
  end
74
81
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mocha/error_with_filtered_backtrace'
2
4
 
3
5
  module Mocha
@@ -1,4 +1,5 @@
1
- require 'mocha/ruby_version'
1
+ # frozen_string_literal: true
2
+
2
3
  require 'mocha/integration/test_unit'
3
4
 
4
5
  unless Mocha::Integration::TestUnit.activate
data/lib/mocha/thrower.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mocha
2
4
  class Thrower
3
5
  def initialize(tag, object = nil)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mocha
2
4
  class ThrownObject
3
5
  def initialize(tag, value = nil)
data/lib/mocha/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mocha
2
- VERSION = '2.7.1'.freeze
4
+ VERSION = '3.0.0-rc.1'
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mocha
2
4
  class YieldParameters
3
5
  def initialize
data/lib/mocha.rb CHANGED
@@ -1 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mocha/version'
4
+
5
+ module Mocha
6
+ end
data/mocha.gemspec CHANGED
@@ -2,14 +2,19 @@ lib = File.expand_path('../lib/', __FILE__)
2
2
  $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
3
3
  require 'mocha/version'
4
4
 
5
+ DESCRIPTION =
6
+ 'A library for mocking and stubbing with a unified, simple and readable syntax ' \
7
+ 'for both full & partial mocking. Built-in support for Minitest and Test::Unit. ' \
8
+ 'Supported by many other test frameworks, e.g. RSpec.'.freeze
9
+
5
10
  Gem::Specification.new do |s|
6
11
  s.name = 'mocha'
7
12
  s.version = Mocha::VERSION
8
13
  s.licenses = ['MIT', 'BSD-2-Clause']
9
- s.required_ruby_version = '>= 2.1'
14
+ s.required_ruby_version = '>= 2.2'
10
15
 
11
16
  s.authors = ['James Mead']
12
- s.description = 'Mocking and stubbing library with JMock/SchMock syntax, which allows mocking and stubbing of methods on real (non-mock) classes.'
17
+ s.description = DESCRIPTION
13
18
  s.email = 'mocha-developer@googlegroups.com'
14
19
 
15
20
  s.files = Dir.chdir(File.expand_path('..', __FILE__)) do
@@ -27,8 +32,9 @@ Gem::Specification.new do |s|
27
32
  'documentation_uri' => 'https://mocha.jamesmead.org/',
28
33
  'funding_uri' => 'https://github.com/sponsors/floehopper',
29
34
  'homepage_uri' => s.homepage,
30
- 'source_code_uri' => 'https://github.com/freerange/mocha'
35
+ 'source_code_uri' => 'https://github.com/freerange/mocha',
36
+ 'rubygems_mfa_required' => 'true'
31
37
  }
32
38
 
33
- s.add_runtime_dependency 'ruby2_keywords', '>= 0.0.5'
39
+ s.add_dependency 'ruby2_keywords', '>= 0.0.5'
34
40
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mocha
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.1
4
+ version: 3.0.0.pre.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Mead
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-12-09 00:00:00.000000000 Z
10
+ date: 2025-01-24 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: ruby2_keywords
@@ -24,8 +23,9 @@ dependencies:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
25
  version: 0.0.5
27
- description: Mocking and stubbing library with JMock/SchMock syntax, which allows
28
- mocking and stubbing of methods on real (non-mock) classes.
26
+ description: A library for mocking and stubbing with a unified, simple and readable
27
+ syntax for both full & partial mocking. Built-in support for Minitest and Test::Unit.
28
+ Supported by many other test frameworks, e.g. RSpec.
29
29
  email: mocha-developer@googlegroups.com
30
30
  executables: []
31
31
  extensions: []
@@ -44,19 +44,22 @@ files:
44
44
  - RELEASE.md
45
45
  - Rakefile
46
46
  - gemfiles/Gemfile.minitest.latest
47
+ - gemfiles/Gemfile.rubocop
47
48
  - gemfiles/Gemfile.test-unit.latest
48
49
  - lib/mocha.rb
49
50
  - lib/mocha/any_instance_method.rb
51
+ - lib/mocha/any_instance_receiver.rb
50
52
  - lib/mocha/api.rb
51
53
  - lib/mocha/argument_iterator.rb
52
54
  - lib/mocha/backtrace_filter.rb
53
- - lib/mocha/block_matcher.rb
55
+ - lib/mocha/block_matchers.rb
54
56
  - lib/mocha/cardinality.rb
55
57
  - lib/mocha/central.rb
56
58
  - lib/mocha/change_state_side_effect.rb
57
59
  - lib/mocha/class_methods.rb
58
60
  - lib/mocha/configuration.rb
59
- - lib/mocha/debug.rb
61
+ - lib/mocha/default_name.rb
62
+ - lib/mocha/default_receiver.rb
60
63
  - lib/mocha/deprecation.rb
61
64
  - lib/mocha/detection/minitest.rb
62
65
  - lib/mocha/detection/test_unit.rb
@@ -67,27 +70,28 @@ files:
67
70
  - lib/mocha/expectation_error_factory.rb
68
71
  - lib/mocha/expectation_list.rb
69
72
  - lib/mocha/hooks.rb
73
+ - lib/mocha/impersonating_any_instance_name.rb
74
+ - lib/mocha/impersonating_name.rb
70
75
  - lib/mocha/in_state_ordering_constraint.rb
71
76
  - lib/mocha/inspect.rb
72
77
  - lib/mocha/instance_method.rb
73
78
  - lib/mocha/integration/assertion_counter.rb
74
79
  - lib/mocha/integration/minitest.rb
75
80
  - lib/mocha/integration/minitest/adapter.rb
76
- - lib/mocha/integration/minitest/exception_translation.rb
77
81
  - lib/mocha/integration/monkey_patcher.rb
78
82
  - lib/mocha/integration/test_unit.rb
79
83
  - lib/mocha/integration/test_unit/adapter.rb
80
84
  - lib/mocha/invocation.rb
81
- - lib/mocha/is_a.rb
82
85
  - lib/mocha/logger.rb
83
86
  - lib/mocha/macos_version.rb
84
87
  - lib/mocha/method_matcher.rb
85
88
  - lib/mocha/minitest.rb
86
89
  - lib/mocha/mock.rb
87
90
  - lib/mocha/mockery.rb
88
- - lib/mocha/names.rb
91
+ - lib/mocha/name.rb
89
92
  - lib/mocha/not_initialized_error.rb
90
93
  - lib/mocha/object_methods.rb
94
+ - lib/mocha/object_receiver.rb
91
95
  - lib/mocha/parameter_matchers.rb
92
96
  - lib/mocha/parameter_matchers/all_of.rb
93
97
  - lib/mocha/parameter_matchers/any_of.rb
@@ -114,7 +118,6 @@ files:
114
118
  - lib/mocha/parameter_matchers/yaml_equivalent.rb
115
119
  - lib/mocha/parameters_matcher.rb
116
120
  - lib/mocha/raised_exception.rb
117
- - lib/mocha/receivers.rb
118
121
  - lib/mocha/return_values.rb
119
122
  - lib/mocha/ruby_version.rb
120
123
  - lib/mocha/sequence.rb
@@ -139,7 +142,7 @@ metadata:
139
142
  funding_uri: https://github.com/sponsors/floehopper
140
143
  homepage_uri: https://mocha.jamesmead.org
141
144
  source_code_uri: https://github.com/freerange/mocha
142
- post_install_message:
145
+ rubygems_mfa_required: 'true'
143
146
  rdoc_options: []
144
147
  require_paths:
145
148
  - lib
@@ -147,15 +150,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
150
  requirements:
148
151
  - - ">="
149
152
  - !ruby/object:Gem::Version
150
- version: '2.1'
153
+ version: '2.2'
151
154
  required_rubygems_version: !ruby/object:Gem::Requirement
152
155
  requirements:
153
156
  - - ">="
154
157
  - !ruby/object:Gem::Version
155
158
  version: '0'
156
159
  requirements: []
157
- rubygems_version: 3.5.22
158
- signing_key:
160
+ rubygems_version: 3.6.2
159
161
  specification_version: 4
160
162
  summary: Mocking and stubbing library
161
163
  test_files: []
data/lib/mocha/debug.rb DELETED
@@ -1,9 +0,0 @@
1
- module Mocha
2
- module Debug
3
- OPTIONS = (ENV['MOCHA_OPTIONS'] || '').split(',').freeze
4
-
5
- def self.puts(message)
6
- warn(message) if OPTIONS.include?('debug')
7
- end
8
- end
9
- end
@@ -1,14 +0,0 @@
1
- require 'mocha/expectation_error'
2
-
3
- module Mocha
4
- module Integration
5
- module Minitest
6
- def self.translate(exception)
7
- return exception unless exception.is_a?(::Mocha::ExpectationError)
8
- translated_exception = ::Minitest::Assertion.new(exception.message)
9
- translated_exception.set_backtrace(exception.backtrace)
10
- translated_exception
11
- end
12
- end
13
- end
14
- end
data/lib/mocha/is_a.rb DELETED
@@ -1,7 +0,0 @@
1
- class Object
2
- # :stopdoc:
3
-
4
- alias_method :__is_a__, :is_a?
5
-
6
- # :startdoc:
7
- end
data/lib/mocha/names.rb DELETED
@@ -1,43 +0,0 @@
1
- module Mocha
2
- class ImpersonatingName
3
- def initialize(object)
4
- @object = object
5
- end
6
-
7
- def mocha_inspect
8
- @object.mocha_inspect
9
- end
10
- end
11
-
12
- class ImpersonatingAnyInstanceName
13
- def initialize(klass)
14
- @klass = klass
15
- end
16
-
17
- def mocha_inspect
18
- "#<AnyInstance:#{@klass.mocha_inspect}>"
19
- end
20
- end
21
-
22
- class Name
23
- def initialize(name)
24
- @name = name.to_s
25
- end
26
-
27
- def mocha_inspect
28
- "#<Mock:#{@name}>"
29
- end
30
- end
31
-
32
- class DefaultName
33
- def initialize(mock)
34
- @mock = mock
35
- end
36
-
37
- def mocha_inspect
38
- address = @mock.__id__ * 2
39
- address += 0x100000000 if address < 0
40
- "#<Mock:0x#{format('%<address>x', address: address)}>"
41
- end
42
- end
43
- end
@@ -1,45 +0,0 @@
1
- module Mocha
2
- class ObjectReceiver
3
- def initialize(object)
4
- @object = object
5
- end
6
-
7
- def mocks
8
- object = @object
9
- mocks = []
10
- while object
11
- mocha = object.mocha(false)
12
- mocks << mocha if mocha
13
- object = object.is_a?(Class) ? object.superclass : nil
14
- end
15
- mocks
16
- end
17
- end
18
-
19
- class AnyInstanceReceiver
20
- def initialize(klass)
21
- @klass = klass
22
- end
23
-
24
- def mocks
25
- klass = @klass
26
- mocks = []
27
- while klass
28
- mocha = klass.any_instance.mocha(false)
29
- mocks << mocha if mocha
30
- klass = klass.superclass
31
- end
32
- mocks
33
- end
34
- end
35
-
36
- class DefaultReceiver
37
- def initialize(mock)
38
- @mock = mock
39
- end
40
-
41
- def mocks
42
- [@mock]
43
- end
44
- end
45
- end