mocha 1.2.1 → 2.0.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 (266) hide show
  1. checksums.yaml +5 -5
  2. data/.github/FUNDING.yml +1 -0
  3. data/.rubocop.yml +65 -0
  4. data/.rubocop_todo.yml +27 -0
  5. data/.yardopts +1 -0
  6. data/CONTRIBUTING.md +4 -9
  7. data/Gemfile +29 -0
  8. data/README.md +110 -106
  9. data/RELEASE.md +306 -1
  10. data/Rakefile +52 -45
  11. data/gemfiles/Gemfile.minitest.latest +1 -0
  12. data/gemfiles/Gemfile.test-unit.latest +2 -5
  13. data/lib/mocha/any_instance_method.rb +9 -62
  14. data/lib/mocha/api.rb +84 -68
  15. data/lib/mocha/argument_iterator.rb +4 -8
  16. data/lib/mocha/backtrace_filter.rb +1 -5
  17. data/lib/mocha/block_matcher.rb +31 -0
  18. data/lib/mocha/cardinality.rb +60 -49
  19. data/lib/mocha/central.rb +21 -12
  20. data/lib/mocha/change_state_side_effect.rb +0 -4
  21. data/lib/mocha/class_methods.rb +19 -21
  22. data/lib/mocha/configuration.rb +312 -47
  23. data/lib/mocha/debug.rb +3 -2
  24. data/lib/mocha/deprecation.rb +8 -11
  25. data/lib/mocha/detection/mini_test.rb +0 -2
  26. data/lib/mocha/detection/test_unit.rb +3 -5
  27. data/lib/mocha/error_with_filtered_backtrace.rb +13 -0
  28. data/lib/mocha/exception_raiser.rb +4 -6
  29. data/lib/mocha/expectation.rb +186 -95
  30. data/lib/mocha/expectation_error.rb +1 -1
  31. data/lib/mocha/expectation_error_factory.rb +0 -1
  32. data/lib/mocha/expectation_list.rb +7 -11
  33. data/lib/mocha/hooks.rb +1 -3
  34. data/lib/mocha/in_state_ordering_constraint.rb +0 -4
  35. data/lib/mocha/inspect.rb +30 -38
  36. data/lib/mocha/instance_method.rb +11 -8
  37. data/lib/mocha/integration/mini_test/adapter.rb +2 -4
  38. data/lib/mocha/integration/mini_test/exception_translation.rb +1 -1
  39. data/lib/mocha/integration/mini_test.rb +10 -31
  40. data/lib/mocha/integration/monkey_patcher.rb +5 -7
  41. data/lib/mocha/integration/test_unit/adapter.rb +5 -6
  42. data/lib/mocha/integration/test_unit.rb +10 -26
  43. data/lib/mocha/invocation.rb +73 -0
  44. data/lib/mocha/is_a.rb +0 -2
  45. data/lib/mocha/logger.rb +0 -4
  46. data/lib/mocha/macos_version.rb +5 -0
  47. data/lib/mocha/method_matcher.rb +1 -5
  48. data/lib/mocha/minitest.rb +6 -0
  49. data/lib/mocha/mock.rb +99 -51
  50. data/lib/mocha/mockery.rb +70 -99
  51. data/lib/mocha/names.rb +2 -12
  52. data/lib/mocha/not_initialized_error.rb +7 -0
  53. data/lib/mocha/object_methods.rb +25 -31
  54. data/lib/mocha/parameter_matchers/all_of.rb +2 -8
  55. data/lib/mocha/parameter_matchers/any_of.rb +2 -8
  56. data/lib/mocha/parameter_matchers/any_parameters.rb +3 -9
  57. data/lib/mocha/parameter_matchers/anything.rb +2 -8
  58. data/lib/mocha/parameter_matchers/base.rb +7 -13
  59. data/lib/mocha/parameter_matchers/equals.rb +0 -6
  60. data/lib/mocha/parameter_matchers/{query_string.rb → equivalent_uri.rb} +14 -15
  61. data/lib/mocha/parameter_matchers/has_entries.rb +2 -7
  62. data/lib/mocha/parameter_matchers/has_entry.rb +26 -21
  63. data/lib/mocha/parameter_matchers/has_key.rb +2 -7
  64. data/lib/mocha/parameter_matchers/has_keys.rb +53 -0
  65. data/lib/mocha/parameter_matchers/has_value.rb +2 -7
  66. data/lib/mocha/parameter_matchers/includes.rb +6 -7
  67. data/lib/mocha/parameter_matchers/instance_methods.rb +27 -0
  68. data/lib/mocha/parameter_matchers/instance_of.rb +0 -6
  69. data/lib/mocha/parameter_matchers/is_a.rb +2 -7
  70. data/lib/mocha/parameter_matchers/kind_of.rb +2 -6
  71. data/lib/mocha/parameter_matchers/not.rb +2 -7
  72. data/lib/mocha/parameter_matchers/optionally.rb +4 -10
  73. data/lib/mocha/parameter_matchers/positional_or_keyword_hash.rb +64 -0
  74. data/lib/mocha/parameter_matchers/regexp_matches.rb +0 -6
  75. data/lib/mocha/parameter_matchers/responds_with.rb +3 -8
  76. data/lib/mocha/parameter_matchers/yaml_equivalent.rb +2 -6
  77. data/lib/mocha/parameter_matchers.rb +3 -4
  78. data/lib/mocha/parameters_matcher.rb +8 -11
  79. data/lib/mocha/raised_exception.rb +11 -0
  80. data/lib/mocha/receivers.rb +10 -14
  81. data/lib/mocha/return_values.rb +4 -8
  82. data/lib/mocha/ruby_version.rb +1 -2
  83. data/lib/mocha/sequence.rb +4 -9
  84. data/lib/mocha/single_return_value.rb +2 -5
  85. data/lib/mocha/state_machine.rb +33 -46
  86. data/lib/mocha/stubbed_method.rb +88 -0
  87. data/lib/mocha/stubbing_error.rb +2 -13
  88. data/lib/mocha/test_unit.rb +5 -2
  89. data/lib/mocha/thrower.rb +4 -6
  90. data/lib/mocha/thrown_object.rb +12 -0
  91. data/lib/mocha/version.rb +1 -1
  92. data/lib/mocha/yield_parameters.rb +7 -17
  93. data/mocha.gemspec +14 -65
  94. data/yard-templates/default/layout/html/google_analytics.erb +6 -9
  95. data/yard-templates/default/layout/html/setup.rb +2 -3
  96. metadata +26 -266
  97. data/bin/build-matrix +0 -70
  98. data/gemfiles/Gemfile.minitest.1.3.0 +0 -7
  99. data/gemfiles/Gemfile.minitest.1.4.0 +0 -7
  100. data/gemfiles/Gemfile.minitest.1.4.1 +0 -7
  101. data/gemfiles/Gemfile.minitest.1.4.2 +0 -7
  102. data/gemfiles/Gemfile.minitest.2.0.0 +0 -7
  103. data/gemfiles/Gemfile.minitest.2.0.1 +0 -7
  104. data/gemfiles/Gemfile.minitest.2.11.0 +0 -7
  105. data/gemfiles/Gemfile.minitest.2.11.2 +0 -7
  106. data/gemfiles/Gemfile.minitest.2.3.0 +0 -7
  107. data/gemfiles/Gemfile.test-unit.2.0.0 +0 -7
  108. data/gemfiles/Gemfile.test-unit.2.0.1 +0 -7
  109. data/gemfiles/Gemfile.test-unit.2.0.3 +0 -7
  110. data/init.rb +0 -3
  111. data/lib/mocha/class_method.rb +0 -119
  112. data/lib/mocha/integration/mini_test/nothing.rb +0 -19
  113. data/lib/mocha/integration/mini_test/version_13.rb +0 -51
  114. data/lib/mocha/integration/mini_test/version_140.rb +0 -51
  115. data/lib/mocha/integration/mini_test/version_141.rb +0 -62
  116. data/lib/mocha/integration/mini_test/version_142_to_172.rb +0 -62
  117. data/lib/mocha/integration/mini_test/version_200.rb +0 -63
  118. data/lib/mocha/integration/mini_test/version_201_to_222.rb +0 -63
  119. data/lib/mocha/integration/mini_test/version_2110_to_2111.rb +0 -67
  120. data/lib/mocha/integration/mini_test/version_2112_to_320.rb +0 -70
  121. data/lib/mocha/integration/mini_test/version_230_to_2101.rb +0 -65
  122. data/lib/mocha/integration/test_unit/gem_version_200.rb +0 -59
  123. data/lib/mocha/integration/test_unit/gem_version_201_to_202.rb +0 -59
  124. data/lib/mocha/integration/test_unit/gem_version_203_to_220.rb +0 -59
  125. data/lib/mocha/integration/test_unit/gem_version_230_to_250.rb +0 -65
  126. data/lib/mocha/integration/test_unit/nothing.rb +0 -19
  127. data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +0 -58
  128. data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +0 -60
  129. data/lib/mocha/integration.rb +0 -14
  130. data/lib/mocha/mini_test.rb +0 -3
  131. data/lib/mocha/module_method.rb +0 -16
  132. data/lib/mocha/module_methods.rb +0 -14
  133. data/lib/mocha/multiple_yields.rb +0 -20
  134. data/lib/mocha/no_yields.rb +0 -11
  135. data/lib/mocha/parameter_matchers/object.rb +0 -17
  136. data/lib/mocha/pretty_parameters.rb +0 -28
  137. data/lib/mocha/setup.rb +0 -9
  138. data/lib/mocha/single_yield.rb +0 -18
  139. data/lib/mocha/standalone.rb +0 -4
  140. data/lib/mocha/unexpected_invocation.rb +0 -26
  141. data/lib/mocha_standalone.rb +0 -4
  142. data/test/acceptance/acceptance_test_helper.rb +0 -41
  143. data/test/acceptance/bug_18914_test.rb +0 -43
  144. data/test/acceptance/bug_21465_test.rb +0 -34
  145. data/test/acceptance/bug_21563_test.rb +0 -25
  146. data/test/acceptance/exception_rescue_test.rb +0 -55
  147. data/test/acceptance/expectations_on_multiple_methods_test.rb +0 -55
  148. data/test/acceptance/expected_invocation_count_test.rb +0 -232
  149. data/test/acceptance/failure_messages_test.rb +0 -64
  150. data/test/acceptance/issue_272_test.rb +0 -52
  151. data/test/acceptance/issue_65_test.rb +0 -63
  152. data/test/acceptance/issue_70_test.rb +0 -55
  153. data/test/acceptance/mocha_example_test.rb +0 -98
  154. data/test/acceptance/mocha_test_result_test.rb +0 -84
  155. data/test/acceptance/mock_test.rb +0 -100
  156. data/test/acceptance/mock_with_initializer_block_test.rb +0 -51
  157. data/test/acceptance/mocked_methods_dispatch_test.rb +0 -78
  158. data/test/acceptance/multiple_expectations_failure_message_test.rb +0 -68
  159. data/test/acceptance/optional_parameters_test.rb +0 -70
  160. data/test/acceptance/parameter_matcher_test.rb +0 -337
  161. data/test/acceptance/partial_mocks_test.rb +0 -47
  162. data/test/acceptance/prepend_test.rb +0 -89
  163. data/test/acceptance/raise_exception_test.rb +0 -39
  164. data/test/acceptance/return_value_test.rb +0 -52
  165. data/test/acceptance/sequence_test.rb +0 -192
  166. data/test/acceptance/states_test.rb +0 -70
  167. data/test/acceptance/stub_any_instance_method_defined_on_superclass_test.rb +0 -34
  168. data/test/acceptance/stub_any_instance_method_test.rb +0 -280
  169. data/test/acceptance/stub_class_method_defined_on_active_record_association_proxy_test.rb +0 -106
  170. data/test/acceptance/stub_class_method_defined_on_class_test.rb +0 -78
  171. data/test/acceptance/stub_class_method_defined_on_module_test.rb +0 -75
  172. data/test/acceptance/stub_class_method_defined_on_superclass_test.rb +0 -112
  173. data/test/acceptance/stub_everything_test.rb +0 -56
  174. data/test/acceptance/stub_instance_method_defined_on_active_record_association_proxy_test.rb +0 -93
  175. data/test/acceptance/stub_instance_method_defined_on_class_and_aliased_test.rb +0 -69
  176. data/test/acceptance/stub_instance_method_defined_on_class_test.rb +0 -69
  177. data/test/acceptance/stub_instance_method_defined_on_kernel_module_test.rb +0 -75
  178. data/test/acceptance/stub_instance_method_defined_on_module_test.rb +0 -78
  179. data/test/acceptance/stub_instance_method_defined_on_object_class_test.rb +0 -75
  180. data/test/acceptance/stub_instance_method_defined_on_singleton_class_test.rb +0 -70
  181. data/test/acceptance/stub_instance_method_defined_on_superclass_test.rb +0 -72
  182. data/test/acceptance/stub_method_defined_on_module_and_aliased_test.rb +0 -39
  183. data/test/acceptance/stub_module_method_test.rb +0 -163
  184. data/test/acceptance/stub_test.rb +0 -52
  185. data/test/acceptance/stubba_example_test.rb +0 -102
  186. data/test/acceptance/stubba_test_result_test.rb +0 -66
  187. data/test/acceptance/stubbing_error_backtrace_test.rb +0 -64
  188. data/test/acceptance/stubbing_frozen_object_test.rb +0 -88
  189. data/test/acceptance/stubbing_method_accepting_block_parameter_test.rb +0 -48
  190. data/test/acceptance/stubbing_method_unnecessarily_test.rb +0 -65
  191. data/test/acceptance/stubbing_nil_test.rb +0 -61
  192. data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +0 -143
  193. data/test/acceptance/stubbing_non_existent_class_method_test.rb +0 -157
  194. data/test/acceptance/stubbing_non_existent_instance_method_test.rb +0 -147
  195. data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +0 -130
  196. data/test/acceptance/stubbing_non_public_class_method_test.rb +0 -163
  197. data/test/acceptance/stubbing_non_public_instance_method_test.rb +0 -143
  198. data/test/acceptance/stubbing_on_non_mock_object_test.rb +0 -64
  199. data/test/acceptance/stubbing_same_class_method_on_parent_and_child_classes_test.rb +0 -35
  200. data/test/acceptance/throw_test.rb +0 -45
  201. data/test/acceptance/unexpected_invocation_test.rb +0 -25
  202. data/test/acceptance/unstubbing_test.rb +0 -168
  203. data/test/assertions.rb +0 -8
  204. data/test/deprecation_disabler.rb +0 -15
  205. data/test/execution_point.rb +0 -36
  206. data/test/integration/mini_test_test.rb +0 -8
  207. data/test/integration/shared_tests.rb +0 -174
  208. data/test/integration/test_unit_test.rb +0 -8
  209. data/test/method_definer.rb +0 -24
  210. data/test/mini_test_result.rb +0 -90
  211. data/test/minitest_result.rb +0 -49
  212. data/test/simple_counter.rb +0 -13
  213. data/test/test_helper.rb +0 -50
  214. data/test/test_runner.rb +0 -58
  215. data/test/test_unit_result.rb +0 -20
  216. data/test/unit/any_instance_method_test.rb +0 -134
  217. data/test/unit/array_inspect_test.rb +0 -16
  218. data/test/unit/backtrace_filter_test.rb +0 -19
  219. data/test/unit/cardinality_test.rb +0 -56
  220. data/test/unit/central_test.rb +0 -100
  221. data/test/unit/change_state_side_effect_test.rb +0 -41
  222. data/test/unit/class_method_test.rb +0 -225
  223. data/test/unit/class_methods_test.rb +0 -40
  224. data/test/unit/configuration_test.rb +0 -38
  225. data/test/unit/date_time_inspect_test.rb +0 -21
  226. data/test/unit/exception_raiser_test.rb +0 -42
  227. data/test/unit/expectation_list_test.rb +0 -82
  228. data/test/unit/expectation_test.rb +0 -497
  229. data/test/unit/hash_inspect_test.rb +0 -16
  230. data/test/unit/hooks_test.rb +0 -29
  231. data/test/unit/in_state_ordering_constraint_test.rb +0 -43
  232. data/test/unit/method_matcher_test.rb +0 -28
  233. data/test/unit/mock_test.rb +0 -342
  234. data/test/unit/mockery_test.rb +0 -151
  235. data/test/unit/module_methods_test.rb +0 -19
  236. data/test/unit/multiple_yields_test.rb +0 -18
  237. data/test/unit/no_yields_test.rb +0 -18
  238. data/test/unit/object_inspect_test.rb +0 -39
  239. data/test/unit/object_methods_test.rb +0 -46
  240. data/test/unit/parameter_matchers/all_of_test.rb +0 -26
  241. data/test/unit/parameter_matchers/any_of_test.rb +0 -26
  242. data/test/unit/parameter_matchers/anything_test.rb +0 -21
  243. data/test/unit/parameter_matchers/equals_test.rb +0 -25
  244. data/test/unit/parameter_matchers/has_entries_test.rb +0 -51
  245. data/test/unit/parameter_matchers/has_entry_test.rb +0 -129
  246. data/test/unit/parameter_matchers/has_key_test.rb +0 -55
  247. data/test/unit/parameter_matchers/has_value_test.rb +0 -57
  248. data/test/unit/parameter_matchers/includes_test.rb +0 -102
  249. data/test/unit/parameter_matchers/instance_of_test.rb +0 -25
  250. data/test/unit/parameter_matchers/is_a_test.rb +0 -25
  251. data/test/unit/parameter_matchers/kind_of_test.rb +0 -25
  252. data/test/unit/parameter_matchers/not_test.rb +0 -26
  253. data/test/unit/parameter_matchers/regexp_matches_test.rb +0 -46
  254. data/test/unit/parameter_matchers/responds_with_test.rb +0 -32
  255. data/test/unit/parameter_matchers/stub_matcher.rb +0 -27
  256. data/test/unit/parameter_matchers/yaml_equivalent_test.rb +0 -25
  257. data/test/unit/parameters_matcher_test.rb +0 -121
  258. data/test/unit/receivers_test.rb +0 -66
  259. data/test/unit/return_values_test.rb +0 -63
  260. data/test/unit/sequence_test.rb +0 -104
  261. data/test/unit/single_return_value_test.rb +0 -14
  262. data/test/unit/single_yield_test.rb +0 -18
  263. data/test/unit/state_machine_test.rb +0 -98
  264. data/test/unit/string_inspect_test.rb +0 -11
  265. data/test/unit/thrower_test.rb +0 -20
  266. data/test/unit/yield_parameters_test.rb +0 -93
