mocha 1.4.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
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