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.
Files changed (230) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +58 -0
  3. data/.rubocop_todo.yml +50 -0
  4. data/README.md +12 -71
  5. data/RELEASE.md +19 -0
  6. data/Rakefile +35 -28
  7. data/bin/build-matrix +17 -18
  8. data/lib/mocha/any_instance_method.rb +19 -25
  9. data/lib/mocha/api.rb +1 -5
  10. data/lib/mocha/argument_iterator.rb +4 -8
  11. data/lib/mocha/backtrace_filter.rb +1 -5
  12. data/lib/mocha/cardinality.rb +20 -27
  13. data/lib/mocha/central.rb +21 -12
  14. data/lib/mocha/change_state_side_effect.rb +0 -4
  15. data/lib/mocha/class_method.rb +31 -37
  16. data/lib/mocha/class_methods.rb +11 -15
  17. data/lib/mocha/configuration.rb +69 -10
  18. data/lib/mocha/debug.rb +3 -2
  19. data/lib/mocha/deprecation.rb +4 -11
  20. data/lib/mocha/detection/mini_test.rb +0 -2
  21. data/lib/mocha/detection/test_unit.rb +4 -4
  22. data/lib/mocha/error_with_filtered_backtrace.rb +13 -0
  23. data/lib/mocha/exception_raiser.rb +2 -5
  24. data/lib/mocha/expectation.rb +15 -18
  25. data/lib/mocha/expectation_error.rb +2 -0
  26. data/lib/mocha/expectation_error_factory.rb +0 -1
  27. data/lib/mocha/expectation_list.rb +2 -6
  28. data/lib/mocha/hooks.rb +1 -3
  29. data/lib/mocha/in_state_ordering_constraint.rb +0 -4
  30. data/lib/mocha/inspect.rb +3 -5
  31. data/lib/mocha/instance_method.rb +0 -2
  32. data/lib/mocha/integration/mini_test/adapter.rb +2 -4
  33. data/lib/mocha/integration/mini_test/exception_translation.rb +1 -1
  34. data/lib/mocha/integration/mini_test/nothing.rb +4 -4
  35. data/lib/mocha/integration/mini_test/version_13.rb +4 -1
  36. data/lib/mocha/integration/mini_test/version_140.rb +4 -1
  37. data/lib/mocha/integration/mini_test/version_141.rb +4 -1
  38. data/lib/mocha/integration/mini_test/version_142_to_172.rb +4 -1
  39. data/lib/mocha/integration/mini_test/version_200.rb +4 -1
  40. data/lib/mocha/integration/mini_test/version_201_to_222.rb +4 -1
  41. data/lib/mocha/integration/mini_test/version_2110_to_2111.rb +4 -1
  42. data/lib/mocha/integration/mini_test/version_2112_to_320.rb +4 -1
  43. data/lib/mocha/integration/mini_test/version_230_to_2101.rb +4 -1
  44. data/lib/mocha/integration/monkey_patcher.rb +5 -7
  45. data/lib/mocha/integration/test_unit/adapter.rb +5 -6
  46. data/lib/mocha/integration/test_unit/gem_version_200.rb +5 -2
  47. data/lib/mocha/integration/test_unit/gem_version_201_to_202.rb +5 -2
  48. data/lib/mocha/integration/test_unit/gem_version_203_to_220.rb +5 -2
  49. data/lib/mocha/integration/test_unit/gem_version_230_to_250.rb +5 -2
  50. data/lib/mocha/integration/test_unit/nothing.rb +4 -4
  51. data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +4 -1
  52. data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +4 -1
  53. data/lib/mocha/integration.rb +3 -4
  54. data/lib/mocha/is_a.rb +0 -2
  55. data/lib/mocha/logger.rb +0 -4
  56. data/lib/mocha/method_matcher.rb +1 -5
  57. data/lib/mocha/minitest.rb +1 -1
  58. data/lib/mocha/mock.rb +25 -30
  59. data/lib/mocha/mockery.rb +62 -43
  60. data/lib/mocha/module_method.rb +0 -10
  61. data/lib/mocha/module_methods.rb +0 -4
  62. data/lib/mocha/multiple_yields.rb +0 -5
  63. data/lib/mocha/names.rb +1 -11
  64. data/lib/mocha/no_yields.rb +1 -7
  65. data/lib/mocha/not_initialized_error.rb +7 -0
  66. data/lib/mocha/object_methods.rb +16 -16
  67. data/lib/mocha/parameter_matchers/all_of.rb +1 -7
  68. data/lib/mocha/parameter_matchers/any_of.rb +1 -7
  69. data/lib/mocha/parameter_matchers/any_parameters.rb +3 -9
  70. data/lib/mocha/parameter_matchers/anything.rb +2 -8
  71. data/lib/mocha/parameter_matchers/base.rb +6 -12
  72. data/lib/mocha/parameter_matchers/equals.rb +0 -6
  73. data/lib/mocha/parameter_matchers/equivalent_uri.rb +6 -6
  74. data/lib/mocha/parameter_matchers/has_entries.rb +2 -6
  75. data/lib/mocha/parameter_matchers/has_entry.rb +8 -11
  76. data/lib/mocha/parameter_matchers/has_key.rb +2 -6
  77. data/lib/mocha/parameter_matchers/has_value.rb +2 -6
  78. data/lib/mocha/parameter_matchers/includes.rb +2 -6
  79. data/lib/mocha/parameter_matchers/instance_of.rb +0 -6
  80. data/lib/mocha/parameter_matchers/is_a.rb +2 -6
  81. data/lib/mocha/parameter_matchers/kind_of.rb +2 -6
  82. data/lib/mocha/parameter_matchers/not.rb +2 -6
  83. data/lib/mocha/parameter_matchers/object.rb +0 -2
  84. data/lib/mocha/parameter_matchers/optionally.rb +4 -10
  85. data/lib/mocha/parameter_matchers/regexp_matches.rb +0 -6
  86. data/lib/mocha/parameter_matchers/responds_with.rb +3 -8
  87. data/lib/mocha/parameter_matchers/yaml_equivalent.rb +2 -6
  88. data/lib/mocha/parameter_matchers.rb +0 -2
  89. data/lib/mocha/parameters_matcher.rb +6 -9
  90. data/lib/mocha/pretty_parameters.rb +0 -4
  91. data/lib/mocha/receivers.rb +10 -14
  92. data/lib/mocha/return_values.rb +3 -7
  93. data/lib/mocha/sequence.rb +4 -9
  94. data/lib/mocha/single_return_value.rb +0 -4
  95. data/lib/mocha/single_yield.rb +0 -5
  96. data/lib/mocha/state_machine.rb +6 -10
  97. data/lib/mocha/stubbing_error.rb +2 -13
  98. data/lib/mocha/test_unit.rb +1 -1
  99. data/lib/mocha/thrower.rb +2 -5
  100. data/lib/mocha/unexpected_invocation.rb +3 -5
  101. data/lib/mocha/version.rb +1 -1
  102. data/lib/mocha/yield_parameters.rb +3 -7
  103. data/mocha.gemspec +34 -58
  104. data/test/acceptance/acceptance_test_helper.rb +0 -6
  105. data/test/acceptance/bug_18914_test.rb +7 -12
  106. data/test/acceptance/bug_21465_test.rb +0 -2
  107. data/test/acceptance/bug_21563_test.rb +0 -2
  108. data/test/acceptance/exception_rescue_test.rb +7 -8
  109. data/test/acceptance/expectations_on_multiple_methods_test.rb +2 -1
  110. data/test/acceptance/expected_invocation_count_test.rb +27 -29
  111. data/test/acceptance/failure_messages_test.rb +3 -5
  112. data/test/acceptance/issue_272_test.rb +0 -1
  113. data/test/acceptance/issue_65_test.rb +15 -13
  114. data/test/acceptance/issue_70_test.rb +0 -1
  115. data/test/acceptance/mocha_example_test.rb +5 -6
  116. data/test/acceptance/mocha_test_result_test.rb +7 -7
  117. data/test/acceptance/mock_test.rb +2 -4
  118. data/test/acceptance/mock_with_initializer_block_test.rb +0 -2
  119. data/test/acceptance/mocked_methods_dispatch_test.rb +0 -2
  120. data/test/acceptance/multiple_expectations_failure_message_test.rb +16 -17
  121. data/test/acceptance/optional_parameters_test.rb +0 -2
  122. data/test/acceptance/parameter_matcher_test.rb +2 -3
  123. data/test/acceptance/partial_mocks_test.rb +4 -6
  124. data/test/acceptance/prepend_test.rb +14 -16
  125. data/test/acceptance/prevent_use_of_mocha_outside_test_test.rb +77 -0
  126. data/test/acceptance/raise_exception_test.rb +2 -4
  127. data/test/acceptance/return_value_test.rb +0 -2
  128. data/test/acceptance/sequence_test.rb +9 -11
  129. data/test/acceptance/states_test.rb +6 -4
  130. data/test/acceptance/stub_any_instance_method_defined_on_superclass_test.rb +33 -2
  131. data/test/acceptance/stub_any_instance_method_test.rb +19 -17
  132. data/test/acceptance/stub_class_method_defined_on_active_record_association_proxy_test.rb +8 -8
  133. data/test/acceptance/stub_class_method_defined_on_class_test.rb +2 -1
  134. data/test/acceptance/stub_class_method_defined_on_module_test.rb +0 -1
  135. data/test/acceptance/stub_class_method_defined_on_superclass_test.rb +34 -1
  136. data/test/acceptance/stub_everything_test.rb +1 -3
  137. data/test/acceptance/stub_instance_method_defined_on_active_record_association_proxy_test.rb +6 -7
  138. data/test/acceptance/stub_instance_method_defined_on_class_and_aliased_test.rb +0 -1
  139. data/test/acceptance/stub_instance_method_defined_on_class_test.rb +0 -1
  140. data/test/acceptance/stub_instance_method_defined_on_kernel_module_test.rb +63 -1
  141. data/test/acceptance/stub_instance_method_defined_on_module_test.rb +0 -1
  142. data/test/acceptance/stub_instance_method_defined_on_object_class_test.rb +2 -1
  143. data/test/acceptance/stub_instance_method_defined_on_singleton_class_test.rb +0 -2
  144. data/test/acceptance/stub_instance_method_defined_on_superclass_test.rb +0 -1
  145. data/test/acceptance/stub_module_method_test.rb +13 -13
  146. data/test/acceptance/stub_test.rb +1 -3
  147. data/test/acceptance/stubba_example_test.rb +6 -14
  148. data/test/acceptance/stubba_test_result_test.rb +5 -8
  149. data/test/acceptance/stubbing_error_backtrace_test.rb +2 -2
  150. data/test/acceptance/stubbing_frozen_object_test.rb +2 -1
  151. data/test/acceptance/stubbing_method_accepting_block_parameter_test.rb +12 -7
  152. data/test/acceptance/stubbing_method_unnecessarily_test.rb +0 -2
  153. data/test/acceptance/stubbing_nil_test.rb +4 -5
  154. data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +1 -3
  155. data/test/acceptance/stubbing_non_existent_class_method_test.rb +3 -3
  156. data/test/acceptance/stubbing_non_existent_instance_method_test.rb +1 -3
  157. data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +0 -2
  158. data/test/acceptance/stubbing_non_public_class_method_test.rb +3 -3
  159. data/test/acceptance/stubbing_non_public_instance_method_test.rb +1 -3
  160. data/test/acceptance/stubbing_on_non_mock_object_test.rb +4 -10
  161. data/test/acceptance/stubbing_same_class_method_on_parent_and_child_classes_test.rb +3 -4
  162. data/test/acceptance/throw_test.rb +0 -2
  163. data/test/acceptance/unexpected_invocation_test.rb +2 -3
  164. data/test/acceptance/unstubbing_test.rb +41 -14
  165. data/test/deprecation_disabler.rb +0 -1
  166. data/test/execution_point.rb +2 -4
  167. data/test/integration/mini_test_test.rb +2 -2
  168. data/test/integration/shared_tests.rb +24 -22
  169. data/test/integration/test_unit_test.rb +2 -2
  170. data/test/method_definer.rb +1 -3
  171. data/test/mini_test_result.rb +17 -11
  172. data/test/minitest_result.rb +0 -1
  173. data/test/simple_counter.rb +0 -2
  174. data/test/test_helper.rb +13 -5
  175. data/test/test_runner.rb +2 -4
  176. data/test/test_unit_result.rb +4 -2
  177. data/test/unit/any_instance_method_test.rb +31 -17
  178. data/test/unit/array_inspect_test.rb +2 -4
  179. data/test/unit/backtrace_filter_test.rb +3 -5
  180. data/test/unit/cardinality_test.rb +0 -2
  181. data/test/unit/central_test.rb +26 -27
  182. data/test/unit/change_state_side_effect_test.rb +0 -4
  183. data/test/unit/class_method_test.rb +59 -34
  184. data/test/unit/class_methods_test.rb +34 -5
  185. data/test/unit/configuration_test.rb +1 -2
  186. data/test/unit/date_time_inspect_test.rb +1 -3
  187. data/test/unit/exception_raiser_test.rb +0 -2
  188. data/test/unit/expectation_list_test.rb +0 -2
  189. data/test/unit/expectation_test.rb +41 -46
  190. data/test/unit/hash_inspect_test.rb +3 -5
  191. data/test/unit/hooks_test.rb +14 -8
  192. data/test/unit/in_state_ordering_constraint_test.rb +0 -4
  193. data/test/unit/method_matcher_test.rb +1 -3
  194. data/test/unit/mock_test.rb +35 -22
  195. data/test/unit/mockery_test.rb +45 -28
  196. data/test/unit/module_methods_test.rb +0 -2
  197. data/test/unit/multiple_yields_test.rb +0 -2
  198. data/test/unit/no_yields_test.rb +0 -2
  199. data/test/unit/object_inspect_test.rb +16 -7
  200. data/test/unit/object_methods_test.rb +22 -6
  201. data/test/unit/parameter_matchers/all_of_test.rb +0 -2
  202. data/test/unit/parameter_matchers/any_of_test.rb +0 -2
  203. data/test/unit/parameter_matchers/anything_test.rb +2 -4
  204. data/test/unit/parameter_matchers/equals_test.rb +1 -3
  205. data/test/unit/parameter_matchers/equivalent_uri_test.rb +0 -1
  206. data/test/unit/parameter_matchers/has_entries_test.rb +2 -2
  207. data/test/unit/parameter_matchers/has_entry_test.rb +13 -14
  208. data/test/unit/parameter_matchers/has_key_test.rb +0 -1
  209. data/test/unit/parameter_matchers/has_value_test.rb +0 -2
  210. data/test/unit/parameter_matchers/includes_test.rb +8 -9
  211. data/test/unit/parameter_matchers/instance_of_test.rb +1 -3
  212. data/test/unit/parameter_matchers/is_a_test.rb +1 -3
  213. data/test/unit/parameter_matchers/kind_of_test.rb +1 -3
  214. data/test/unit/parameter_matchers/not_test.rb +0 -2
  215. data/test/unit/parameter_matchers/regexp_matches_test.rb +1 -2
  216. data/test/unit/parameter_matchers/responds_with_test.rb +9 -3
  217. data/test/unit/parameter_matchers/stub_matcher.rb +0 -4
  218. data/test/unit/parameter_matchers/yaml_equivalent_test.rb +1 -3
  219. data/test/unit/parameters_matcher_test.rb +2 -4
  220. data/test/unit/receivers_test.rb +35 -5
  221. data/test/unit/return_values_test.rb +3 -5
  222. data/test/unit/sequence_test.rb +1 -5
  223. data/test/unit/single_return_value_test.rb +0 -2
  224. data/test/unit/single_yield_test.rb +0 -2
  225. data/test/unit/state_machine_test.rb +1 -3
  226. data/test/unit/string_inspect_test.rb +2 -4
  227. data/test/unit/thrower_test.rb +0 -2
  228. data/test/unit/yield_parameters_test.rb +0 -2
  229. data/yard-templates/default/layout/html/setup.rb +2 -3
  230. metadata +25 -6
