mocha 1.10.2 → 1.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (235) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.yardopts +1 -0
  4. data/CONTRIBUTING.md +1 -1
  5. data/README.md +28 -30
  6. data/RELEASE.md +87 -0
  7. data/Rakefile +7 -5
  8. data/lib/mocha/api.rb +2 -3
  9. data/lib/mocha/block_matcher.rb +31 -0
  10. data/lib/mocha/cardinality.rb +30 -27
  11. data/lib/mocha/configuration.rb +2 -2
  12. data/lib/mocha/expectation.rb +71 -30
  13. data/lib/mocha/inspect.rb +6 -4
  14. data/lib/mocha/invocation.rb +9 -5
  15. data/lib/mocha/mock.rb +41 -15
  16. data/lib/mocha/mockery.rb +17 -27
  17. data/lib/mocha/parameter_matchers.rb +1 -0
  18. data/lib/mocha/parameter_matchers/has_entries.rb +2 -3
  19. data/lib/mocha/parameter_matchers/has_entry.rb +24 -16
  20. data/lib/mocha/parameter_matchers/has_key.rb +2 -3
  21. data/lib/mocha/parameter_matchers/has_keys.rb +53 -0
  22. data/lib/mocha/parameter_matchers/has_value.rb +2 -3
  23. data/lib/mocha/parameter_matchers/is_a.rb +2 -3
  24. data/lib/mocha/parameter_matchers/not.rb +2 -3
  25. data/lib/mocha/state_machine.rb +31 -40
  26. data/lib/mocha/stubbed_method.rb +4 -6
  27. data/lib/mocha/version.rb +1 -1
  28. data/lib/mocha/yield_parameters.rb +5 -11
  29. data/mocha.gemspec +13 -7
  30. metadata +8 -210
  31. data/bin/build-matrix +0 -82
  32. data/docs/CNAME +0 -1
  33. data/docs/Mocha.html +0 -254
  34. data/docs/Mocha/API.html +0 -1287
  35. data/docs/Mocha/ClassMethods.html +0 -264
  36. data/docs/Mocha/Configuration.html +0 -1525
  37. data/docs/Mocha/Expectation.html +0 -2654
  38. data/docs/Mocha/ExpectationError.html +0 -152
  39. data/docs/Mocha/ExpectationErrorFactory.html +0 -260
  40. data/docs/Mocha/Hooks.html +0 -370
  41. data/docs/Mocha/Integration.html +0 -125
  42. data/docs/Mocha/Integration/MiniTest.html +0 -123
  43. data/docs/Mocha/Integration/MiniTest/Adapter.html +0 -164
  44. data/docs/Mocha/Integration/TestUnit.html +0 -123
  45. data/docs/Mocha/Integration/TestUnit/Adapter.html +0 -164
  46. data/docs/Mocha/Mock.html +0 -1237
  47. data/docs/Mocha/ObjectMethods.html +0 -765
  48. data/docs/Mocha/ParameterMatchers.html +0 -2961
  49. data/docs/Mocha/ParameterMatchers/AllOf.html +0 -153
  50. data/docs/Mocha/ParameterMatchers/AnyOf.html +0 -153
  51. data/docs/Mocha/ParameterMatchers/AnyParameters.html +0 -153
  52. data/docs/Mocha/ParameterMatchers/Anything.html +0 -153
  53. data/docs/Mocha/ParameterMatchers/Base.html +0 -441
  54. data/docs/Mocha/ParameterMatchers/Equals.html +0 -153
  55. data/docs/Mocha/ParameterMatchers/EquivalentUri.html +0 -153
  56. data/docs/Mocha/ParameterMatchers/HasEntries.html +0 -153
  57. data/docs/Mocha/ParameterMatchers/HasEntry.html +0 -153
  58. data/docs/Mocha/ParameterMatchers/HasKey.html +0 -153
  59. data/docs/Mocha/ParameterMatchers/HasValue.html +0 -153
  60. data/docs/Mocha/ParameterMatchers/Includes.html +0 -153
  61. data/docs/Mocha/ParameterMatchers/InstanceOf.html +0 -153
  62. data/docs/Mocha/ParameterMatchers/IsA.html +0 -153
  63. data/docs/Mocha/ParameterMatchers/KindOf.html +0 -153
  64. data/docs/Mocha/ParameterMatchers/Not.html +0 -153
  65. data/docs/Mocha/ParameterMatchers/Optionally.html +0 -153
  66. data/docs/Mocha/ParameterMatchers/RegexpMatches.html +0 -153
  67. data/docs/Mocha/ParameterMatchers/RespondsWith.html +0 -153
  68. data/docs/Mocha/ParameterMatchers/YamlEquivalent.html +0 -153
  69. data/docs/Mocha/Sequence.html +0 -149
  70. data/docs/Mocha/StateMachine.html +0 -527
  71. data/docs/Mocha/StateMachine/State.html +0 -140
  72. data/docs/Mocha/StateMachine/StatePredicate.html +0 -140
  73. data/docs/Mocha/StubbingError.html +0 -150
  74. data/docs/_index.html +0 -519
  75. data/docs/class_list.html +0 -51
  76. data/docs/css/common.css +0 -1
  77. data/docs/css/full_list.css +0 -58
  78. data/docs/css/style.css +0 -496
  79. data/docs/file.COPYING.html +0 -81
  80. data/docs/file.MIT-LICENSE.html +0 -85
  81. data/docs/file.README.html +0 -448
  82. data/docs/file.RELEASE.html +0 -974
  83. data/docs/file_list.html +0 -71
  84. data/docs/frames.html +0 -17
  85. data/docs/index.html +0 -448
  86. data/docs/js/app.js +0 -303
  87. data/docs/js/full_list.js +0 -216
  88. data/docs/js/jquery.js +0 -4
  89. data/docs/method_list.html +0 -635
  90. data/docs/top-level-namespace.html +0 -118
  91. data/gemfiles/Gemfile.minitest.1.3.0 +0 -7
  92. data/gemfiles/Gemfile.minitest.1.4.0 +0 -7
  93. data/gemfiles/Gemfile.minitest.1.4.1 +0 -7
  94. data/gemfiles/Gemfile.minitest.1.4.2 +0 -7
  95. data/gemfiles/Gemfile.minitest.2.0.0 +0 -7
  96. data/gemfiles/Gemfile.minitest.2.0.1 +0 -7
  97. data/gemfiles/Gemfile.minitest.2.11.0 +0 -7
  98. data/gemfiles/Gemfile.minitest.2.11.2 +0 -7
  99. data/gemfiles/Gemfile.minitest.2.3.0 +0 -7
  100. data/gemfiles/Gemfile.minitest.5.11.3 +0 -7
  101. data/gemfiles/Gemfile.test-unit.2.0.0 +0 -7
  102. data/gemfiles/Gemfile.test-unit.2.0.1 +0 -7
  103. data/gemfiles/Gemfile.test-unit.2.0.3 +0 -7
  104. data/lib/mocha/multiple_yields.rb +0 -15
  105. data/lib/mocha/no_yields.rb +0 -5
  106. data/lib/mocha/pretty_parameters.rb +0 -24
  107. data/lib/mocha/single_yield.rb +0 -13
  108. data/test/acceptance/acceptance_test_helper.rb +0 -41
  109. data/test/acceptance/bug_18914_test.rb +0 -37
  110. data/test/acceptance/bug_21465_test.rb +0 -31
  111. data/test/acceptance/bug_21563_test.rb +0 -22
  112. data/test/acceptance/display_matching_invocations_alongside_expectations_test.rb +0 -69
  113. data/test/acceptance/exception_rescue_test.rb +0 -53
  114. data/test/acceptance/expectations_on_multiple_methods_test.rb +0 -55
  115. data/test/acceptance/expected_invocation_count_test.rb +0 -229
  116. data/test/acceptance/failure_messages_test.rb +0 -61
  117. data/test/acceptance/issue_272_test.rb +0 -50
  118. data/test/acceptance/issue_65_test.rb +0 -64
  119. data/test/acceptance/issue_70_test.rb +0 -53
  120. data/test/acceptance/mocha_example_test.rb +0 -96
  121. data/test/acceptance/mocha_test_result_test.rb +0 -83
  122. data/test/acceptance/mock_built_with_first_argument_type_being_string_test.rb +0 -99
  123. data/test/acceptance/mock_test.rb +0 -139
  124. data/test/acceptance/mocked_methods_dispatch_test.rb +0 -75
  125. data/test/acceptance/multiple_expectations_failure_message_test.rb +0 -66
  126. data/test/acceptance/optional_parameters_test.rb +0 -67
  127. data/test/acceptance/parameter_matcher_test.rb +0 -299
  128. data/test/acceptance/partial_mocks_test.rb +0 -44
  129. data/test/acceptance/prepend_test.rb +0 -86
  130. data/test/acceptance/prevent_use_of_mocha_outside_test_test.rb +0 -76
  131. data/test/acceptance/raise_exception_test.rb +0 -36
  132. data/test/acceptance/return_value_test.rb +0 -49
  133. data/test/acceptance/sequence_test.rb +0 -189
  134. data/test/acceptance/states_test.rb +0 -71
  135. data/test/acceptance/stub_any_instance_method_defined_on_superclass_test.rb +0 -64
  136. data/test/acceptance/stub_any_instance_method_test.rb +0 -301
  137. data/test/acceptance/stub_class_method_defined_on_active_record_association_proxy_test.rb +0 -105
  138. data/test/acceptance/stub_class_method_defined_on_class_test.rb +0 -78
  139. data/test/acceptance/stub_class_method_defined_on_module_test.rb +0 -73
  140. data/test/acceptance/stub_class_method_defined_on_superclass_test.rb +0 -144
  141. data/test/acceptance/stub_everything_test.rb +0 -53
  142. data/test/acceptance/stub_instance_method_defined_on_active_record_association_proxy_test.rb +0 -91
  143. data/test/acceptance/stub_instance_method_defined_on_class_and_aliased_test.rb +0 -67
  144. data/test/acceptance/stub_instance_method_defined_on_class_test.rb +0 -67
  145. data/test/acceptance/stub_instance_method_defined_on_kernel_module_test.rb +0 -136
  146. data/test/acceptance/stub_instance_method_defined_on_module_test.rb +0 -76
  147. data/test/acceptance/stub_instance_method_defined_on_object_class_test.rb +0 -75
  148. data/test/acceptance/stub_instance_method_defined_on_singleton_class_test.rb +0 -67
  149. data/test/acceptance/stub_instance_method_defined_on_superclass_test.rb +0 -70
  150. data/test/acceptance/stub_method_defined_on_module_and_aliased_test.rb +0 -38
  151. data/test/acceptance/stub_module_method_test.rb +0 -200
  152. data/test/acceptance/stub_test.rb +0 -49
  153. data/test/acceptance/stubba_example_test.rb +0 -93
  154. data/test/acceptance/stubba_test_result_test.rb +0 -71
  155. data/test/acceptance/stubbing_error_backtrace_test.rb +0 -63
  156. data/test/acceptance/stubbing_frozen_object_test.rb +0 -88
  157. data/test/acceptance/stubbing_method_accepting_block_parameter_test.rb +0 -52
  158. data/test/acceptance/stubbing_method_unnecessarily_test.rb +0 -63
  159. data/test/acceptance/stubbing_nil_test.rb +0 -60
  160. data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +0 -157
  161. data/test/acceptance/stubbing_non_existent_class_method_test.rb +0 -157
  162. data/test/acceptance/stubbing_non_existent_instance_method_test.rb +0 -145
  163. data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +0 -128
  164. data/test/acceptance/stubbing_non_public_class_method_test.rb +0 -163
  165. data/test/acceptance/stubbing_non_public_instance_method_test.rb +0 -141
  166. data/test/acceptance/stubbing_on_non_mock_object_test.rb +0 -70
  167. data/test/acceptance/stubbing_same_class_method_on_parent_and_child_classes_test.rb +0 -33
  168. data/test/acceptance/throw_test.rb +0 -42
  169. data/test/acceptance/unexpected_invocation_test.rb +0 -23
  170. data/test/acceptance/unstubbing_test.rb +0 -194
  171. data/test/assertions.rb +0 -8
  172. data/test/deprecation_disabler.rb +0 -15
  173. data/test/execution_point.rb +0 -36
  174. data/test/integration/mini_test_test.rb +0 -8
  175. data/test/integration/shared_tests.rb +0 -178
  176. data/test/integration/test_unit_test.rb +0 -8
  177. data/test/method_definer.rb +0 -16
  178. data/test/mini_test_result.rb +0 -96
  179. data/test/minitest_result.rb +0 -48
  180. data/test/simple_counter.rb +0 -11
  181. data/test/test_helper.rb +0 -58
  182. data/test/test_runner.rb +0 -58
  183. data/test/test_unit_result.rb +0 -22
  184. data/test/unit/any_instance_method_test.rb +0 -175
  185. data/test/unit/array_inspect_test.rb +0 -14
  186. data/test/unit/backtrace_filter_test.rb +0 -17
  187. data/test/unit/cardinality_test.rb +0 -72
  188. data/test/unit/central_test.rb +0 -98
  189. data/test/unit/change_state_side_effect_test.rb +0 -37
  190. data/test/unit/class_methods_test.rb +0 -69
  191. data/test/unit/configuration_test.rb +0 -37
  192. data/test/unit/date_time_inspect_test.rb +0 -19
  193. data/test/unit/exception_raiser_test.rb +0 -45
  194. data/test/unit/expectation_list_test.rb +0 -82
  195. data/test/unit/expectation_test.rb +0 -492
  196. data/test/unit/hash_inspect_test.rb +0 -14
  197. data/test/unit/hooks_test.rb +0 -35
  198. data/test/unit/in_state_ordering_constraint_test.rb +0 -39
  199. data/test/unit/instance_method_test.rb +0 -282
  200. data/test/unit/method_matcher_test.rb +0 -26
  201. data/test/unit/mock_test.rb +0 -372
  202. data/test/unit/mockery_test.rb +0 -171
  203. data/test/unit/module_methods_test.rb +0 -16
  204. data/test/unit/multiple_yields_test.rb +0 -16
  205. data/test/unit/no_yields_test.rb +0 -16
  206. data/test/unit/object_inspect_test.rb +0 -60
  207. data/test/unit/object_methods_test.rb +0 -63
  208. data/test/unit/parameter_matchers/all_of_test.rb +0 -24
  209. data/test/unit/parameter_matchers/any_of_test.rb +0 -24
  210. data/test/unit/parameter_matchers/anything_test.rb +0 -19
  211. data/test/unit/parameter_matchers/equals_test.rb +0 -23
  212. data/test/unit/parameter_matchers/equivalent_uri_test.rb +0 -41
  213. data/test/unit/parameter_matchers/has_entries_test.rb +0 -51
  214. data/test/unit/parameter_matchers/has_entry_test.rb +0 -128
  215. data/test/unit/parameter_matchers/has_key_test.rb +0 -54
  216. data/test/unit/parameter_matchers/has_value_test.rb +0 -55
  217. data/test/unit/parameter_matchers/includes_test.rb +0 -106
  218. data/test/unit/parameter_matchers/instance_of_test.rb +0 -23
  219. data/test/unit/parameter_matchers/is_a_test.rb +0 -23
  220. data/test/unit/parameter_matchers/kind_of_test.rb +0 -23
  221. data/test/unit/parameter_matchers/not_test.rb +0 -24
  222. data/test/unit/parameter_matchers/regexp_matches_test.rb +0 -45
  223. data/test/unit/parameter_matchers/responds_with_test.rb +0 -38
  224. data/test/unit/parameter_matchers/stub_matcher.rb +0 -23
  225. data/test/unit/parameter_matchers/yaml_equivalent_test.rb +0 -23
  226. data/test/unit/parameters_matcher_test.rb +0 -119
  227. data/test/unit/receivers_test.rb +0 -96
  228. data/test/unit/return_values_test.rb +0 -66
  229. data/test/unit/sequence_test.rb +0 -100
  230. data/test/unit/single_return_value_test.rb +0 -17
  231. data/test/unit/single_yield_test.rb +0 -16
  232. data/test/unit/state_machine_test.rb +0 -96
  233. data/test/unit/string_inspect_test.rb +0 -9
  234. data/test/unit/thrower_test.rb +0 -23
  235. data/test/unit/yield_parameters_test.rb +0 -91
