mocha 1.16.1 → 2.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -13
  3. data/.yardopts +1 -2
  4. data/COPYING.md +2 -2
  5. data/Gemfile +7 -4
  6. data/MIT-LICENSE.md +1 -1
  7. data/README.md +23 -24
  8. data/RELEASE.md +294 -0
  9. data/Rakefile +23 -24
  10. data/lib/mocha/api.rb +30 -71
  11. data/lib/mocha/backtrace_filter.rb +2 -2
  12. data/lib/mocha/cardinality.rb +4 -0
  13. data/lib/mocha/configuration.rb +44 -126
  14. data/lib/mocha/debug.rb +2 -5
  15. data/lib/mocha/detection/{mini_test.rb → minitest.rb} +5 -5
  16. data/lib/mocha/detection/test_unit.rb +2 -2
  17. data/lib/mocha/expectation.rb +99 -12
  18. data/lib/mocha/expectation_error_factory.rb +2 -2
  19. data/lib/mocha/expectation_list.rb +8 -6
  20. data/lib/mocha/hooks.rb +10 -4
  21. data/lib/mocha/inspect.rb +15 -4
  22. data/lib/mocha/integration/{mini_test → minitest}/adapter.rb +21 -6
  23. data/lib/mocha/integration/{mini_test → minitest}/exception_translation.rb +2 -2
  24. data/lib/mocha/integration/minitest.rb +28 -0
  25. data/lib/mocha/integration/test_unit/adapter.rb +9 -4
  26. data/lib/mocha/integration/test_unit.rb +10 -31
  27. data/lib/mocha/invocation.rb +2 -15
  28. data/lib/mocha/minitest.rb +3 -6
  29. data/lib/mocha/mock.rb +45 -18
  30. data/lib/mocha/mockery.rb +13 -9
  31. data/lib/mocha/names.rb +1 -1
  32. data/lib/mocha/object_methods.rb +2 -2
  33. data/lib/mocha/parameter_matchers/base.rb +4 -9
  34. data/lib/mocha/parameter_matchers/equivalent_uri.rb +1 -2
  35. data/lib/mocha/parameter_matchers/has_entries.rb +7 -2
  36. data/lib/mocha/parameter_matchers/includes.rb +3 -3
  37. data/lib/mocha/parameter_matchers/instance_methods.rb +10 -2
  38. data/lib/mocha/parameter_matchers/positional_or_keyword_hash.rb +66 -0
  39. data/lib/mocha/parameter_matchers/responds_with.rb +32 -5
  40. data/lib/mocha/parameters_matcher.rb +10 -6
  41. data/lib/mocha/ruby_version.rb +2 -9
  42. data/lib/mocha/stubbed_method.rb +3 -39
  43. data/lib/mocha/test_unit.rb +1 -4
  44. data/lib/mocha/version.rb +1 -1
  45. data/mocha.gemspec +11 -1
  46. metadata +31 -31
  47. data/init.rb +0 -1
  48. data/lib/mocha/integration/mini_test/nothing.rb +0 -19
  49. data/lib/mocha/integration/mini_test/version_13.rb +0 -54
  50. data/lib/mocha/integration/mini_test/version_140.rb +0 -54
  51. data/lib/mocha/integration/mini_test/version_141.rb +0 -65
  52. data/lib/mocha/integration/mini_test/version_142_to_172.rb +0 -65
  53. data/lib/mocha/integration/mini_test/version_200.rb +0 -66
  54. data/lib/mocha/integration/mini_test/version_201_to_222.rb +0 -66
  55. data/lib/mocha/integration/mini_test/version_2110_to_2111.rb +0 -70
  56. data/lib/mocha/integration/mini_test/version_2112_to_320.rb +0 -73
  57. data/lib/mocha/integration/mini_test/version_230_to_2101.rb +0 -68
  58. data/lib/mocha/integration/mini_test.rb +0 -56
  59. data/lib/mocha/integration/test_unit/gem_version_200.rb +0 -62
  60. data/lib/mocha/integration/test_unit/gem_version_201_to_202.rb +0 -62
  61. data/lib/mocha/integration/test_unit/gem_version_203_to_220.rb +0 -62
  62. data/lib/mocha/integration/test_unit/gem_version_230_to_250.rb +0 -68
  63. data/lib/mocha/integration/test_unit/nothing.rb +0 -19
  64. data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +0 -63
  65. data/lib/mocha/integration.rb +0 -11
  66. data/lib/mocha/setup.rb +0 -14
  67. data/yard-templates/default/layout/html/google_analytics.erb +0 -8
  68. data/yard-templates/default/layout/html/setup.rb +0 -5