@@ -1,14 +1,12 @@
1
1
  require 'mocha/parameter_matchers/equals'
2
2
 
3
3
  module Mocha
4
-
5
4
  module ObjectMethods
6
5
  # @private
7
6
  def to_matcher
8
7
  Mocha::ParameterMatchers::Equals.new(self)
9
8
  end
10
9
  end
11
-
12
10
  end
13
11
 
14
12
  # @private
@@ -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 { |parameter| parameter.to_matcher }
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 (available_parameters.length > 0) && (index < @matchers.length) do
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
- return true
52
+ true
56
53
  end
57
54
 
58
55
  # @private
59
56
  def mocha_inspect
60
- "optionally(#{@matchers.map { |matcher| matcher.mocha_inspect }.join(", ") })"
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, @result = message, result
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?( [parameter.__send__(@message)] )
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
@@ -1,8 +1,6 @@
1
1
  module Mocha
2
-
3
2
  # Used as parameters for {Expectation#with} to restrict the parameter values which will match the expectation. Can be nested.
4
3
  module ParameterMatchers; end
5
-
6
4
  end
7
5
 
8
6
  require 'mocha/parameter_matchers/object'
@@ -2,23 +2,22 @@ require 'mocha/inspect'
2
2
  require 'mocha/parameter_matchers'