@@ -1,52 +1,34 @@
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
- # Provides a mechanism to change the state of a {StateMachine} at some point in the future.
8
- class State
9
-
10
- # @private
11
- def initialize(state_machine, state)
12
- @state_machine, @state = state_machine, state
13
- end
14
-
5
+ # Provides the ability to determine whether a {StateMachine} is in a specified state at some point in the future.
6
+ class StatePredicate
15
7
  # @private
16
- def activate
17
- @state_machine.current_state = @state
8
+ def initialize(state_machine, state, description, &active_check)
9
+ @state_machine = state_machine
10
+ @state = state
11
+ @description = description
12
+ @active_check = active_check
18
13
  end
19
14
 
20
15
  # @private
21
16
  def active?
22
- @state_machine.current_state == @state
17
+ @active_check.call(@state_machine.current_state, @state)
23
18
  end
24
19
 
25
20
  # @private
26
21
  def mocha_inspect
27
- "#{@state_machine.name} is #{@state.mocha_inspect}"
22
+ "#{@state_machine.name} #{@description} #{@state.mocha_inspect}"
28
23
  end
29
-
30
24
  end
31
25
 
32
- # Provides the ability to determine whether a {StateMachine} is in a specified state at some point in the future.
33
- class StatePredicate
34
-
35
- # @private
36
- def initialize(state_machine, state)
37
- @state_machine, @state = state_machine, state
38
- end
39
-
40
- # @private
41
- def active?
42
- @state_machine.current_state != @state
43
- end
44
-
26
+ # Provides a mechanism to change the state of a {StateMachine} at some point in the future.
27
+ class State < StatePredicate
45
28
  # @private