@@ -1,3 +1,4 @@
1
+ require 'ruby2_keywords'
1
2
  require 'mocha/method_matcher'
2
3
  require 'mocha/parameters_matcher'
3
4
  require 'mocha/expectation_error'
@@ -11,6 +12,7 @@ require 'mocha/change_state_side_effect'
11
12
  require 'mocha/cardinality'
12
13
  require 'mocha/configuration'
13
14
  require 'mocha/block_matcher'
15
+ require 'mocha/backtrace_filter'
14
16
 
15
17
  module Mocha
16
18
  # Methods on expectations returned from {Mock#expects}, {Mock#stubs}, {ObjectMethods#expects} and {ObjectMethods#stubs}.
@@ -187,17 +189,31 @@ module Mocha
187
189
  at_most(1)
188
190
  end
189
191
 
190
- # Modifies expectation so that the expected method must be called with +expected_parameters+.
192
+ # Modifies expectation so that the expected method must be called with +expected_parameters_or_matchers+.
191
193
  #
192
- # May be used with parameter matchers in {ParameterMatchers}.
194
+ # May be used with Ruby literals or variables for exact matching or with parameter matchers for less-specific matching, e.g. {ParameterMatchers#includes}, {ParameterMatchers#has_key}, etc. See {ParameterMatchers} for a list of all available parameter matchers.
193
195
  #
194
- # @param [*Array] expected_parameters parameters expected.
196
+ # Alternatively a block argument can be passed to {#with} to implement custom parameter matching. The block receives the +*actual_parameters+ as its arguments and should return +true+ if they are acceptable or +false+ otherwise. See the example below where a method is expected to be called with a value divisible by 4.
197
+ # The block argument takes precedence over +expected_parameters_or_matchers+. The block may be called multiple times per invocation of the expected method and so it should be idempotent.
198
+ #
199
+ # Note that if {#with} is called multiple times on the same expectation, the last call takes precedence; other calls are ignored.
200
+ #
201
+ # Positional arguments were separated from keyword arguments in Ruby v3 (see {https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0 this article}). In relation to this a new configuration option ({Configuration#strict_keyword_argument_matching=}) is available in Ruby >= 2.7.
202
+ #
203
+ # When {Configuration#strict_keyword_argument_matching=} is set to +false+ (which is currently the default), a positional +Hash+ and a set of keyword arguments passed to {#with} are treated the same for the purposes of parameter matching. However, a deprecation warning will be displayed if a positional +Hash+ matches a set of keyword arguments or vice versa. This is because {Configuration#strict_keyword_argument_matching=} will default to +true+ in the future.
204
+ #
205
+ # When {Configuration#strict_keyword_argument_matching=} is set to +true+, an actual positional +Hash+ will not match an expected set of keyword arguments; and vice versa, an actual set of keyword arguments will not match an expected positional +Hash+, i.e. the parameter matching is stricter.
206
+ #
207
+ # @see ParameterMatchers
208
+ # @see Configuration#strict_keyword_argument_matching=
209
+ #
210
+ # @param [Array<Object,ParameterMatchers::Base>] expected_parameters_or_matchers expected parameter values or parameter matchers.
195
211
  # @yield optional block specifying custom matching.
196
- # @yieldparam [*Array] actual_parameters parameters with which expected method was invoked.
197
- # @yieldreturn [Boolean] +true+ if +actual_parameters+ are acceptable.
212
+ # @yieldparam [Array<Object>] actual_parameters parameters with which expected method was invoked.
213
+ # @yieldreturn [Boolean] +true+ if +actual_parameters+ are acceptable; +false+ otherwise.
198
214
  # @return [Expectation] the same expectation, thereby allowing invocations of other {Expectation} methods to be chained.
199
215
  #
200
- # @example Expected method must be called with expected parameters.
216
+ # @example Expected method must be called with exact parameter values.
201
217
  # object = mock()