3
3
 
4
4
  module Mocha
5
-
6
5
  class ParametersMatcher
7
-
8
6
  def initialize(expected_parameters = [ParameterMatchers::AnyParameters.new], &matching_block)
9
- @expected_parameters, @matching_block = expected_parameters, matching_block
7
+ @expected_parameters = expected_parameters
8
+ @matching_block = matching_block
10
9
  end
11
10
 
12
11
  def match?(actual_parameters = [])
13
12
  if @matching_block
14
- return @matching_block.call(*actual_parameters)
13
+ @matching_block.call(*actual_parameters)
15
14
  else
16
- return parameters_match?(actual_parameters)
15
+ parameters_match?(actual_parameters)
17
16
  end
18
17
  end
19
18
 
20
19
  def parameters_match?(actual_parameters)
21
- matchers.all? { |matcher| matcher.matches?(actual_parameters) } && (actual_parameters.length == 0)
20
+ matchers.all? { |matcher| matcher.matches?(actual_parameters) } && actual_parameters.empty?
22
21
  end
23
22
 
24
23
  def mocha_inspect
@@ -29,9 +28,7 @@ module Mocha
29
28
  end
30
29
 
31
30
  def matchers
32
- @expected_parameters.map { |parameter| parameter.to_matcher }
31
+ @expected_parameters.map(&:to_matcher)
33
32
  end