46
- def mocha_inspect
47
- "#{@state_machine.name} is not #{@state.mocha_inspect}"
29
+ def activate
30
+ @state_machine.current_state = @state
48
31
  end
49
-
50
32
  end
51
33
 
52
34
  # @private
@@ -77,30 +59,35 @@ module Mocha
77
59
  @current_state = next_state_name
78
60
  end
79
61
 
80
- # Provides a mechanism to change the {StateMachine} into the state specified by +state_name+ at some point in the future.
62
+ # Provides mechanisms to (a) determine whether the {StateMachine} is in a given state; or (b) to change the {StateMachine} into the given state.
63
+ #
64
+ # @param [String] state_name name of expected/desired state.
65
+ # @return [StatePredicate,State] (a) state predicate which, when queried, will indicate whether the {StateMachine} is in the given state; or (b) state which, when activated, will change the {StateMachine} into the given state.
81
66
  #
82
- # Or provides a mechanism to determine whether the {StateMachine} is in the state specified by +state_name+ at some point in the future.
67
+ # @overload def is(expected_state_name)
68
+ # Provides a mechanism to determine whether the {StateMachine} is in the state specified by +expected_state_name+ at some point in the future
69
+ # @param [String] expected_state_name name of expected state.
70
+ # @return [StatePredicate] state predicate which, when queried, will indicate whether the {StateMachine} is in the state specified by +expected_state_name+
83
71
  #