202
218
  # object.expects(:expected_method).with(:param1, :param2)
203
219
  # object.expected_method(:param1, :param2)
@@ -208,7 +224,44 @@ module Mocha
208
224
  # object.expected_method(:param3)
209
225
  # # => verify fails
210
226
  #
211
- # @example Expected method must be called with a value divisible by 4.
227
+ # @example Expected method must be called with parameters matching parameter matchers.
228
+ # object = mock()
229
+ # object.expects(:expected_method).with(includes('string2'), anything)
230
+ # object.expected_method(['string1', 'string2'], 'any-old-value')
231
+ # # => verify succeeds
232
+ #
233
+ # object = mock()
234
+ # object.expects(:expected_method).with(includes('string2'), anything)
235
+ # object.expected_method(['string1'], 'any-old-value')
236
+ # # => verify fails
237
+ #
238
+ # @example Loose keyword argument matching (default)
239
+ #
240
+ # class Example
241
+ # def foo(a, bar:); end
242
+ # end
243
+ #
244
+ # example = Example.new
245
+ # example.expects(:foo).with('a', bar: 'b')
246
+ # example.foo('a', { bar: 'b' })
247
+ # # This passes the test, but would result in an ArgumentError in practice
248
+ #
249
+ # @example Strict keyword argument matching
250
+ #
251
+ # Mocha.configure do |c|
252
+ # c.strict_keyword_argument_matching = true
253
+ # end
254
+ #
255
+ # class Example
256
+ # def foo(a, bar:); end
257
+ # end
258
+ #
259
+ # example = Example.new
260
+ # example.expects(:foo).with('a', bar: 'b')
261
+ # example.foo('a', { bar: 'b' })
262
+ # # This now fails as expected
263
+ #
264
+ # @example Using a block argument to expect the method to be called with a value divisible by 4.
212
265
  # object = mock()
213
266
  # object.expects(:expected_method).with() { |value| value % 4 == 0 }
214
267
  # object.expected_method(16)
@@ -218,10 +271,27 @@ module Mocha
218
271
  # object.expects(:expected_method).with() { |value| value % 4 == 0 }
219
272
  # object.expected_method(17)
220
273
  # # => verify fails
221
- def with(*expected_parameters, &matching_block)
222
- @parameters_matcher = ParametersMatcher.new(expected_parameters, &matching_block)
274
+ #
275
+ # @example Extracting a custom matcher into an instance method on the test class.
276
+ # class MyTest < Minitest::Test
277
+ # def test_expected_method_is_called_with_a_value_divisible_by_4
278
+ # object = mock()
279
+ # object.expects(:expected_method).with(&method(:divisible_by_4))
280
+ # object.expected_method(16)
281
+ # # => verify succeeds
282
+ # end
283
+ #
284
+ # private
285
+ #
286
+ # def divisible_by_4(value)
287
+ # value % 4 == 0
288
+ # end
289
+ # end
290
+ def with(*expected_parameters_or_matchers, &matching_block)
291
+ @parameters_matcher = ParametersMatcher.new(expected_parameters_or_matchers, self, &matching_block)
223
292
  self
224
293
  end
294
+ ruby2_keywords(:with)
225
295
 
226
296
  # Modifies expectation so that the expected method must be called with a block.
227
297
  #
@@ -583,14 +653,20 @@ module Mocha
583
653
  @ordering_constraints.all?(&:allows_invocation_now?)
584
654
  end
585
655
 
656
+ # @private
657
+ def ordering_constraints_not_allowing_invocation_now
658
+ @ordering_constraints.reject(&:allows_invocation_now?)
659
+ end
660
+
586
661
  # @private
587
662
  def matches_method?(method_name)
588
663
  @method_matcher.match?(method_name)
589
664
  end
590
665
 
591
666
  # @private
592
- def match?(invocation)
593
- @method_matcher.match?(invocation.method_name) && @parameters_matcher.match?(invocation.arguments) && @block_matcher.match?(invocation.block) && in_correct_order?
667
+ def match?(invocation, ignoring_order: false)
668
+ order_independent_match = @method_matcher.match?(invocation.method_name) && @parameters_matcher.match?(invocation.arguments) && @block_matcher.match?(invocation.block)
669
+ ignoring_order ? order_independent_match : order_independent_match && in_correct_order?
594
670
  end