34
-
35
33
  end
36
-
37
34
  end
@@ -1,9 +1,7 @@
1
1
  require 'mocha/inspect'
2
2
 
3
3
  module Mocha
4
-
5
4
  class PrettyParameters
6
-
7
5
  def initialize(params)
8
6
  @params = params
9
7
  @params_string = params.mocha_inspect
@@ -22,7 +20,5 @@ module Mocha
22
20
  def remove_outer_hash_braces!
23
21
  @params_string = @params_string.gsub(/^\{|\}$/, '') if @params.length == 1
24
22
  end
25
-
26
23
  end
27
-
28
24
  end
@@ -1,41 +1,39 @@
1
1
  module Mocha
2
-
3
2
  class ObjectReceiver
4
-
5
3
  def initialize(object)
6
4
  @object = object
7
5
  end
8
6
 
9
7
  def mocks
10
- object, mocks = @object, []
11
- while object do
12
- mocks << object.mocha
8
+ object = @object
9
+ mocks = []
10
+ while object
11
+ mocha = object.mocha(false)
12
+ mocks << mocha if mocha
13
13
  object = object.is_a?(Class) ? object.superclass : nil
14
14
  end
15
15
  mocks
16
16
  end
17
-
18
17
  end
19
18
 
20
19
  class AnyInstanceReceiver