84
- # @param [String] state_name name of new state
85
- # @return [State] state which, when activated, will change the {StateMachine} into the state with the specified +state_name+.
72
+ # @overload def is(desired_state_name)
73
+ # Provides a mechanism to change the {StateMachine} into the state specified by +desired_state_name+ at some point in the future.
74
+ # @param [String] desired_state_name name of desired new state.
75
+ # @return [State] state which, when activated, will change the {StateMachine} into the state with the specified +desired_state_name+.
86
76
  def is(state_name)
87
- State.new(self, state_name)
77
+ State.new(self, state_name, 'is') { |current, given| current == given }
88
78
  end
89
79
 
90
- # Provides a mechanism to determine whether the {StateMachine} is not in the state specified by +state_name+ at some point in the future.
91
- def is_not(state_name)
92
- StatePredicate.new(self, state_name)
80
+ # Provides a mechanism to determine whether the {StateMachine} is *not* in the state specified by +unexpected_state_name+ at some point in the future.
81
+ #
82
+ # @param [String] unexpected_state_name name of unexpected state.
83
+ # @return [StatePredicate] state predicate which, when queried, will indicate whether the {StateMachine} is *not* in the state specified by +unexpected_state_name+.
84
+ def is_not(unexpected_state_name) # rubocop:disable Naming/PredicateName
85
+ StatePredicate.new(self, unexpected_state_name, 'is not') { |current, given| current != given }
93
86
  end