595
671
 
596
672
  # @private
@@ -598,6 +674,11 @@ module Mocha
598
674
  @cardinality.invocations_allowed?
599
675
  end
600
676
 
677
+ # @private
678
+ def invocations_never_allowed?
679
+ @cardinality.invocations_never_allowed?
680
+ end
681
+
601
682
  # @private
602
683
  def satisfied?
603
684
  @cardinality.satisfied?
@@ -625,7 +706,7 @@ module Mocha
625
706
  def inspect
626
707
  address = __id__ * 2
627
708
  address += 0x100000000 if address < 0
628
- "#<Expectation:0x#{format('%x', address)} #{mocha_inspect} >"
709
+ "#<Expectation:0x#{format('%<address>x', address: address)} #{mocha_inspect} >"
629
710
  end
630
711
 
631
712
  # @private
@@ -644,5 +725,11 @@ module Mocha
644
725
  signature << " #{@block_matcher.mocha_inspect}" if @block_matcher.mocha_inspect
645
726
  signature
646
727
  end
728
+
729
+ # @private
730
+ def definition_location
731
+ filter = BacktraceFilter.new
732
+ filter.filtered(backtrace)[0]
733
+ end
647
734
  end
648
735
  end
@@ -6,9 +6,9 @@ module Mocha
6
6
  #
7
7
  # This class should only be used by authors of test libraries and not by typical "users" of Mocha.
8
8
  #
9
- # For example, it is used by +Mocha::Integration::MiniTest::Adapter+ in order to have Mocha raise a +MiniTest::Assertion+ which can then be sensibly handled by +MiniTest::Unit::TestCase+.
9
+ # For example, it is used by +Mocha::Integration::Minitest::Adapter+ in order to have Mocha raise a +Minitest::Assertion+ which can then be sensibly handled by +Minitest::Unit::TestCase+.
10
10
  #
11
- # @see Mocha::Integration::MiniTest::Adapter
11
+ # @see Mocha::Integration::Minitest::Adapter
12
12
  class ExpectationErrorFactory
13
13
  class << self
14
14
  # @!attribute exception_class
@@ -17,14 +17,18 @@ module Mocha
17
17
  @expectations.any? { |expectation| expectation.matches_method?(method_name) }
18
18
  end
19
19
 
20
- def match(invocation)
21
- matching_expectations(invocation).first
20
+ def match(invocation, ignoring_order: false)
21
+ matching_expectations(invocation, ignoring_order: ignoring_order).first
22
22
  end
23
23
 
24
24
  def match_allowing_invocation(invocation)
25
25
  matching_expectations(invocation).detect(&:invocations_allowed?)
26
26
  end
27
27
 
28
+ def match_never_allowing_invocation(invocation)
29
+ matching_expectations(invocation).detect(&:invocations_never_allowed?)
30
+ end
31
+
28
32
  def verified?(assertion_counter = nil)
29
33
  @expectations.all? { |expectation| expectation.verified?(assertion_counter) }
30
34
  end
@@ -49,10 +53,8 @@ module Mocha
49
53
  self.class.new(to_a + other.to_a)
50
54
  end
51
55
 
52
- private
53
-
54
- def matching_expectations(invocation)
55
- @expectations.select { |e| e.match?(invocation) }
56
+ def matching_expectations(invocation, ignoring_order: false)
57
+ @expectations.select { |e| e.match?(invocation, ignoring_order: ignoring_order) }
56
58
  end
57
59
  end
58
60
  end
data/lib/mocha/hooks.rb CHANGED
@@ -7,12 +7,12 @@ module Mocha
7
7
  #
8
8
  # This module is provided as part of the +Mocha::API+ module and is therefore part of the public API, but should only be used by authors of test libraries and not by typical "users" of Mocha.
9
9
  #
10
- # Integration with Test::Unit and MiniTest are provided as part of Mocha, because they are (or were once) part of the Ruby standard library. Integration with other test libraries is not provided as *part* of Mocha, but is supported by means of the methods in this module.
10
+ # Integration with Test::Unit and Minitest are provided as part of Mocha, because they are (or were once) part of the Ruby standard library. Integration with other test libraries is not provided as *part* of Mocha, but is supported by means of the methods in this module.
11
11
  #