21
-
22
20
  def initialize(klass)
23
21
  @klass = klass
24
22
  end
25
23
 
26
24
  def mocks
27
- klass, mocks = @klass, []
28
- while klass do
29
- mocks << klass.any_instance.mocha
25
+ klass = @klass
26
+ mocks = []
27
+ while klass
28
+ mocha = klass.any_instance.mocha(false)
29
+ mocks << mocha if mocha
30
30
  klass = klass.superclass
31
31
  end
32
32
  mocks
33
33
  end
34
-
35
34
  end
36
35
 
37
36
  class DefaultReceiver
38
-
39
37
  def initialize(mock)
40
38
  @mock = mock
41
39
  end
@@ -43,7 +41,5 @@ module Mocha
43
41
  def mocks
44
42
  [@mock]
45
43
  end
46
-
47
44
  end
48
-
49
45
  end
@@ -1,9 +1,7 @@
1
1
  require 'mocha/single_return_value'
2
2
 
3
3
  module Mocha
4
-
5
4
  class ReturnValues
6
-
7
5
  def self.build(*values)
8
6
  new(*values.map { |value| SingleReturnValue.new(value) })
9
7
  end
@@ -16,16 +14,14 @@ module Mocha
16
14
 
17
15
  def next
18
16
  case @values.length