94
87
 
95
88
  # @private
96
89
  def mocha_inspect
97
- if @current_state
98
- "#{@name} is #{@current_state.mocha_inspect}"
99
- else
100
- "#{@name} has no current state"
101
- end
90
+ %(#{@name} #{@current_state ? "is #{@current_state.mocha_inspect}" : 'has no current state'})
102
91
  end
103
-
104
92
  end
105
-
106
93
  end
@@ -0,0 +1,88 @@
1
+ require 'ruby2_keywords'
2
+ require 'mocha/ruby_version'
3
+
4
+ module Mocha
5
+ class StubbedMethod
6
+ PrependedModule = Class.new(Module)
7
+
8
+ attr_reader :stubbee, :method_name
9
+
10
+ def initialize(stubbee, method_name)
11
+ @stubbee = stubbee
12
+ @original_method = nil
13
+ @original_visibility = nil
14
+ @method_name = method_name.to_sym
15
+ end
16
+
17
+ def stub
18
+ hide_original_method
19
+ define_new_method
20
+ end
21
+
22
+ def unstub
23
+ remove_new_method
24
+ mock.unstub(method_name.to_sym)
25
+ return if mock.any_expectations?
26
+ reset_mocha
27
+ end
28
+
29
+ def mock
30
+ mock_owner.mocha
31
+ end
32
+
33
+ def reset_mocha
34
+ mock_owner.reset_mocha
35
+ end
36
+
37
+ def hide_original_method
38
+ return unless original_method_owner.__method_exists__?(method_name)
39
+ store_original_method_visibility
40
+ use_prepended_module_for_stub_method
41
+ end
42
+
43
+ def define_new_method
44
+ self_in_scope = self
45
+ method_name_in_scope = method_name
46
+ stub_method_owner.send(:define_method, method_name) do |*args, &block|
47
+ self_in_scope.mock.handle_method_call(method_name_in_scope, args, block)
48
+ end
49
+ stub_method_owner.send(:ruby2_keywords, method_name)
50
+ retain_original_visibility(stub_method_owner)
51
+ end
52
+
53
+ def remove_new_method
54
+ stub_method_owner.send(:remove_method, method_name)
55
+ end
56
+
57
+ def matches?(other)
58
+ return false unless other.class == self.class
59
+ (stubbee.object_id == other.stubbee.object_id) && (method_name == other.method_name)
60
+ end
61
+
62
+ alias_method :==, :eql?
63
+
64
+ def to_s
65
+ "#{stubbee}.#{method_name}"
66
+ end
67
+
68
+ private
69
+
70
+ def retain_original_visibility(method_owner)
71
+ return unless @original_visibility
72
+ Module.instance_method(@original_visibility).bind(method_owner).call(method_name)
73
+ end
74
+
75
+ def store_original_method_visibility
76
+ @original_visibility = original_method_owner.__method_visibility__(method_name)
77
+ end
78
+
79
+ def use_prepended_module_for_stub_method
80
+ @stub_method_owner = PrependedModule.new
81
+ original_method_owner.__send__ :prepend, @stub_method_owner
82
+ end
83
+
84
+ def stub_method_owner
85
+ @stub_method_owner ||= original_method_owner
86
+ end
87
+ end
88
+ 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,6 @@
1
- require "mocha/integration/test_unit"
1
+ require 'mocha/ruby_version'
2
+ require 'mocha/integration/test_unit'
2
3
 
3
- Mocha::Integration::TestUnit.activate
4
+ unless Mocha::Integration::TestUnit.activate
5
+ raise "Test::Unit must be loaded *before* `require 'mocha/test_unit'`."
6
+ end
data/lib/mocha/thrower.rb CHANGED
@@ -1,15 +1,13 @@
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
- def evaluate
8
+ def evaluate(invocation)
9
+ invocation.threw(@tag, @object)
10
10
  throw @tag, @object
11
11
  end
12
-
13
12
  end
14
-
15
13
  end
@@ -0,0 +1,12 @@
1
+ module Mocha
2
+ class ThrownObject
3
+ def initialize(tag, value = nil)
4
+ @tag = tag
5
+ @value = value
6
+ end
7
+
8
+ def mocha_inspect
9
+ "threw (#{@tag.mocha_inspect}, #{@value.mocha_inspect})"
10
+ end
11
+ end
12
+ end
data/lib/mocha/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mocha
2
- VERSION = "1.2.1"
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -1,31 +1,21 @@
1
- require 'mocha/no_yields'
2
- require 'mocha/single_yield'
3
- require 'mocha/multiple_yields'
4
-
5
1
  module Mocha
6
-
7
2
  class YieldParameters
8
-
9
3
  def initialize
10
4
  @parameter_groups = []
11
5
  end
12
6
 
13
7
  def next_invocation
14
8
  case @parameter_groups.length
15
- when 0 then NoYields.new
16
- when 1 then @parameter_groups.first
17
- else @parameter_groups.shift
9
+ when 0 then []
10
+ when 1 then @parameter_groups.first
11
+ else @parameter_groups.shift
18
12
  end
19
13
  end
20
14
 
21
- def add(*parameters)
22
- @parameter_groups << SingleYield.new(*parameters)
23
- end
24
-
25
- def multiple_add(*parameter_groups)
26
- @parameter_groups << MultipleYields.new(*parameter_groups)
15
+ def add(*parameter_groups)
16
+ @parameter_groups << parameter_groups.map do |pg|
17
+ pg.is_a?(Array) ? pg : [pg]
18
+ end
27
19
  end
28
-
29
20
  end
30
-
31
21
  end
data/mocha.gemspec CHANGED
@@ -1,75 +1,24 @@
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']
9
+ s.required_ruby_version = '>= 2.0'
10
10
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.authors = ["James Mead"]
13
- s.description = "Mocking and stubbing library with JMock/SchMock syntax, which allows mocking and stubbing of methods on real (non-mock) classes."
14
- 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'
15
14
 
16
- s.files = `git ls-files`.split("\n")
17
- s.files.delete(".travis.yml")
18
- s.files.delete(".gitignore")
19
-
20
- s.homepage = "http://gofreerange.com/mocha/docs"
21
- s.require_paths = ["lib"]
22
- s.rubyforge_project = "mocha"
23
- s.summary = "Mocking and stubbing library"
24
- s.has_rdoc = "yard"
25
-
26
- s.add_dependency("metaclass", "~> 0.0.1")
27
- if s.respond_to? :specification_version then
28
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
29
- s.specification_version = 3
30
-
31
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
32
- if RUBY_VERSION >= '1.9.3'
33
- s.add_development_dependency("rake", ">= 0")
34
- else
35
- s.add_development_dependency("rake", "~> 10.0")
36
- end
37
- s.add_development_dependency("introspection", "~> 0.0.1")
38
- if RUBY_VERSION >= '2.2.0'
39
- s.add_development_dependency("minitest")
40
- end
41
- if ENV["MOCHA_GENERATE_DOCS"]
42
- s.add_development_dependency("yard")
43
- s.add_development_dependency("redcarpet")
44
- end
45
- else
46
- if RUBY_VERSION >= '1.9.3'
47
- s.add_development_dependency("rake", ">= 0")
48
- else
49
- s.add_development_dependency("rake", "~> 10.0")
50
- end
51
- s.add_dependency("introspection", "~> 0.0.1")
52
- if RUBY_VERSION >= '2.2.0'
53
- s.add_dependency("minitest")
54
- end
55
- if ENV["MOCHA_GENERATE_DOCS"]
56
- s.add_dependency("yard")
57
- s.add_dependency("redcarpet")
58
- end
59
- end
60
- else
61
- if RUBY_VERSION >= '1.9.3'
62
- s.add_development_dependency("rake", ">= 0")
63
- else
64
- s.add_development_dependency("rake", "~> 10.0")
65
- end
66
- s.add_dependency("introspection", "~> 0.0.1")
67
- if RUBY_VERSION >= '2.2.0'
68
- s.add_dependency("minitest")
69
- end
70
- if ENV["MOCHA_GENERATE_DOCS"]
71
- s.add_dependency("yard")
72
- s.add_dependency("redcarpet")
73
- end
15
+ s.files = Dir.chdir(File.expand_path('..', __FILE__)) do
16
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(docs|test)/}) }
74
17
  end