12
12
  # See the code in the +Adapter+ modules for examples of how to use the methods in this module. +Mocha::ExpectationErrorFactory+ may be used if you want +Mocha+ to raise a different type of exception.
13
13
  #
14
14
  # @see Mocha::Integration::TestUnit::Adapter
15
- # @see Mocha::Integration::MiniTest::Adapter
15
+ # @see Mocha::Integration::Minitest::Adapter
16
16
  # @see Mocha::ExpectationErrorFactory
17
17
  # @see Mocha::API
18
18
  module Hooks
@@ -35,8 +35,14 @@ module Mocha
35
35
  # Resets Mocha after a test (only for use by authors of test libraries).
36
36
  #
37
37
  # This method should be called after each individual test has finished (including after any "teardown" code).
38
- def mocha_teardown
39
- Mockery.teardown
38
+ def mocha_teardown(origin = mocha_test_name)
39
+ Mockery.teardown(origin)
40
+ end
41
+
42
+ # Returns a string representing the unit test name, to be included in some Mocha
43
+ # to help track down potential bugs.
44
+ def mocha_test_name
45
+ nil
40
46
  end
41
47
  end
42
48
  end
data/lib/mocha/inspect.rb CHANGED
@@ -6,7 +6,7 @@ module Mocha
6
6
  def mocha_inspect
7
7
  address = __id__ * 2
8
8
  address += 0x100000000 if address < 0
9
- inspect =~ /#</ ? "#<#{self.class}:0x#{Kernel.format('%x', address)}>" : inspect
9
+ inspect =~ /#</ ? "#<#{self.class}:0x#{Kernel.format('%<address>x', address: address)}>" : inspect
10
10
  end
11
11
  end
12
12
 
@@ -18,9 +18,20 @@ module Mocha
18
18
  end
19
19
 
20
20
  module HashMethods
21
- def mocha_inspect(wrapped = true)
22
- unwrapped = collect { |key, value| "#{key.mocha_inspect} => #{value.mocha_inspect}" }.join(', ')
23
- wrapped ? "{#{unwrapped}}" : unwrapped
21
+ def mocha_inspect
22
+ if Hash.ruby2_keywords_hash?(self)
23
+ collect do |key, value|
24
+ case key
25
+ when Symbol
26
+ "#{key}: #{value.mocha_inspect}"
27
+ else
28
+ "#{key.mocha_inspect} => #{value.mocha_inspect}"
29
+ end
30
+ end.join(', ')
31
+ else
32
+ unwrapped = collect { |key, value| "#{key.mocha_inspect} => #{value.mocha_inspect}" }.join(', ')
33
+ "{#{unwrapped}}"
34
+ end
24
35
  end
25
36
  end
26
37
 
@@ -4,26 +4,26 @@ require 'mocha/expectation_error_factory'
4
4
 
5
5
  module Mocha
6
6
  module Integration
7
- module MiniTest
8
- # Integrates Mocha into recent versions of MiniTest.
7
+ module Minitest
8
+ # Integrates Mocha into recent versions of Minitest.
9
9
  #
10
10
  # See the source code for an example of how to integrate Mocha into a test library.
11
11
  module Adapter
12
12
  include Mocha::API
13
13
 
14
14
  # @private
15
- def self.applicable_to?(mini_test_version)
16
- Gem::Requirement.new('>= 3.3.0').satisfied_by?(mini_test_version)
15
+ def self.applicable_to?(minitest_version)
16
+ Gem::Requirement.new('>= 3.3.0').satisfied_by?(minitest_version)
17
17
  end
18
18
 
19
19
  # @private
20
20
  def self.description
21
- 'adapter for MiniTest gem >= v3.3.0'
21
+ 'adapter for Minitest gem >= v3.3.0'
22
22
  end
23
23
 
24
24
  # @private
25
25
  def self.included(_mod)
26
- Mocha::ExpectationErrorFactory.exception_class = ::MiniTest::Assertion
26
+ Mocha::ExpectationErrorFactory.exception_class = ::Minitest::Assertion
27
27
  end
28
28
 
29
29
  # @private
@@ -46,6 +46,21 @@ module Mocha
46
46
  super
47
47
  mocha_teardown
48
48
  end