19
- when 0 then nil
20
- when 1 then @values.first.evaluate
21
- else @values.shift.evaluate
17
+ when 0 then nil
18
+ when 1 then @values.first.evaluate
19
+ else @values.shift.evaluate
22
20
  end
23
21
  end
24
22
 
25
23
  def +(other)
26
24
  self.class.new(*(@values + other.values))
27
25
  end
28
-
29
26
  end
30
-
31
27
  end
@@ -1,16 +1,14 @@
1
1
  module Mocha
2
-
3
2
  # Used to constrain the order in which expectations can occur.
4
3
  #
5
4
  # @see API#sequence
6
5
  # @see Expectation#in_sequence
7
6
  class Sequence
8
-
9
7
  # @private
10
8
  class InSequenceOrderingConstraint
11
-
12
9
  def initialize(sequence, index)
13
- @sequence, @index = sequence, index
10
+ @sequence = sequence
11
+ @index = index
14
12
  end
15
13
 
16
14
  def allows_invocation_now?
@@ -20,7 +18,6 @@ module Mocha
20
18
  def mocha_inspect
21
19
  "in sequence #{@sequence.mocha_inspect}"
22
20
  end
23
-
24
21
  end
25
22
 
26
23
  # @private
@@ -38,14 +35,12 @@ module Mocha
38
35
 
39
36
  # @private
40
37
  def satisfied_to_index?(index)
41
- @expectations[0...index].all? { |expectation| expectation.satisfied? }
38
+ @expectations[0...index].all?(&:satisfied?)
42
39
  end
43
40
 
44
41
  # @private
45
42
  def mocha_inspect
46
- "#{@name.mocha_inspect}"
43
+ @name.mocha_inspect.to_s
47
44
  end
48
-
49
45
  end
50
-
51
46
  end
@@ -1,9 +1,7 @@
1
1
  require 'mocha/is_a'
2
2
 
3
3
  module Mocha
4
-
5
4
  class SingleReturnValue
6
-
7
5
  def initialize(value)
8
6
  @value = value
9
7
  end
@@ -11,7 +9,5 @@ module Mocha
11
9
  def evaluate
12
10
  @value
13
11
  end
14
-
15
12
  end
16
-
17
13
  end
@@ -1,7 +1,5 @@
1
1
  module Mocha
2
-
3
2
  class SingleYield
4
-
5
3
  attr_reader :parameters
6
4
 
7
5
  def initialize(*parameters)
@@ -11,8 +9,5 @@ module Mocha
11
9
  def each
12
10
  yield(@parameters)
13
11
  end
14
-
15
12
  end
16
-
17
13
  end
18
-
@@ -1,15 +1,13 @@
1
1
  module Mocha
2
-
3
2
  # A state machine that is used to constrain the order of invocations.
4
3
  # An invocation can be constrained to occur when a state {#is}, or {#is_not}, active.
5
4
  class StateMachine
6
-
7
5
  # Provides a mechanism to change the state of a {StateMachine} at some point in the future.
8
6
  class State
9
-
10
7
  # @private
11
8
  def initialize(state_machine, state)
12
- @state_machine, @state = state_machine, state
9
+ @state_machine = state_machine
10
+ @state = state
13
11
  end
14
12
 
15
13
  # @private
@@ -26,15 +24,14 @@ module Mocha
26
24
  def mocha_inspect
27
25
  "#{@state_machine.name} is #{@state.mocha_inspect}"
28
26
  end
29
-
30
27
  end
31
28
 
32
29
  # Provides the ability to determine whether a {StateMachine} is in a specified state at some point in the future.
33
30
  class StatePredicate
34
-
35
31
  # @private
36
32
  def initialize(state_machine, state)
37
- @state_machine, @state = state_machine, state
33
+ @state_machine = state_machine
34
+ @state = state
38
35
  end
39
36
 
40
37
  # @private
@@ -46,7 +43,6 @@ module Mocha
46
43
  def mocha_inspect
47
44
  "#{@state_machine.name} is not #{@state.mocha_inspect}"
48
45
  end
49
-
50
46
  end
51
47
 