18
+ s.files.delete('.circleci/config.yml')
19
+ s.files.delete('.gitignore')
20
+
21
+ s.homepage = 'https://mocha.jamesmead.org'
22
+ s.require_paths = ['lib']
23
+ s.summary = 'Mocking and stubbing library'
75
24
  end
@@ -1,11 +1,8 @@
1
- <script src="/javascripts/app.js" type="text/javascript" charset="utf-8"></script>
2
-
1
+ <script async src="https://www.googletagmanager.com/gtag/js?id=<%= ENV['GOOGLE_ANALYTICS_WEB_PROPERTY_ID'] %>"></script>
3
2
  <script>
4
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
5
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
6
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
7
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
3
+ window.dataLayer = window.dataLayer || [];
4
+ function gtag(){dataLayer.push(arguments);}
5
+ gtag('js', new Date());
8
6
 
9
- ga('create', '<%= ENV['GOOGLE_ANALYTICS_WEB_PROPERTY_ID'] %>', 'gofreerange.com');
10
- ga('send', 'pageview');
11
- </script>
7
+ gtag('config', '<%= ENV['GOOGLE_ANALYTICS_WEB_PROPERTY_ID'] %>');
8
+ </script>
@@ -1,6 +1,5 @@
1
1
  def init
2
2
  super
3
- if ENV['GOOGLE_ANALYTICS_WEB_PROPERTY_ID']
4
- sections[:layout] << :google_analytics
5
- end
3
+ return unless ENV['GOOGLE_ANALYTICS_WEB_PROPERTY_ID']
4
+ sections[:layout] << :google_analytics
6
5
  end