49
+
50
+ # @private
51
+ def mocha_test_name
52
+ if respond_to?(:name)
53
+ test_name = name
54
+ elsif respond_to?(:__name__) # Older minitest
55
+ test_name = __name__
56
+ end
57
+
58
+ if test_name
59
+ "#{self.class.name}##{test_name}"
60
+ else
61
+ self.class.name
62
+ end
63
+ end
49
64
  end
50
65
  end
51
66
  end
@@ -2,10 +2,10 @@ require 'mocha/expectation_error'
2
2
 
3
3
  module Mocha
4
4
  module Integration
5
- module MiniTest
5
+ module Minitest
6
6
  def self.translate(exception)
7
7
  return exception unless exception.is_a?(::Mocha::ExpectationError)
8
- translated_exception = ::MiniTest::Assertion.new(exception.message)
8
+ translated_exception = ::Minitest::Assertion.new(exception.message)
9
9
  translated_exception.set_backtrace(exception.backtrace)
10
10
  translated_exception
11
11
  end
@@ -0,0 +1,28 @@
1
+ require 'mocha/debug'
2
+ require 'mocha/detection/minitest'
3
+ require 'mocha/integration/minitest/adapter'
4
+
5
+ module Mocha
6
+ module Integration
7
+ module Minitest
8
+ def self.activate
9
+ target = Detection::Minitest.testcase
10
+ return false unless target
11
+
12
+ minitest_version = Gem::Version.new(Detection::Minitest.version)
13
+ Debug.puts "Detected Minitest version: #{minitest_version}"
14
+
15
+ unless Minitest::Adapter.applicable_to?(minitest_version)
16
+ raise 'Versions of minitest earlier than v3.3.0 are not supported.'
17
+ end
18
+
19
+ unless target < Minitest::Adapter
20
+ Debug.puts "Applying #{Minitest::Adapter.description}"
21
+ target.send(:include, Minitest::Adapter)
22
+ end
23
+
24
+ true
25
+ end
26
+ end
27
+ end
28
+ end
@@ -12,7 +12,7 @@ module Mocha
12
12
  include Mocha::API
13
13
 
14
14
  # @private
15
- def self.applicable_to?(test_unit_version, _ruby_version = nil)
15
+ def self.applicable_to?(test_unit_version)
16
16
  Gem::Requirement.new('>= 2.5.1').satisfied_by?(test_unit_version)
17
17
  end
18
18
 
@@ -23,20 +23,25 @@ module Mocha
23
23
 
24
24
  # @private
25
25
  def self.included(mod)
26
- mod.setup :mocha_setup, :before => :prepend
26
+ mod.setup :mocha_setup, before: :prepend
27
27
 
28
28
  mod.exception_handler(:handle_mocha_expectation_error)
29
29
 
30
- mod.cleanup :after => :append do
30
+ mod.cleanup after: :append do
31
31
  assertion_counter = Integration::AssertionCounter.new(self)
32
32
  mocha_verify(assertion_counter)
33
33
  end
34
34
 
35
- mod.teardown :mocha_teardown, :after => :append
35
+ mod.teardown :mocha_teardown, after: :append
36
36
  end
37
37
 
38
38
  private
39
39
 
40
+ # @private
41
+ def mocha_test_name
42
+ name
43
+ end
44
+
40
45
  # @private
41
46
  def handle_mocha_expectation_error(exception)
42
47
  return false unless exception.is_a?(Mocha::ExpectationError)
@@ -1,47 +1,26 @@
1
1
  require 'mocha/debug'
2
-
3
2
  require 'mocha/detection/test_unit'
4
-
5
- require 'mocha/integration/test_unit/nothing'
6
- require 'mocha/integration/test_unit/ruby_version_186_and_above'
7
- require 'mocha/integration/test_unit/gem_version_200'
8
- require 'mocha/integration/test_unit/gem_version_201_to_202'
9
- require 'mocha/integration/test_unit/gem_version_203_to_220'
10
- require 'mocha/integration/test_unit/gem_version_230_to_250'
11
3
  require 'mocha/integration/test_unit/adapter'
12
4
 
13
- require 'mocha/deprecation'
14
-
15
5
  module Mocha
16
6
  module Integration
17
7
  module TestUnit
18
8
  def self.activate