52
48
  # @private
@@ -88,9 +84,11 @@ module Mocha
88
84
  end
89
85
 
90
86
  # Provides a mechanism to determine whether the {StateMachine} is not in the state specified by +state_name+ at some point in the future.
87
+ # rubocop:disable Naming/PredicateName
91
88
  def is_not(state_name)
92
89
  StatePredicate.new(self, state_name)
93
90
  end
91
+ # rubocop:enable Naming/PredicateName
94
92
 
95
93
  # @private
96
94
  def mocha_inspect
@@ -100,7 +98,5 @@ module Mocha
100
98
  "#{@name} has no current state"
101
99
  end
102
100
  end
103
-
104
101
  end
105
-
106
102
  end
@@ -1,19 +1,8 @@
1
- require 'mocha/backtrace_filter'
1
+ require 'mocha/error_with_filtered_backtrace'
2
2
 
3
3
  module Mocha
4
-
5
4
  # Exception raised when stubbing a particular method is not allowed.
6
5
  #
7
6
  # @see Configuration.prevent
8
- class StubbingError < StandardError
9
-
10
- # @private
11
- def initialize(message = nil, backtrace = [])
12
- super(message)
13
- filter = BacktraceFilter.new
14
- set_backtrace(filter.filtered(backtrace))
15
- end
16
-
17
- end
18
-
7
+ class StubbingError < ErrorWithFilteredBacktrace; end
19
8
  end
@@ -1,3 +1,3 @@
1
- require "mocha/integration/test_unit"
1
+ require 'mocha/integration/test_unit'
2
2
 
3
3
  Mocha::Integration::TestUnit.activate
data/lib/mocha/thrower.rb CHANGED
@@ -1,15 +1,12 @@
1
1
  module Mocha
2
-
3
2
  class Thrower
4
-
5
3
  def initialize(tag, object = nil)
6
- @tag, @object = tag, object
4
+ @tag = tag
5
+ @object = object
7
6
  end
8
7
 
9
8
  def evaluate
10
9
  throw @tag, @object
11
10
  end
12
-
13
11
  end
14
-
15
12
  end
@@ -1,11 +1,11 @@
1
1
  module Mocha
2
-
3
2
  # Exception raised when an unexpected method is invoked
4
3
  class UnexpectedInvocation
5
-
6
4
  # @private
7
5
  def initialize(mock, symbol, *arguments)
8
- @mock, @symbol, @arguments = mock, symbol, arguments
6
+ @mock = mock
7
+ @symbol = symbol
8
+ @arguments = arguments
9
9
  end
10
10
 
11
11
  # @private
@@ -20,7 +20,5 @@ module Mocha
20
20
  def short_description
21
21
  "unexpected invocation: #{@symbol}(#{@arguments.join(', ')})"
22
22
  end
23
-
24
23
  end
25
-
26
24
  end
data/lib/mocha/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mocha
2
- VERSION = "1.4.0"
2
+ VERSION = '1.7.0'.freeze
3
3
  end
@@ -3,18 +3,16 @@ require 'mocha/single_yield'
3
3
  require 'mocha/multiple_yields'
4
4
 
5
5
  module Mocha
6
-
7
6
  class YieldParameters
8
-
9
7
  def initialize
10
8
  @parameter_groups = []
11
9
  end
12
10
 
13
11
  def next_invocation
14
12
  case @parameter_groups.length
15
- when 0 then NoYields.new
16
- when 1 then @parameter_groups.first
17
- else @parameter_groups.shift
13
+ when 0 then NoYields.new
14
+ when 1 then @parameter_groups.first
15
+ else @parameter_groups.shift
18
16
  end
19
17
  end
20
18
 
@@ -25,7 +23,5 @@ module Mocha
25
23
  def multiple_add(*parameter_groups)
26
24
  @parameter_groups << MultipleYields.new(*parameter_groups)
27
25
  end
28
-
29
26
  end
30
-
31
27
  end
data/mocha.gemspec CHANGED
@@ -1,76 +1,52 @@
1
- # -*- encoding: utf-8 -*-
2
1
  lib = File.expand_path('../lib/', __FILE__)
3
2
  $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
4
- require "mocha/version"
3
+ require 'mocha/version'
5
4
 
6
5
  Gem::Specification.new do |s|