@@ -1,14 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
- require 'mocha/inspect'
3
-
4
- class HashInspectTest < Mocha::TestCase
5
- def test_should_keep_spacing_between_key_value
6
- hash = { :a => true }
7
- assert_equal '{:a => true}', hash.mocha_inspect
8
- end
9
-
10
- def test_should_use_mocha_inspect_on_each_item
11
- hash = { :a => 'mocha' }
12
- assert_equal %({:a => "mocha"}), hash.mocha_inspect
13
- end
14
- end
@@ -1,35 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
- require 'mocha/hooks'
3
- require 'mocha/mockery'
4
-
5
- class HooksTest < Mocha::TestCase
6
- # rubocop:disable Style/ClassAndModuleChildren
7
- class Mocha::Mockery
8
- class << self
9
- attr_writer :instances
10
- end
11
- end
12
- # rubocop:enable Style/ClassAndModuleChildren
13
-
14
- class FakeMockery
15
- def verify(*args); end
16
-
17
- def teardown
18
- raise 'exception within Mockery#teardown'
19
- end
20
- end
21
-
22
- def test_ensure_mockery_instance_is_reset_even_when_an_exception_is_raised_in_mockery_teardown
23
- fake_test_case = Object.new.extend(Mocha::Hooks)
24
- mockery = FakeMockery.new
25
- Mocha::Mockery.instances = [mockery]
26
-
27
- begin
28
- fake_test_case.mocha_teardown
29
- rescue StandardError
30
- nil
31
- end
32
-
33
- assert_kind_of Mocha::Mockery::Null, Mocha::Mockery.instance
34
- end
35
- end
@@ -1,39 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
-
3
- require 'mocha/in_state_ordering_constraint'
4
-
5
- class InStateOrderingConstraintTest < Mocha::TestCase
6
- include Mocha
7
-
8
- class FakeStatePredicate
9
- attr_writer :active, :description
10
-
11
- def active?
12
- @active
13
- end
14
-
15
- def mocha_inspect
16
- @description
17
- end
18
- end
19
-
20
- def test_should_allow_invocation_when_state_is_active
21
- state_predicate = FakeStatePredicate.new
22
- ordering_constraint = InStateOrderingConstraint.new(state_predicate)
23
-
24
- state_predicate.active = true
25
- assert ordering_constraint.allows_invocation_now?
26
-
27
- state_predicate.active = false
28
- assert !ordering_constraint.allows_invocation_now?
29
- end
30
-
31
- def test_should_describe_itself_in_terms_of_the_state_predicates_description
32
- state_predicate = FakeStatePredicate.new
33
- ordering_constraint = InStateOrderingConstraint.new(state_predicate)
34
-
35
- state_predicate.description = 'the-state-predicate'
36
-
37
- assert_equal 'when the-state-predicate', ordering_constraint.mocha_inspect
38
- end
39
- end
@@ -1,282 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
- require 'method_definer'
3
- require 'mocha/class_methods'
4
- require 'mocha/mock'
5
- require 'mocha/singleton_class'
6
-
7
- require 'mocha/instance_method'
8
-
9
- class InstanceMethodTest < Mocha::TestCase
10
- include MethodDefiner
11
- include Mocha
12
-
13
- def class_with_method(method, result = nil)
14
- Class.new do
15
- extend ClassMethods
16
- singleton_class.extend(ClassMethods)
17
- singleton_class.send(:define_method, method) { result } if method
18
- end
19
- end
20
-
21
- unless RUBY_V2_PLUS
22
- def test_should_hide_original_method
23
- klass = class_with_method(:method_x)
24
- klass.singleton_class.send(:alias_method, :_method, :method)
25
- method = InstanceMethod.new(klass, :method_x)
26
-
27
- method.hide_original_method
28
-
29
- assert_equal false, klass.respond_to?(:method_x)
30
- end
31
- end
32
-
33
- def test_should_not_raise_error_hiding_method_that_isnt_defined
34
- klass = class_with_method(:irrelevant)
35
- method = InstanceMethod.new(klass, :method_x)
36
-
37
- assert_nothing_raised { method.hide_original_method }
38
- end
39
-
40
- def test_should_not_raise_error_hiding_method_in_class_that_implements_method_called_method
41
- klass = class_with_method(:method)
42
- method = InstanceMethod.new(klass, :method)
43
-
44
- assert_nothing_raised { method.hide_original_method }
45
- end
46
-
47
- def test_should_define_a_new_method_which_should_call_mocha_method_missing
48
- klass = class_with_method(:method_x)
49
- mocha = build_mock
50
- define_instance_method(klass, :mocha) { mocha }
51
- mocha.expects(:method_x).with(:param1, :param2).returns(:result)
52
- method = InstanceMethod.new(klass, :method_x)
53
-
54
- method.hide_original_method
55
- method.define_new_method
56
- result = klass.method_x(:param1, :param2)
57
-
58
- assert_equal :result, result
59
- assert mocha.__verified__?
60
- end
61
-
62
- def test_should_include_the_filename_and_line_number_in_exceptions
63
- klass = class_with_method(:method_x)
64
- mocha = build_mock
65
- define_instance_method(klass, :mocha) { mocha }
66
- mocha.stubs(:method_x).raises(Exception)
67
- method = InstanceMethod.new(klass, :method_x)
68
-
69
- method.hide_original_method
70
- method.define_new_method
71
-
72
- expected_filename = 'stubbed_method.rb'
73
- expected_line_number = 61
74
-
75
- exception = assert_raises(Exception) { klass.method_x }
76
- matching_line = exception.backtrace.find do |line|
77
- filename, line_number, _context = line.split(':')
78
- filename.include?(expected_filename) && line_number.to_i == expected_line_number
79
- end
80
-
81
- assert_not_nil matching_line, "Expected to find #{expected_filename}:#{expected_line_number} in the backtrace:\n #{exception.backtrace.join("\n")}"
82
- end
83
-
84
- def test_should_remove_new_method
85
- klass = class_with_method(:method_x)
86
- method = InstanceMethod.new(klass, :method_x)
87
-
88
- method.remove_new_method
89
-
90
- assert_equal false, klass.respond_to?(:method_x)
91
- end
92
-
93
- def test_should_restore_original_method
94
- klass = class_with_method(:method_x, :original_result)
95
- klass.singleton_class.send(:alias_method, :_method, :method)
96
- method = InstanceMethod.new(klass, :method_x)
97
-
98
- method.hide_original_method
99
- method.define_new_method
100
- method.remove_new_method
101
- method.restore_original_method
102
-
103
- assert klass.respond_to?(:method_x)
104
- assert_equal :original_result, klass.method_x
105
- end
106
-
107
- def test_should_restore_original_method_accepting_a_block_parameter
108
- klass = Class.new do
109
- extend ClassMethods
110
- singleton_class.extend(ClassMethods)
111
- def self.method_x(&block)
112
- block.call if block_given?
113
- end
114
- end
115
- klass.singleton_class.send(:alias_method, :_method, :method)
116
- method = InstanceMethod.new(klass, :method_x)
117
-
118
- method.hide_original_method
119
- method.define_new_method
120
- method.remove_new_method
121
- method.restore_original_method
122
-
123
- block_called = false
124
- klass.method_x { block_called = true }
125
- assert block_called
126
- end
127
-
128
- def test_should_not_restore_original_method_if_none_was_defined_in_first_place
129
- klass = class_with_method(:method_x, :new_result)
130
- method = InstanceMethod.new(klass, :method_x)
131
-
132
- method.restore_original_method
133
-
134
- assert_equal :new_result, klass.method_x
135
- end
136
-
137
- def test_should_call_hide_original_method
138
- klass = class_with_method(:method_x)
139
- method = InstanceMethod.new(klass, :method_x)
140
- method.hide_original_method
141
- define_instance_accessor(method, :hide_called)
142
- replace_instance_method(method, :hide_original_method) { self.hide_called = true }
143
-
144
- method.stub
145
-
146
- assert method.hide_called
147
- end
148
-
149
- def test_should_call_define_new_method
150
- klass = class_with_method(:method_x)
151
- method = InstanceMethod.new(klass, :method_x)
152
- define_instance_accessor(method, :define_called)
153
- replace_instance_method(method, :define_new_method) { self.define_called = true }
154
-
155
- method.stub
156
-
157
- assert method.define_called
158
- end
159
-
160
- def test_should_call_remove_new_method
161
- klass = class_with_method(:method_x)
162
- method = InstanceMethod.new(klass, :method_x)
163
- mocha = build_mock
164
- define_instance_method(klass, :mocha) { mocha }
165
- replace_instance_method(method, :reset_mocha) {}
166
- define_instance_accessor(method, :remove_called)
167
- replace_instance_method(method, :remove_new_method) { self.remove_called = true }
168
-
169
- method.unstub
170
-
171
- assert method.remove_called
172
- end
173
-
174
- def test_should_call_restore_original_method
175
- klass = class_with_method(:method_x)
176
- mocha = build_mock
177
- define_instance_method(klass, :mocha) { mocha }
178
- method = InstanceMethod.new(klass, :method_x)
179
- replace_instance_method(method, :reset_mocha) {}
180
- define_instance_accessor(method, :restore_called)
181
- replace_instance_method(method, :restore_original_method) { self.restore_called = true }
182
-
183
- method.unstub
184
-
185
- assert method.restore_called
186
- end
187
-
188
- def test_should_call_mocha_unstub
189
- klass = class_with_method(:method_x)
190
- method = InstanceMethod.new(klass, :method_x)
191
- replace_instance_method(method, :restore_original_method) {}
192
- mocha = Class.new do
193
- class << self
194
- attr_accessor :unstub_method
195
- end
196
- def self.unstub(method)
197
- self.unstub_method = method
198
- end
199
- end
200
- define_instance_method(mocha, :any_expectations?) { true }
201
- replace_instance_method(method, :mock) { mocha }
202
-
203
- method.unstub
204
- assert_equal mocha.unstub_method, :method_x
205
- end
206
-
207
- def test_should_call_stubbee_reset_mocha_if_no_expectations_remaining
208
- klass = class_with_method(:method_x)
209
- method = InstanceMethod.new(klass, :method_x)
210
- replace_instance_method(method, :remove_new_method) {}
211
- replace_instance_method(method, :restore_original_method) {}
212
- mocha = Class.new
213
- define_instance_method(mocha, :unstub) { |method_name| }
214
- define_instance_method(mocha, :any_expectations?) { false }
215
- replace_instance_method(method, :mock) { mocha }
216
- stubbee = Class.new do
217
- attr_accessor :reset_mocha_called
218
- def reset_mocha
219
- self.reset_mocha_called = true
220
- end
221
- end.new
222
- replace_instance_method(method, :stubbee) { stubbee }
223
-
224
- method.unstub
225
-
226
- assert stubbee.reset_mocha_called
227
- end
228
-
229
- def test_should_return_mock_for_stubbee
230
- mocha = Object.new
231
- stubbee = Object.new
232
- define_instance_method(stubbee, :mocha) { mocha }
233
- method = InstanceMethod.new(stubbee, :method_name)
234
- assert_equal mocha, method.mock
235
- end
236
-
237
- def test_should_not_match_if_other_object_has_a_different_class
238
- method = InstanceMethod.new(Object.new, :method)
239
- other_object = Object.new
240
- assert !method.matches?(other_object)
241
- end
242
-
243
- def test_should_not_match_if_other_instance_method_has_different_stubbee
244
- stubbee1 = Object.new
245
- stubbee2 = Object.new
246
- method1 = InstanceMethod.new(stubbee1, :method)
247
- method2 = InstanceMethod.new(stubbee2, :method)
248
- assert !method1.matches?(method2)
249
- end
250
-
251
- def test_should_not_match_if_other_instance_method_has_different_method
252
- stubbee = Object.new
253
- method1 = InstanceMethod.new(stubbee, :method_1)
254
- method2 = InstanceMethod.new(stubbee, :method_2)
255
- assert !method1.matches?(method2)
256
- end
257
-
258
- def test_should_match_if_other_instance_method_has_same_stubbee_and_same_method_so_no_attempt_is_made_to_stub_a_method_twice
259
- stubbee = Object.new
260
- method1 = InstanceMethod.new(stubbee, :method)
261
- method2 = InstanceMethod.new(stubbee, :method)
262
- assert method1.matches?(method2)
263
- end
264
-
265
- def test_should_match_if_other_instance_method_has_same_stubbee_and_same_method_but_stubbee_equal_method_lies_like_active_record_association_proxy
266
- stubbee = Class.new do
267
- extend ClassMethods
268
- def equal?(_other)
269
- false
270
- end
271
- end.new
272
- method1 = InstanceMethod.new(stubbee, :method)
273
- method2 = InstanceMethod.new(stubbee, :method)
274
- assert method1.matches?(method2)
275
- end
276
-
277
- private
278
-
279
- def build_mock
280
- Mock.new(nil)
281
- end
282
- end
@@ -1,26 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
- require 'mocha/method_matcher'
3
-
4
- class MethodMatcherTest < Mocha::TestCase
5
- include Mocha
6
-
7
- def test_should_match_if_actual_method_name_is_same_as_expected_method_name
8
- method_matcher = MethodMatcher.new(:method_name)
9
- assert method_matcher.match?(:method_name)
10
- end
11
-
12
- def test_should_match_if_actual_method_name_is_expected_method_name_as_string
13
- method_matcher = MethodMatcher.new(:method_name)
14
- assert method_matcher.match?('method_name')
15
- end
16
-
17
- def test_should_not_match_if_actual_method_name_is_not_same_as_expected_method_name
18
- method_matcher = MethodMatcher.new(:method_name)
19
- assert !method_matcher.match?(:different_method_name)
20
- end
21
-
22
- def test_should_describe_what_method_is_expected
23
- method_matcher = MethodMatcher.new(:method_name)
24
- assert_equal 'method_name', method_matcher.mocha_inspect
25
- end
26
- end
@@ -1,372 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
- require 'mocha/ruby_version'
3
- require 'mocha/macos_version'
4
- require 'mocha/mock'
5
- require 'mocha/expectation_error_factory'
6
- require 'set'
7
- require 'simple_counter'
8
-
9
- class MockTest < Mocha::TestCase
10
- include Mocha
11
-
12
- def test_should_set_single_expectation
13
- mock = build_mock
14
- mock.expects(:method1).returns(1)
15
- assert_nothing_raised(ExpectationErrorFactory.exception_class) do
16
- assert_equal 1, mock.method1
17
- end
18
- end
19
-
20
- def test_should_build_and_store_expectations
21
- mock = build_mock
22
- expectation = mock.expects(:method1)
23
- assert_not_nil expectation
24
- assert_equal [expectation], mock.__expectations__.to_a
25
- end
26
-
27
- def test_should_not_stub_everything_by_default
28
- mock = build_mock
29
- assert_equal false, mock.everything_stubbed
30
- end
31
-
32
- def test_should_stub_everything
33
- mock = build_mock
34
- mock.stub_everything
35
- assert_equal true, mock.everything_stubbed
36
- end
37
-
38
- def test_should_be_able_to_extend_mock_object_with_module
39
- mock = build_mock
40
- assert_nothing_raised(ExpectationErrorFactory.exception_class) { mock.extend(Module.new) }
41
- end
42
-
43
- def test_should_be_equal
44
- mock = build_mock
45
- assert_equal true, mock.eql?(mock)
46
- end
47
-
48
- PRE_RUBY_V19_EXCLUDED_METHODS = %w[
49
- method_missing
50
- singleton_method_undefined
51
- initialize
52
- ].freeze
53
-
54
- MACOS_EXCLUDED_METHODS =
55
- MACOS && MACOS_VERSION >= MACOS_MOJAVE_VERSION ? [:syscall] : []
56
-
57
- RUBY_V19_AND_LATER_EXCLUDED_METHODS = [
58
- :object_id,
59
- :method_missing,
60
- :singleton_method_undefined,
61
- :initialize,
62
- :String,
63
- :singleton_method_added,
64
- *MACOS_EXCLUDED_METHODS
65
- ].freeze
66
-
67
- OBJECT_METHODS = STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS.reject do |m|
68
- (m =~ /^__.*__$/) ||
69
- (PRE_RUBY_V19 && PRE_RUBY_V19_EXCLUDED_METHODS.include?(m)) ||
70
- (!PRE_RUBY_V19 && RUBY_V19_AND_LATER_EXCLUDED_METHODS.include?(m))
71
- end
72
-
73
- def test_should_be_able_to_mock_standard_object_methods
74
- mock = build_mock
75
- OBJECT_METHODS.each { |method| mock.__expects__(method.to_sym).returns(method) }
76
- OBJECT_METHODS.each { |method| assert_equal method, mock.__send__(method.to_sym) }
77
- assert mock.__verified__?
78
- end
79
-
80
- def test_should_be_able_to_stub_standard_object_methods
81
- mock = build_mock
82
- OBJECT_METHODS.each { |method| mock.__stubs__(method.to_sym).returns(method) }
83
- OBJECT_METHODS.each { |method| assert_equal method, mock.__send__(method.to_sym) }
84
- end
85
-
86
- def test_should_create_and_add_expectations
87
- mock = build_mock
88
- expectation1 = mock.expects(:method1)
89
- expectation2 = mock.expects(:method2)
90
- assert_equal [expectation1, expectation2].to_set, mock.__expectations__.to_set
91
- end
92
-
93
- def test_should_pass_backtrace_into_expectation
94
- mock = build_mock
95
- backtrace = Object.new
96
- expectation = mock.expects(:method1, backtrace)
97
- assert_equal backtrace, expectation.backtrace
98
- end
99
-
100
- def test_should_pass_backtrace_into_stub
101
- mock = build_mock
102
- backtrace = Object.new
103
- stub = mock.stubs(:method1, backtrace)
104
- assert_equal backtrace, stub.backtrace
105
- end
106
-
107
- def test_should_create_and_add_stubs
108
- mock = build_mock
109
- stub1 = mock.stubs(:method1)
110
- stub2 = mock.stubs(:method2)
111
- assert_equal [stub1, stub2].to_set, mock.__expectations__.to_set
112
- end
113
-
114
- def test_should_invoke_expectation_and_return_result
115
- mock = build_mock
116
- mock.expects(:my_method).returns(:result)
117
- result = mock.my_method
118
- assert_equal :result, result
119
- end
120
-
121
- def test_should_not_raise_error_if_stubbing_everything
122
- mock = build_mock
123
- mock.stub_everything
124
- result = nil
125
- assert_nothing_raised(ExpectationErrorFactory.exception_class) do
126
- result = mock.unexpected_method
127
- end
128
- assert_nil result
129
- end
130
-
131
- def test_should_raise_assertion_error_for_unexpected_method_call
132
- mock = build_mock
133
- error = assert_raises(ExpectationErrorFactory.exception_class) do
134
- mock.unexpected_method_called(:my_method, :argument1, :argument2)
135
- end
136
- assert_match(/unexpected invocation/, error.message)
137
- assert_match(/my_method/, error.message)
138
- assert_match(/argument1/, error.message)
139
- assert_match(/argument2/, error.message)
140
- end
141
-
142
- def test_should_not_verify_successfully_because_not_all_expectations_have_been_satisfied
143
- mock = build_mock
144
- mock.expects(:method1)
145
- mock.expects(:method2)
146
- mock.method1
147
- assert !mock.__verified__?
148
- end
149
-
150
- def test_should_increment_assertion_counter_for_every_verified_expectation
151
- mock = build_mock
152
-
153
- mock.expects(:method1)
154
- mock.method1
155
-
156
- mock.expects(:method2)
157
- mock.method2
158
-
159
- assertion_counter = SimpleCounter.new
160
-
161
- mock.__verified__?(assertion_counter)
162
-
163
- assert_equal 2, assertion_counter.count
164
- end
165
-
166
- def test_should_yield_supplied_parameters_to_block
167
- mock = build_mock
168
- parameters_for_yield = [1, 2, 3]
169
- mock.expects(:method1).yields(*parameters_for_yield)
170
- yielded_parameters = nil
171
- mock.method1 { |*parameters| yielded_parameters = parameters }
172
- assert_equal parameters_for_yield, yielded_parameters
173
- end
174
-
175
- def test_should_set_up_multiple_expectations_with_return_values
176
- mock = build_mock
177
- mock.expects(:method1 => :result1, :method2 => :result2)
178
- assert_equal :result1, mock.method1
179
- assert_equal :result2, mock.method2
180
- end
181
-
182
- def test_should_set_up_multiple_stubs_with_return_values
183
- mock = build_mock
184
- mock.stubs(:method1 => :result1, :method2 => :result2)
185
- assert_equal :result1, mock.method1
186
- assert_equal :result2, mock.method2
187
- end
188
-
189
- def test_should_keep_returning_specified_value_for_stubs
190
- mock = build_mock
191
- mock.stubs(:method1).returns(1)
192
- assert_equal 1, mock.method1
193
- assert_equal 1, mock.method1
194
- end
195
-
196
- def test_should_keep_returning_specified_value_for_expects
197
- mock = build_mock
198
- mock.expects(:method1).times(2).returns(1)
199
- assert_equal 1, mock.method1
200
- assert_equal 1, mock.method1
201
- end
202
-
203
- def test_should_match_most_recent_call_to_expects
204
- mock = build_mock
205
- mock.expects(:method1).returns(0)
206
- mock.expects(:method1).returns(1)
207
- assert_equal 1, mock.method1
208
- end
209
-
210
- def test_should_match_most_recent_call_to_stubs
211
- mock = build_mock
212
- mock.stubs(:method1).returns(0)
213
- mock.stubs(:method1).returns(1)
214
- assert_equal 1, mock.method1
215
- end
216
-
217
- def test_should_match_most_recent_call_to_stubs_or_expects
218
- mock = build_mock
219
- mock.stubs(:method1).returns(0)
220
- mock.expects(:method1).returns(1)
221
- assert_equal 1, mock.method1
222
- end
223
-
224
- def test_should_match_most_recent_call_to_expects_or_stubs
225
- mock = build_mock
226
- mock.expects(:method1).returns(0)
227
- mock.stubs(:method1).returns(1)
228
- assert_equal 1, mock.method1
229
- end
230
-
231
- def test_should_respond_to_expected_method
232
- mock = build_mock
233
- mock.expects(:method1)
234
- assert_equal true, mock.respond_to?(:method1)
235
- end
236
-
237
- def test_should_respond_to_expected_method_as_string
238
- mock = build_mock
239
- mock.expects(:method1)
240
- assert_equal true, mock.respond_to?('method1')
241
- end
242
-
243
- def test_should_not_respond_to_unexpected_method
244
- mock = build_mock
245
- assert_equal false, mock.respond_to?(:method1)
246
- end
247
-
248
- def test_should_respond_to_methods_which_the_responder_does_responds_to
249
- instance = Class.new do
250
- define_method(:respond_to?) { |_symbol| true }
251
- end.new
252
- mock = build_mock
253
- mock.responds_like(instance)
254
- assert_equal true, mock.respond_to?(:invoked_method)
255
- end
256
-
257
- def test_should_not_respond_to_methods_which_the_responder_does_not_responds_to
258
- instance = Class.new do
259
- define_method(:respond_to?) { |_symbol| false }
260
- end.new
261
- mock = build_mock
262
- mock.responds_like(instance)
263
- assert_equal false, mock.respond_to?(:invoked_method)
264
- end
265
-
266
- def test_should_respond_to_methods_which_the_responder_instance_does_responds_to
267
- klass = Class.new do
268
- define_method(:respond_to?) { |_symbol| true }
269
- end
270
- mock = build_mock
271
- mock.responds_like_instance_of(klass)
272
- assert_equal true, mock.respond_to?(:invoked_method)
273
- end
274
-
275
- def test_should_not_respond_to_methods_which_the_responder_instance_does_not_responds_to
276
- klass = Class.new do
277
- define_method(:respond_to?) { |_symbol| false }
278
- end
279
- mock = build_mock
280
- mock.responds_like_instance_of(klass)
281
- assert_equal false, mock.respond_to?(:invoked_method)
282
- end
283
-
284
- def test_respond_like_should_return_itself_to_allow_method_chaining
285
- mock = build_mock
286
- assert_same mock.responds_like(Object.new), mock
287
- end
288
-
289
- def test_respond_like_instance_of_should_return_itself_to_allow_method_chaining
290
- mock = build_mock
291
- assert_same mock.responds_like_instance_of(Object), mock
292
- end
293
-
294
- def test_should_not_raise_no_method_error_if_mock_is_not_restricted_to_respond_like_a_responder
295
- mock = build_mock
296
- mock.stubs(:invoked_method)
297
- assert_nothing_raised(NoMethodError) { mock.invoked_method }
298
- end
299
-
300
- def test_should_not_raise_no_method_error_if_responder_does_respond_to_invoked_method
301
- instance = Class.new do
302
- define_method(:respond_to?) { |_symbol| true }
303
- end.new
304
- mock = build_mock
305
- mock.responds_like(instance)
306
- mock.stubs(:invoked_method)
307
- assert_nothing_raised(NoMethodError) { mock.invoked_method }
308
- end
309
-
310
- def test_should_raise_no_method_error_if_responder_does_not_respond_to_invoked_method
311
- instance = Class.new do
312
- define_method(:respond_to?) { |_symbol| false }
313
- define_method(:mocha_inspect) { 'mocha_inspect' }
314
- end.new
315
- mock = build_mock
316
- mock.responds_like(instance)
317
- mock.stubs(:invoked_method)
318
- assert_raises(NoMethodError) { mock.invoked_method }
319
- end
320
-
321
- def test_should_raise_no_method_error_with_message_indicating_that_mock_is_constrained_to_respond_like_responder
322
- instance = Class.new do
323
- define_method(:respond_to?) { |_symbol| false }
324
- define_method(:mocha_inspect) { 'mocha_inspect' }
325
- end.new
326
- mock = build_mock
327
- mock.responds_like(instance)
328
- mock.stubs(:invoked_method)
329
- begin
330
- mock.invoked_method
331
- rescue NoMethodError => e
332
- assert_match(/which responds like mocha_inspect/, e.message)
333
- end
334
- end
335
-
336
- def test_should_handle_respond_to_with_private_methods_param_without_error
337
- mock = build_mock
338
- assert_nothing_raised { mock.respond_to?(:object_id, false) }
339
- end
340
-
341
- def test_should_respond_to_any_method_if_stubbing_everything
342
- mock = build_mock
343
- mock.stub_everything
344
- assert mock.respond_to?(:abc)
345
- assert mock.respond_to?(:xyz)
346
- end
347
-
348
- def test_should_remove_expectations_for_unstubbed_methods
349
- mock = build_mock
350
- mock.expects(:method1)
351
- mock.expects(:method2)
352
- mock.unstub(:method1, :method2)
353
- e = assert_raises(ExpectationErrorFactory.exception_class) { mock.method1 }
354
- assert_match(/unexpected invocation/, e.message)
355
- e = assert_raises(ExpectationErrorFactory.exception_class) { mock.method2 }
356
- assert_match(/unexpected invocation/, e.message)
357
- end
358
-
359
- unless PRE_RUBY_V19
360
- def test_expectation_is_defined_on_mock
361
- mock = build_mock
362
- mock.expects(:method1)
363
- assert defined? mock.method1
364
- end
365
- end
366
-
367
- private
368
-
369
- def build_mock
370
- Mock.new(nil)
371
- end
372
- end