19
- return false unless Detection::TestUnit.testcase
20
- test_unit_version = Gem::Version.new(Detection::TestUnit.version)
21
- ruby_version = Gem::Version.new(RUBY_VERSION.dup)
9
+ target = Detection::TestUnit.testcase
10
+ return false unless target
22
11
 
23
- Debug.puts "Detected Ruby version: #{ruby_version}"
12
+ test_unit_version = Gem::Version.new(Detection::TestUnit.version)
24
13
  Debug.puts "Detected Test::Unit version: #{test_unit_version}"
25
14
 
26
- integration_module = [
27
- TestUnit::Adapter,
28
- TestUnit::GemVersion230To250,
29
- TestUnit::GemVersion203To220,
30
- TestUnit::GemVersion201To202,
31
- TestUnit::GemVersion200,
32
- TestUnit::RubyVersion186AndAbove,
33
- TestUnit::Nothing
34
- ].detect { |m| m.applicable_to?(test_unit_version, ruby_version) }
15
+ unless TestUnit::Adapter.applicable_to?(test_unit_version)
16
+ raise 'Versions of test-unit earlier than v2.5.1 are not supported.'
17
+ end
35
18
 
36
- unless ::Test::Unit::TestCase < integration_module
37
- unless integration_module == TestUnit::Adapter
38
- Deprecation.warning(
39
- 'Versions of test-unit earlier than v2.5.1 will not be supported in future versions of Mocha.'
40
- )
41
- end
42
- Debug.puts "Applying #{integration_module.description}"
43
- ::Test::Unit::TestCase.send(:include, integration_module)
19
+ unless target < TestUnit::Adapter
20
+ Debug.puts "Applying #{TestUnit::Adapter.description}"
21
+ target.send(:include, TestUnit::Adapter)
44
22
  end
23
+
45
24
  true
46
25
  end
47
26
  end
@@ -3,8 +3,6 @@ require 'mocha/raised_exception'
3
3
  require 'mocha/return_values'
4
4
  require 'mocha/thrown_object'
5
5
  require 'mocha/yield_parameters'
6
- require 'mocha/configuration'
7
- require 'mocha/deprecation'
8
6
 
9
7
  module Mocha
10
8
  class Invocation
@@ -22,18 +20,8 @@ module Mocha
22
20
  def call(yield_parameters = YieldParameters.new, return_values = ReturnValues.new)
23
21
  yield_parameters.next_invocation.each do |yield_args|
24
22
  @yields << ParametersMatcher.new(yield_args)
25
- if @block
26
- @block.call(*yield_args)
27
- else
28
- raise LocalJumpError unless Mocha.configuration.reinstate_undocumented_behaviour_from_v1_9?
29
- yield_args_description = ParametersMatcher.new(yield_args).mocha_inspect
30
- Deprecation.warning(
31
- "Stubbed method was instructed to yield #{yield_args_description}, but no block was given by invocation: #{call_description}.",
32
- ' This will raise a LocalJumpError in the future.',
33
- ' Use Expectation#with_block_given to constrain this expectation to match invocations supplying a block.',
34
- ' And, if necessary, add another expectation to match invocations not supplying a block.'
35
- )
36
- end
23
+ raise LocalJumpError unless @block
24
+ @block.call(*yield_args)
37
25
  end
38
26
  return_values.next(self)
39
27
  end
@@ -79,7 +67,6 @@ module Mocha
79
67
  def argument_description
80
68
  signature = arguments.mocha_inspect
81
69
  signature = signature.gsub(/^\[|\]$/, '')
82
- signature = signature.gsub(/^\{|\}$/, '') if arguments.length == 1
83
70
  "(#{signature})"
84
71
  end
85
72
  end
@@ -1,9 +1,6 @@
1
1
  require 'mocha/ruby_version'
2
- require 'mocha/integration/mini_test'
3
- require 'mocha/deprecation'
2
+ require 'mocha/integration/minitest'
4
3
 
5
- unless Mocha::Integration::MiniTest.activate
6
- Mocha::Deprecation.warning(
7
- "MiniTest must be loaded *before* `require 'mocha/minitest'`."
8
- )
4
+ unless Mocha::Integration::Minitest.activate
5
+ raise "Minitest must be loaded *before* `require 'mocha/minitest'`."
9
6
  end