7
- s.name = "mocha"
6
+ s.name = 'mocha'
8
7
  s.version = Mocha::VERSION
9
8
  s.licenses = ['MIT', 'BSD-2-Clause']
10
9
  s.required_ruby_version = '>= 1.8.7'
11
10
 
12
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
13
- s.authors = ["James Mead"]
14
- s.description = "Mocking and stubbing library with JMock/SchMock syntax, which allows mocking and stubbing of methods on real (non-mock) classes."
15
- s.email = "mocha-developer@googlegroups.com"
11
+ 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.'
13
+ s.email = 'mocha-developer@googlegroups.com'
16
14
 
17
15
  s.files = `git ls-files`.split("\n")
18
- s.files.delete(".travis.yml")
19
- s.files.delete(".gitignore")
16
+ s.files.delete('.travis.yml')
17
+ s.files.delete('.gitignore')
20
18
 
21
- s.homepage = "http://gofreerange.com/mocha/docs"
22
- s.require_paths = ["lib"]
23
- s.rubyforge_project = "mocha"
24
- s.summary = "Mocking and stubbing library"
25
- s.has_rdoc = "yard"
19
+ s.homepage = 'http://gofreerange.com/mocha/docs'
20
+ s.require_paths = ['lib']
21
+ s.summary = 'Mocking and stubbing library'
22
+ s.has_rdoc = 'yard'
26
23
 
27
- s.add_dependency("metaclass", "~> 0.0.1")
28
- if s.respond_to? :specification_version then
29
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
30
- s.specification_version = 3
24
+ s.add_dependency('metaclass', '~> 0.0.1')
31
25
 
32
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
33
- if RUBY_VERSION >= '1.9.3'
34
- s.add_development_dependency("rake", ">= 0")
35
- else
36
- s.add_development_dependency("rake", "~> 10.0")
37
- end
38
- s.add_development_dependency("introspection", "~> 0.0.1")
39
- if RUBY_VERSION >= '2.2.0'
40
- s.add_development_dependency("minitest")
41
- end
42
- if ENV["MOCHA_GENERATE_DOCS"]
43
- s.add_development_dependency("yard")
44
- s.add_development_dependency("redcarpet")
45
- end
46
- else
47
- if RUBY_VERSION >= '1.9.3'
48
- s.add_development_dependency("rake", ">= 0")
49
- else
50
- s.add_development_dependency("rake", "~> 10.0")
51
- end
52
- s.add_dependency("introspection", "~> 0.0.1")
53
- if RUBY_VERSION >= '2.2.0'
54
- s.add_dependency("minitest")
55
- end
56
- if ENV["MOCHA_GENERATE_DOCS"]
57
- s.add_dependency("yard")
58
- s.add_dependency("redcarpet")
26
+ unless s.respond_to?(:add_development_dependency)
27
+ class << s
28
+ def add_development_dependency(*args)
29
+ add_dependency(*args)
59
30
  end
60
31
  end
32
+ end
33
+
34
+ if RUBY_VERSION >= '1.9.3'
35
+ s.add_development_dependency('rake')
61
36
  else
62
- if RUBY_VERSION >= '1.9.3'
63
- s.add_development_dependency("rake", ">= 0")
64
- else
65
- s.add_development_dependency("rake", "~> 10.0")
66
- end
67
- s.add_dependency("introspection", "~> 0.0.1")
68
- if RUBY_VERSION >= '2.2.0'
69
- s.add_dependency("minitest")
70
- end
71
- if ENV["MOCHA_GENERATE_DOCS"]
72
- s.add_dependency("yard")
73
- s.add_dependency("redcarpet")
74
- end
37
+ # Rake >= v11 does not support Ruby < v1.9.3 so use
38
+ s.add_development_dependency('rake', '~> 10.0')
39
+ end
40
+ s.add_development_dependency('introspection', '~> 0.0.1')
41
+ if RUBY_VERSION >= '2.2.0'
42
+ # No test libraries in standard library
43
+ s.add_development_dependency('minitest')
44
+ end
45
+ if RUBY_VERSION >= '1.9.2'
46
+ s.add_development_dependency('rubocop')
47
+ end
48
+ if ENV['MOCHA_GENERATE_DOCS']
49
+ s.add_development_dependency('redcarpet')
50
+ s.add_development_dependency('yard')
75
51
  end
76
52
  end