mocha 1.2.1 → 1.16.1

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 (265) hide show
  1. checksums.yaml +5 -5
  2. data/.github/FUNDING.yml +1 -0
  3. data/.rubocop.yml +61 -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 +104 -106
  9. data/RELEASE.md +277 -1
  10. data/Rakefile +46 -44
  11. data/gemfiles/Gemfile.minitest.latest +1 -0
  12. data/gemfiles/Gemfile.test-unit.latest +2 -5
  13. data/init.rb +1 -3
  14. data/lib/mocha/any_instance_method.rb +9 -62
  15. data/lib/mocha/api.rb +144 -68
  16. data/lib/mocha/argument_iterator.rb +4 -8
  17. data/lib/mocha/backtrace_filter.rb +1 -5
  18. data/lib/mocha/block_matcher.rb +31 -0
  19. data/lib/mocha/cardinality.rb +60 -49
  20. data/lib/mocha/central.rb +21 -12
  21. data/lib/mocha/change_state_side_effect.rb +0 -4
  22. data/lib/mocha/class_methods.rb +19 -21
  23. data/lib/mocha/configuration.rb +372 -18
  24. data/lib/mocha/debug.rb +3 -2
  25. data/lib/mocha/deprecation.rb +8 -11
  26. data/lib/mocha/detection/mini_test.rb +0 -2
  27. data/lib/mocha/detection/test_unit.rb +3 -5
  28. data/lib/mocha/error_with_filtered_backtrace.rb +13 -0
  29. data/lib/mocha/exception_raiser.rb +4 -6
  30. data/lib/mocha/expectation.rb +125 -89
  31. data/lib/mocha/expectation_error.rb +1 -1
  32. data/lib/mocha/expectation_error_factory.rb +0 -1
  33. data/lib/mocha/expectation_list.rb +7 -11
  34. data/lib/mocha/hooks.rb +1 -3
  35. data/lib/mocha/in_state_ordering_constraint.rb +0 -4
  36. data/lib/mocha/inspect.rb +30 -38
  37. data/lib/mocha/instance_method.rb +11 -8
  38. data/lib/mocha/integration/mini_test/adapter.rb +2 -4
  39. data/lib/mocha/integration/mini_test/exception_translation.rb +1 -1
  40. data/lib/mocha/integration/mini_test/nothing.rb +4 -4
  41. data/lib/mocha/integration/mini_test/version_13.rb +4 -1
  42. data/lib/mocha/integration/mini_test/version_140.rb +4 -1
  43. data/lib/mocha/integration/mini_test/version_141.rb +4 -1
  44. data/lib/mocha/integration/mini_test/version_142_to_172.rb +4 -1
  45. data/lib/mocha/integration/mini_test/version_200.rb +4 -1
  46. data/lib/mocha/integration/mini_test/version_201_to_222.rb +4 -1
  47. data/lib/mocha/integration/mini_test/version_2110_to_2111.rb +4 -1
  48. data/lib/mocha/integration/mini_test/version_2112_to_320.rb +4 -1
  49. data/lib/mocha/integration/mini_test/version_230_to_2101.rb +4 -1
  50. data/lib/mocha/integration/mini_test.rb +7 -0
  51. data/lib/mocha/integration/monkey_patcher.rb +5 -7
  52. data/lib/mocha/integration/test_unit/adapter.rb +5 -6
  53. data/lib/mocha/integration/test_unit/gem_version_200.rb +5 -2
  54. data/lib/mocha/integration/test_unit/gem_version_201_to_202.rb +5 -2
  55. data/lib/mocha/integration/test_unit/gem_version_203_to_220.rb +5 -2
  56. data/lib/mocha/integration/test_unit/gem_version_230_to_250.rb +5 -2
  57. data/lib/mocha/integration/test_unit/nothing.rb +4 -4
  58. data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +4 -1
  59. data/lib/mocha/integration/test_unit.rb +7 -2
  60. data/lib/mocha/integration.rb +2 -5
  61. data/lib/mocha/invocation.rb +86 -0
  62. data/lib/mocha/is_a.rb +0 -2
  63. data/lib/mocha/logger.rb +0 -4
  64. data/lib/mocha/macos_version.rb +5 -0
  65. data/lib/mocha/method_matcher.rb +1 -5
  66. data/lib/mocha/minitest.rb +9 -0
  67. data/lib/mocha/mock.rb +102 -58
  68. data/lib/mocha/mockery.rb +70 -99
  69. data/lib/mocha/names.rb +2 -12
  70. data/lib/mocha/not_initialized_error.rb +7 -0
  71. data/lib/mocha/object_methods.rb +25 -31
  72. data/lib/mocha/parameter_matchers/all_of.rb +2 -8
  73. data/lib/mocha/parameter_matchers/any_of.rb +2 -8
  74. data/lib/mocha/parameter_matchers/any_parameters.rb +3 -9
  75. data/lib/mocha/parameter_matchers/anything.rb +2 -8
  76. data/lib/mocha/parameter_matchers/base.rb +6 -12
  77. data/lib/mocha/parameter_matchers/equals.rb +0 -6
  78. data/lib/mocha/parameter_matchers/{query_string.rb → equivalent_uri.rb} +15 -15
  79. data/lib/mocha/parameter_matchers/has_entries.rb +2 -7
  80. data/lib/mocha/parameter_matchers/has_entry.rb +26 -21
  81. data/lib/mocha/parameter_matchers/has_key.rb +2 -7
  82. data/lib/mocha/parameter_matchers/has_keys.rb +53 -0
  83. data/lib/mocha/parameter_matchers/has_value.rb +2 -7
  84. data/lib/mocha/parameter_matchers/includes.rb +6 -7
  85. data/lib/mocha/parameter_matchers/instance_methods.rb +18 -0
  86. data/lib/mocha/parameter_matchers/instance_of.rb +0 -6
  87. data/lib/mocha/parameter_matchers/is_a.rb +2 -7
  88. data/lib/mocha/parameter_matchers/kind_of.rb +2 -6
  89. data/lib/mocha/parameter_matchers/not.rb +2 -7
  90. data/lib/mocha/parameter_matchers/optionally.rb +4 -10
  91. data/lib/mocha/parameter_matchers/regexp_matches.rb +0 -6
  92. data/lib/mocha/parameter_matchers/responds_with.rb +3 -8
  93. data/lib/mocha/parameter_matchers/yaml_equivalent.rb +2 -6
  94. data/lib/mocha/parameter_matchers.rb +3 -4
  95. data/lib/mocha/parameters_matcher.rb +6 -9
  96. data/lib/mocha/raised_exception.rb +11 -0
  97. data/lib/mocha/receivers.rb +10 -14
  98. data/lib/mocha/return_values.rb +4 -8
  99. data/lib/mocha/ruby_version.rb +8 -1
  100. data/lib/mocha/sequence.rb +4 -9
  101. data/lib/mocha/setup.rb +5 -0
  102. data/lib/mocha/single_return_value.rb +2 -5
  103. data/lib/mocha/state_machine.rb +33 -46
  104. data/lib/mocha/stubbed_method.rb +124 -0
  105. data/lib/mocha/stubbing_error.rb +2 -13
  106. data/lib/mocha/test_unit.rb +8 -2
  107. data/lib/mocha/thrower.rb +4 -6
  108. data/lib/mocha/thrown_object.rb +12 -0
  109. data/lib/mocha/version.rb +1 -1
  110. data/lib/mocha/yield_parameters.rb +7 -17
  111. data/mocha.gemspec +14 -65
  112. data/yard-templates/default/layout/html/google_analytics.erb +6 -9
  113. data/yard-templates/default/layout/html/setup.rb +2 -3
  114. metadata +25 -247
  115. data/bin/build-matrix +0 -70
  116. data/gemfiles/Gemfile.minitest.1.3.0 +0 -7
  117. data/gemfiles/Gemfile.minitest.1.4.0 +0 -7
  118. data/gemfiles/Gemfile.minitest.1.4.1 +0 -7
  119. data/gemfiles/Gemfile.minitest.1.4.2 +0 -7
  120. data/gemfiles/Gemfile.minitest.2.0.0 +0 -7
  121. data/gemfiles/Gemfile.minitest.2.0.1 +0 -7
  122. data/gemfiles/Gemfile.minitest.2.11.0 +0 -7
  123. data/gemfiles/Gemfile.minitest.2.11.2 +0 -7
  124. data/gemfiles/Gemfile.minitest.2.3.0 +0 -7
  125. data/gemfiles/Gemfile.test-unit.2.0.0 +0 -7
  126. data/gemfiles/Gemfile.test-unit.2.0.1 +0 -7
  127. data/gemfiles/Gemfile.test-unit.2.0.3 +0 -7
  128. data/lib/mocha/class_method.rb +0 -119
  129. data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +0 -58
  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/single_yield.rb +0 -18
  138. data/lib/mocha/standalone.rb +0 -4
  139. data/lib/mocha/unexpected_invocation.rb +0 -26
  140. data/lib/mocha_standalone.rb +0 -4
  141. data/test/acceptance/acceptance_test_helper.rb +0 -41
  142. data/test/acceptance/bug_18914_test.rb +0 -43
  143. data/test/acceptance/bug_21465_test.rb +0 -34
  144. data/test/acceptance/bug_21563_test.rb +0 -25
  145. data/test/acceptance/exception_rescue_test.rb +0 -55
  146. data/test/acceptance/expectations_on_multiple_methods_test.rb +0 -55
  147. data/test/acceptance/expected_invocation_count_test.rb +0 -232
  148. data/test/acceptance/failure_messages_test.rb +0 -64
  149. data/test/acceptance/issue_272_test.rb +0 -52
  150. data/test/acceptance/issue_65_test.rb +0 -63
  151. data/test/acceptance/issue_70_test.rb +0 -55
  152. data/test/acceptance/mocha_example_test.rb +0 -98
  153. data/test/acceptance/mocha_test_result_test.rb +0 -84
  154. data/test/acceptance/mock_test.rb +0 -100
  155. data/test/acceptance/mock_with_initializer_block_test.rb +0 -51
  156. data/test/acceptance/mocked_methods_dispatch_test.rb +0 -78
  157. data/test/acceptance/multiple_expectations_failure_message_test.rb +0 -68
  158. data/test/acceptance/optional_parameters_test.rb +0 -70
  159. data/test/acceptance/parameter_matcher_test.rb +0 -337
  160. data/test/acceptance/partial_mocks_test.rb +0 -47
  161. data/test/acceptance/prepend_test.rb +0 -89
  162. data/test/acceptance/raise_exception_test.rb +0 -39
  163. data/test/acceptance/return_value_test.rb +0 -52
  164. data/test/acceptance/sequence_test.rb +0 -192
  165. data/test/acceptance/states_test.rb +0 -70
  166. data/test/acceptance/stub_any_instance_method_defined_on_superclass_test.rb +0 -34
  167. data/test/acceptance/stub_any_instance_method_test.rb +0 -280
  168. data/test/acceptance/stub_class_method_defined_on_active_record_association_proxy_test.rb +0 -106
  169. data/test/acceptance/stub_class_method_defined_on_class_test.rb +0 -78
  170. data/test/acceptance/stub_class_method_defined_on_module_test.rb +0 -75
  171. data/test/acceptance/stub_class_method_defined_on_superclass_test.rb +0 -112
  172. data/test/acceptance/stub_everything_test.rb +0 -56
  173. data/test/acceptance/stub_instance_method_defined_on_active_record_association_proxy_test.rb +0 -93
  174. data/test/acceptance/stub_instance_method_defined_on_class_and_aliased_test.rb +0 -69
  175. data/test/acceptance/stub_instance_method_defined_on_class_test.rb +0 -69
  176. data/test/acceptance/stub_instance_method_defined_on_kernel_module_test.rb +0 -75
  177. data/test/acceptance/stub_instance_method_defined_on_module_test.rb +0 -78
  178. data/test/acceptance/stub_instance_method_defined_on_object_class_test.rb +0 -75
  179. data/test/acceptance/stub_instance_method_defined_on_singleton_class_test.rb +0 -70
  180. data/test/acceptance/stub_instance_method_defined_on_superclass_test.rb +0 -72
  181. data/test/acceptance/stub_method_defined_on_module_and_aliased_test.rb +0 -39
  182. data/test/acceptance/stub_module_method_test.rb +0 -163
  183. data/test/acceptance/stub_test.rb +0 -52
  184. data/test/acceptance/stubba_example_test.rb +0 -102
  185. data/test/acceptance/stubba_test_result_test.rb +0 -66
  186. data/test/acceptance/stubbing_error_backtrace_test.rb +0 -64
  187. data/test/acceptance/stubbing_frozen_object_test.rb +0 -88
  188. data/test/acceptance/stubbing_method_accepting_block_parameter_test.rb +0 -48
  189. data/test/acceptance/stubbing_method_unnecessarily_test.rb +0 -65
  190. data/test/acceptance/stubbing_nil_test.rb +0 -61
  191. data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +0 -143
  192. data/test/acceptance/stubbing_non_existent_class_method_test.rb +0 -157
  193. data/test/acceptance/stubbing_non_existent_instance_method_test.rb +0 -147
  194. data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +0 -130
  195. data/test/acceptance/stubbing_non_public_class_method_test.rb +0 -163
  196. data/test/acceptance/stubbing_non_public_instance_method_test.rb +0 -143
  197. data/test/acceptance/stubbing_on_non_mock_object_test.rb +0 -64
  198. data/test/acceptance/stubbing_same_class_method_on_parent_and_child_classes_test.rb +0 -35
  199. data/test/acceptance/throw_test.rb +0 -45
  200. data/test/acceptance/unexpected_invocation_test.rb +0 -25
  201. data/test/acceptance/unstubbing_test.rb +0 -168
  202. data/test/assertions.rb +0 -8
  203. data/test/deprecation_disabler.rb +0 -15
  204. data/test/execution_point.rb +0 -36
  205. data/test/integration/mini_test_test.rb +0 -8
  206. data/test/integration/shared_tests.rb +0 -174
  207. data/test/integration/test_unit_test.rb +0 -8
  208. data/test/method_definer.rb +0 -24
  209. data/test/mini_test_result.rb +0 -90
  210. data/test/minitest_result.rb +0 -49
  211. data/test/simple_counter.rb +0 -13
  212. data/test/test_helper.rb +0 -50
  213. data/test/test_runner.rb +0 -58
  214. data/test/test_unit_result.rb +0 -20
  215. data/test/unit/any_instance_method_test.rb +0 -134
  216. data/test/unit/array_inspect_test.rb +0 -16
  217. data/test/unit/backtrace_filter_test.rb +0 -19
  218. data/test/unit/cardinality_test.rb +0 -56
  219. data/test/unit/central_test.rb +0 -100
  220. data/test/unit/change_state_side_effect_test.rb +0 -41
  221. data/test/unit/class_method_test.rb +0 -225
  222. data/test/unit/class_methods_test.rb +0 -40
  223. data/test/unit/configuration_test.rb +0 -38
  224. data/test/unit/date_time_inspect_test.rb +0 -21
  225. data/test/unit/exception_raiser_test.rb +0 -42
  226. data/test/unit/expectation_list_test.rb +0 -82
  227. data/test/unit/expectation_test.rb +0 -497
  228. data/test/unit/hash_inspect_test.rb +0 -16
  229. data/test/unit/hooks_test.rb +0 -29
  230. data/test/unit/in_state_ordering_constraint_test.rb +0 -43
  231. data/test/unit/method_matcher_test.rb +0 -28
  232. data/test/unit/mock_test.rb +0 -342
  233. data/test/unit/mockery_test.rb +0 -151
  234. data/test/unit/module_methods_test.rb +0 -19
  235. data/test/unit/multiple_yields_test.rb +0 -18
  236. data/test/unit/no_yields_test.rb +0 -18
  237. data/test/unit/object_inspect_test.rb +0 -39
  238. data/test/unit/object_methods_test.rb +0 -46
  239. data/test/unit/parameter_matchers/all_of_test.rb +0 -26
  240. data/test/unit/parameter_matchers/any_of_test.rb +0 -26
  241. data/test/unit/parameter_matchers/anything_test.rb +0 -21
  242. data/test/unit/parameter_matchers/equals_test.rb +0 -25
  243. data/test/unit/parameter_matchers/has_entries_test.rb +0 -51
  244. data/test/unit/parameter_matchers/has_entry_test.rb +0 -129
  245. data/test/unit/parameter_matchers/has_key_test.rb +0 -55
  246. data/test/unit/parameter_matchers/has_value_test.rb +0 -57
  247. data/test/unit/parameter_matchers/includes_test.rb +0 -102
  248. data/test/unit/parameter_matchers/instance_of_test.rb +0 -25
  249. data/test/unit/parameter_matchers/is_a_test.rb +0 -25
  250. data/test/unit/parameter_matchers/kind_of_test.rb +0 -25
  251. data/test/unit/parameter_matchers/not_test.rb +0 -26
  252. data/test/unit/parameter_matchers/regexp_matches_test.rb +0 -46
  253. data/test/unit/parameter_matchers/responds_with_test.rb +0 -32
  254. data/test/unit/parameter_matchers/stub_matcher.rb +0 -27
  255. data/test/unit/parameter_matchers/yaml_equivalent_test.rb +0 -25
  256. data/test/unit/parameters_matcher_test.rb +0 -121
  257. data/test/unit/receivers_test.rb +0 -66
  258. data/test/unit/return_values_test.rb +0 -63
  259. data/test/unit/sequence_test.rb +0 -104
  260. data/test/unit/single_return_value_test.rb +0 -14
  261. data/test/unit/single_yield_test.rb +0 -18
  262. data/test/unit/state_machine_test.rb +0 -98
  263. data/test/unit/string_inspect_test.rb +0 -11
  264. data/test/unit/thrower_test.rb +0 -20
  265. data/test/unit/yield_parameters_test.rb +0 -93
@@ -1,100 +0,0 @@
1
- require File.expand_path('../acceptance_test_helper', __FILE__)
2
- require 'mocha/setup'
3
-
4
- class MockTest < Mocha::TestCase
5
-
6
- include AcceptanceTest
7
-
8
- def setup
9
- setup_acceptance_test
10
- end
11
-
12
- def teardown
13
- teardown_acceptance_test
14
- end
15
-
16
- def test_should_build_mock_and_explicitly_add_an_expectation_which_is_satisfied
17
- test_result = run_as_test do
18
- foo = mock()
19
- foo.expects(:bar)
20
- foo.bar
21
- end
22
- assert_passed(test_result)
23
- end
24
-
25
- def test_should_build_mock_and_explicitly_add_an_expectation_which_is_not_satisfied
26
- test_result = run_as_test do
27
- foo = mock()
28
- foo.expects(:bar)
29
- end
30
- assert_failed(test_result)
31
- end
32
-
33
- def test_should_build_named_mock_and_explicitly_add_an_expectation_which_is_satisfied
34
- test_result = run_as_test do
35
- foo = mock('foo')
36
- foo.expects(:bar)
37
- foo.bar
38
- end
39
- assert_passed(test_result)
40
- end
41
-
42
- def test_should_build_named_mock_and_explicitly_add_an_expectation_which_is_not_satisfied
43
- test_result = run_as_test do
44
- foo = mock('foo')
45
- foo.expects(:bar)
46
- end
47
- assert_failed(test_result)
48
- end
49
-
50
- def test_should_build_mock_incorporating_two_expectations_which_are_satisifed
51
- test_result = run_as_test do
52
- foo = mock(:bar => 'bar', :baz => 'baz')
53
- foo.bar
54
- foo.baz
55
- end
56
- assert_passed(test_result)
57
- end
58
-
59
- def test_should_build_mock_incorporating_two_expectations_the_first_of_which_is_not_satisifed
60
- test_result = run_as_test do
61
- foo = mock(:bar => 'bar', :baz => 'baz')
62
- foo.baz
63
- end
64
- assert_failed(test_result)
65
- end
66
-
67
- def test_should_build_mock_incorporating_two_expectations_the_second_of_which_is_not_satisifed
68
- test_result = run_as_test do
69
- foo = mock(:bar => 'bar', :baz => 'baz')
70
- foo.bar
71
- end
72
- assert_failed(test_result)
73
- end
74
-
75
- def test_should_build_named_mock_incorporating_two_expectations_which_are_satisifed
76
- test_result = run_as_test do
77
- foo = mock('foo', :bar => 'bar', :baz => 'baz')
78
- foo.bar
79
- foo.baz
80
- end
81
- assert_passed(test_result)
82
- end
83
-
84
- def test_should_build_named_mock_incorporating_two_expectations_the_first_of_which_is_not_satisifed
85
- test_result = run_as_test do
86
- foo = mock('foo', :bar => 'bar', :baz => 'baz')
87
- foo.baz
88
- end
89
- assert_failed(test_result)
90
- end
91
-
92
- def test_should_build_named_mock_incorporating_two_expectations_the_second_of_which_is_not_satisifed
93
- test_result = run_as_test do
94
- foo = mock('foo', :bar => 'bar', :baz => 'baz')
95
- foo.bar
96
- end
97
- assert_failed(test_result)
98
- end
99
-
100
- end
@@ -1,51 +0,0 @@
1
- require File.expand_path('../acceptance_test_helper', __FILE__)
2
- require 'mocha/setup'
3
-
4
- class MockWithInitializerBlockTest < Mocha::TestCase
5
-
6
- include AcceptanceTest
7
-
8
- def setup
9
- setup_acceptance_test
10
- end
11
-
12
- def teardown
13
- teardown_acceptance_test
14
- end
15
-
16
- def test_should_expect_two_method_invocations_and_receive_both_of_them
17
- test_result = run_as_test do
18
- mock = mock() do
19
- expects(:method_1)
20
- expects(:method_2)
21
- end
22
- mock.method_1
23
- mock.method_2
24
- end
25
- assert_passed(test_result)
26
- end
27
-
28
- def test_should_expect_two_method_invocations_but_receive_only_one_of_them
29
- test_result = run_as_test do
30
- mock = mock() do
31
- expects(:method_1)
32
- expects(:method_2)
33
- end
34
- mock.method_1
35
- end
36
- assert_failed(test_result)
37
- end
38
-
39
- def test_should_stub_methods
40
- test_result = run_as_test do
41
- mock = mock() do
42
- stubs(:method_1).returns(1)
43
- stubs(:method_2).returns(2)
44
- end
45
- assert_equal 1, mock.method_1
46
- assert_equal 2, mock.method_2
47
- end
48
- assert_passed(test_result)
49
- end
50
-
51
- end
@@ -1,78 +0,0 @@
1
- require File.expand_path('../acceptance_test_helper', __FILE__)
2
- require 'mocha/setup'
3
-
4
- class MockedMethodDispatchTest < Mocha::TestCase
5
-
6
- include AcceptanceTest
7
-
8
- def setup
9
- setup_acceptance_test
10
- end
11
-
12
- def teardown
13
- teardown_acceptance_test
14
- end
15
-
16
- def test_should_find_latest_matching_expectation
17
- test_result = run_as_test do
18
- mock = mock()
19
- mock.stubs(:method).returns(1)
20
- mock.stubs(:method).returns(2)
21
- assert_equal 2, mock.method
22
- assert_equal 2, mock.method
23
- assert_equal 2, mock.method
24
- end
25
- assert_passed(test_result)
26
- end
27
-
28
- def test_should_find_latest_expectation_which_has_not_stopped_matching
29
- test_result = run_as_test do
30
- mock = mock()
31
- mock.stubs(:method).returns(1)
32
- mock.stubs(:method).once.returns(2)
33
- assert_equal 2, mock.method
34
- assert_equal 1, mock.method
35
- assert_equal 1, mock.method
36
- end
37
- assert_passed(test_result)
38
- end
39
-
40
- def test_should_keep_finding_later_stub_and_so_never_satisfy_earlier_expectation
41
- test_result = run_as_test do
42
- mock = mock()
43
- mock.expects(:method).returns(1)
44
- mock.stubs(:method).returns(2)
45
- assert_equal 2, mock.method
46
- assert_equal 2, mock.method
47
- assert_equal 2, mock.method
48
- end
49
- assert_failed(test_result)
50
- end
51
-
52
- def test_should_find_later_expectation_until_it_stops_matching_then_find_earlier_stub
53
- test_result = run_as_test do
54
- mock = mock()
55
- mock.stubs(:method).returns(1)
56
- mock.expects(:method).returns(2)
57
- assert_equal 2, mock.method
58
- assert_equal 1, mock.method
59
- assert_equal 1, mock.method
60
- end
61
- assert_passed(test_result)
62
- end
63
-
64
- def test_should_find_latest_expectation_with_range_of_expected_invocation_count_which_has_not_stopped_matching
65
- test_result = run_as_test do
66
- mock = mock()
67
- mock.stubs(:method).returns(1)
68
- mock.stubs(:method).times(2..3).returns(2)
69
- assert_equal 2, mock.method
70
- assert_equal 2, mock.method
71
- assert_equal 2, mock.method
72
- assert_equal 1, mock.method
73
- assert_equal 1, mock.method
74
- end
75
- assert_passed(test_result)
76
- end
77
-
78
- end
@@ -1,68 +0,0 @@
1
- require File.expand_path('../acceptance_test_helper', __FILE__)
2
- require 'mocha/setup'
3
-
4
- class FailureMessageTest < Mocha::TestCase
5
-
6
- include AcceptanceTest
7
-
8
- def setup
9
- setup_acceptance_test
10
- end
11
-
12
- def teardown
13
- teardown_acceptance_test
14
- end
15
-
16
- def test_should_include_unexpected_invocation_in_unsatisfied_expectation_message
17
- test_result = run_as_test do
18
- mock = mock('mock')
19
- mock.expects(:method_one).once
20
- 2.times { mock.method_one }
21
- end
22
- assert_failed(test_result)
23
- assert_equal [
24
- "unexpected invocation: #<Mock:mock>.method_one()",
25
- "unsatisfied expectations:",
26
- "- expected exactly once, invoked twice: #<Mock:mock>.method_one(any_parameters)"
27
- ], test_result.failure_message_lines
28
- end
29
-
30
- def test_should_report_satisfied_expectations_as_well_as_unsatisfied_expectations
31
- test_result = run_as_test do
32
- mock = mock('mock')
33
- mock.expects(:method_one).once
34
- mock.expects(:method_two).twice
35
- 1.times { mock.method_one }
36
- 1.times { mock.method_two }
37
- end
38
- assert_failed(test_result)
39
- assert_equal [
40
- "not all expectations were satisfied",
41
- "unsatisfied expectations:",
42
- "- expected exactly twice, invoked once: #<Mock:mock>.method_two(any_parameters)",
43
- "satisfied expectations:",
44
- "- expected exactly once, invoked once: #<Mock:mock>.method_one(any_parameters)"
45
- ], test_result.failure_message_lines
46
- end
47
-
48
- def test_should_report_multiple_satisfied_expectations
49
- test_result = run_as_test do
50
- mock = mock('mock')
51
- mock.expects(:method_one).once
52
- mock.expects(:method_two).twice
53
- mock.expects(:method_three).times(3)
54
- 1.times { mock.method_one }
55
- 2.times { mock.method_two }
56
- 2.times { mock.method_three }
57
- end
58
- assert_failed(test_result)
59
- assert_equal [
60
- "not all expectations were satisfied",
61
- "unsatisfied expectations:",
62
- "- expected exactly 3 times, invoked twice: #<Mock:mock>.method_three(any_parameters)",
63
- "satisfied expectations:",
64
- "- expected exactly twice, invoked twice: #<Mock:mock>.method_two(any_parameters)",
65
- "- expected exactly once, invoked once: #<Mock:mock>.method_one(any_parameters)"
66
- ], test_result.failure_message_lines
67
- end
68
- end
@@ -1,70 +0,0 @@
1
- require File.expand_path('../acceptance_test_helper', __FILE__)
2
- require 'mocha/setup'
3
-
4
- class OptionalParameterMatcherTest < Mocha::TestCase
5
-
6
- include AcceptanceTest
7
-
8
- def setup
9
- setup_acceptance_test
10
- end
11
-
12
- def teardown
13
- teardown_acceptance_test
14
- end
15
-
16
- def test_should_pass_if_all_required_parameters_match_and_no_optional_parameters_are_supplied
17
- test_result = run_as_test do
18
- mock = mock()
19
- mock.expects(:method).with(1, 2, optionally(3, 4))
20
- mock.method(1, 2)
21
- end
22
- assert_passed(test_result)
23
- end
24
-
25
- def test_should_pass_if_all_required_and_optional_parameters_match_and_some_optional_parameters_are_supplied
26
- test_result = run_as_test do
27
- mock = mock()
28
- mock.expects(:method).with(1, 2, optionally(3, 4))
29
- mock.method(1, 2, 3)
30
- end
31
- assert_passed(test_result)
32
- end
33
-
34
- def test_should_pass_if_all_required_and_optional_parameters_match_and_all_optional_parameters_are_supplied
35
- test_result = run_as_test do
36
- mock = mock()
37
- mock.expects(:method).with(1, 2, optionally(3, 4))
38
- mock.method(1, 2, 3, 4)
39
- end
40
- assert_passed(test_result)
41
- end
42
-
43
- def test_should_fail_if_all_required_and_optional_parameters_match_but_too_many_optional_parameters_are_supplied
44
- test_result = run_as_test do
45
- mock = mock()
46
- mock.expects(:method).with(1, 2, optionally(3, 4))
47
- mock.method(1, 2, 3, 4, 5)
48
- end
49
- assert_failed(test_result)
50
- end
51
-
52
- def test_should_fail_if_all_required_parameters_match_but_some_optional_parameters_do_not_match
53
- test_result = run_as_test do
54
- mock = mock()
55
- mock.expects(:method).with(1, 2, optionally(3, 4))
56
- mock.method(1, 2, 4)
57
- end
58
- assert_failed(test_result)
59
- end
60
-
61
- def test_should_fail_if_all_required_parameters_match_but_no_optional_parameters_match
62
- test_result = run_as_test do
63
- mock = mock()
64
- mock.expects(:method).with(1, 2, optionally(3, 4))
65
- mock.method(1, 2, 4, 5)
66
- end
67
- assert_failed(test_result)
68
- end
69
-
70
- end
@@ -1,337 +0,0 @@
1
- require File.expand_path('../acceptance_test_helper', __FILE__)
2
- require 'mocha/setup'
3
-
4
- class ParameterMatcherTest < Mocha::TestCase
5
-
6
- include AcceptanceTest
7
-
8
- def setup
9
- setup_acceptance_test
10
- end
11
-
12
- def teardown
13
- teardown_acceptance_test
14
- end
15
-
16
- def test_should_match_hash_parameter_with_specified_key
17
- test_result = run_as_test do
18
- mock = mock()
19
- mock.expects(:method).with(has_key(:key_1))
20
- mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
21
- end
22
- assert_passed(test_result)
23
- end
24
-
25
- def test_should_not_match_hash_parameter_with_specified_key
26
- test_result = run_as_test do
27
- mock = mock()
28
- mock.expects(:method).with(has_key(:key_1))
29
- mock.method(:key_2 => 'value_2')
30
- end
31
- assert_failed(test_result)
32
- end
33
-
34
- def test_should_match_hash_parameter_with_specified_value
35
- test_result = run_as_test do
36
- mock = mock()
37
- mock.expects(:method).with(has_value('value_1'))
38
- mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
39
- end
40
- assert_passed(test_result)
41
- end
42
-
43
- def test_should_not_match_hash_parameter_with_specified_value
44
- test_result = run_as_test do
45
- mock = mock()
46
- mock.expects(:method).with(has_value('value_1'))
47
- mock.method(:key_2 => 'value_2')
48
- end
49
- assert_failed(test_result)
50
- end
51
-
52
- def test_should_match_hash_parameter_with_specified_key_value_pair
53
- test_result = run_as_test do
54
- mock = mock()
55
- mock.expects(:method).with(has_entry(:key_1, 'value_1'))
56
- mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
57
- end
58
- assert_passed(test_result)
59
- end
60
-
61
- def test_should_not_match_hash_parameter_with_specified_key_value_pair
62
- test_result = run_as_test do
63
- mock = mock()
64
- mock.expects(:method).with(has_entry(:key_1, 'value_2'))
65
- mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
66
- end
67
- assert_failed(test_result)
68
- end
69
-
70
- def test_should_match_hash_parameter_with_specified_hash_entry
71
- test_result = run_as_test do
72
- mock = mock()
73
- mock.expects(:method).with(has_entry(:key_1 => 'value_1'))
74
- mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
75
- end
76
- assert_passed(test_result)
77
- end
78
-
79
- def test_should_not_match_hash_parameter_with_specified_hash_entry
80
- test_result = run_as_test do
81
- mock = mock()
82
- mock.expects(:method).with(has_entry(:key_1 => 'value_2'))
83
- mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
84
- end
85
- assert_failed(test_result)
86
- end
87
-
88
- def test_should_match_hash_parameter_with_specified_entries
89
- test_result = run_as_test do
90
- mock = mock()
91
- mock.expects(:method).with(has_entries(:key_1 => 'value_1', :key_2 => 'value_2'))
92
- mock.method(:key_1 => 'value_1', :key_2 => 'value_2', :key_3 => 'value_3')
93
- end
94
- assert_passed(test_result)
95
- end
96
-
97
- def test_should_not_match_hash_parameter_with_specified_entries
98
- test_result = run_as_test do
99
- mock = mock()
100
- mock.expects(:method).with(has_entries(:key_1 => 'value_1', :key_2 => 'value_2'))
101
- mock.method(:key_1 => 'value_1', :key_2 => 'value_3')
102
- end
103
- assert_failed(test_result)
104
- end
105
-
106
- def test_should_match_parameter_that_matches_regular_expression
107
- test_result = run_as_test do
108
- mock = mock()
109
- mock.expects(:method).with(regexp_matches(/meter/))
110
- mock.method('this parameter should match')
111
- end
112
- assert_passed(test_result)
113
- end
114
-
115
- def test_should_not_match_parameter_that_does_not_match_regular_expression
116
- test_result = run_as_test do
117
- mock = mock()
118
- mock.expects(:method).with(regexp_matches(/something different/))
119
- mock.method('this parameter should not match')
120
- end
121
- assert_failed(test_result)
122
- end
123
-
124
- def test_should_match_hash_parameter_with_specified_entries_using_nested_matchers
125
- test_result = run_as_test do
126
- mock = mock()
127
- mock.expects(:method).with(has_entries(:key_1 => regexp_matches(/value_1/), kind_of(Symbol) => 'value_2'))
128
- mock.method(:key_1 => 'value_1', :key_2 => 'value_2', :key_3 => 'value_3')
129
- end
130
- assert_passed(test_result)
131
- end
132
-
133
- def test_should_not_match_hash_parameter_with_specified_entries_using_nested_matchers
134
- test_result = run_as_test do
135
- mock = mock()
136
- mock.expects(:method).with(has_entries(:key_1 => regexp_matches(/value_1/), kind_of(String) => 'value_2'))
137
- mock.method(:key_1 => 'value_2', :key_2 => 'value_3')
138
- end
139
- assert_failed(test_result)
140
- end
141
-
142
- def test_should_match_parameter_that_matches_any_value
143
- test_result = run_as_test do
144
- mock = mock()
145
- mock.expects(:method).with(any_of('value_1', 'value_2')).times(2)
146
- mock.method('value_1')
147
- mock.method('value_2')
148
- end
149
- assert_passed(test_result)
150
- end
151
-
152
- def test_should_not_match_parameter_that_does_not_match_any_value
153
- test_result = run_as_test do
154
- mock = mock()
155
- mock.expects(:method).with(any_of('value_1', 'value_2'))
156
- mock.method('value_3')
157
- end
158
- assert_failed(test_result)
159
- end
160
-
161
- def test_should_match_parameter_that_matches_any_of_the_given_matchers
162
- test_result = run_as_test do
163
- mock = mock()
164
- mock.expects(:method).with(has_key(:foo) | has_key(:bar)).times(2)
165
- mock.method(:foo => 'fooval')
166
- mock.method(:bar => 'barval')
167
- end
168
- assert_passed(test_result)
169
- end
170
-
171
- def test_should_not_match_parameter_that_does_not_match_any_of_the_given_matchers
172
- test_result = run_as_test do
173
- mock = mock()
174
- mock.expects(:method).with(has_key(:foo) | has_key(:bar))
175
- mock.method(:baz => 'bazval')
176
- end
177
- assert_failed(test_result)
178
- end
179
-
180
- def test_should_match_parameter_that_matches_all_values
181
- test_result = run_as_test do
182
- mock = mock()
183
- mock.expects(:method).with(all_of('value_1', 'value_1'))
184
- mock.method('value_1')
185
- end
186
- assert_passed(test_result)
187
- end
188
-
189
- def test_should_not_match_parameter_that_does_not_match_all_values
190
- test_result = run_as_test do
191
- mock = mock()
192
- mock.expects(:method).with(all_of('value_1', 'value_2'))
193
- mock.method('value_1')
194
- end
195
- assert_failed(test_result)
196
- end
197
-
198
- def test_should_match_parameter_that_matches_all_matchers
199
- test_result = run_as_test do
200
- mock = mock()
201
- mock.expects(:method).with(has_key(:foo) & has_key(:bar))
202
- mock.method(:foo => 'fooval', :bar => 'barval')
203
- end
204
- assert_passed(test_result)
205
- end
206
-
207
- def test_should_not_match_parameter_that_does_not_match_all_matchers
208
- test_result = run_as_test do
209
- mock = mock()
210
- mock.expects(:method).with(has_key(:foo) & has_key(:bar))
211
- mock.method(:foo => 'fooval', :baz => 'bazval')
212
- end
213
- assert_failed(test_result)
214
- end
215
-
216
- def test_should_match_parameter_that_responds_with_specified_value
217
- klass = Class.new do
218
- def quack
219
- 'quack'
220
- end
221
- end
222
- duck = klass.new
223
- test_result = run_as_test do
224
- mock = mock()
225
- mock.expects(:method).with(responds_with(:quack, 'quack'))
226
- mock.method(duck)
227
- end
228
- assert_passed(test_result)
229
- end
230
-
231
- def test_should_not_match_parameter_that_does_not_respond_with_specified_value
232
- klass = Class.new do
233
- def quack
234
- 'woof'
235
- end
236
- end
237
- duck = klass.new
238
- test_result = run_as_test do
239
- mock = mock()
240
- mock.expects(:method).with(responds_with(:quack, 'quack'))
241
- mock.method(duck)
242
- end
243
- assert_failed(test_result)
244
- end
245
-
246
- def test_should_match_parameter_that_has_identical_query_string
247
- test_result = run_as_test do
248
- mock = mock()
249
- mock.expects(:method).with(has_equivalent_query_string('http://example.com/foo?a=1&b=2'))
250
- mock.method('http://example.com/foo?a=1&b=2')
251
- end
252
- assert_passed(test_result)
253
- end
254
-
255
- def test_should_match_parameter_that_has_rearranged_query_string
256
- test_result = run_as_test do
257
- mock = mock()
258
- mock.expects(:method).with(has_equivalent_query_string('http://example.com/foo?b=2&a=1'))
259
- mock.method('http://example.com/foo?a=1&b=2')
260
- end
261
- assert_passed(test_result)
262
- end
263
-
264
- def test_should_not_match_parameter_that_does_not_have_the_same_query_parameters
265
- test_result = run_as_test do
266
- mock = mock()
267
- mock.expects(:method).with(has_equivalent_query_string('http://example.com/foo?a=1'))
268
- mock.method('http://example.com/foo?a=1&b=2')
269
- end
270
- assert_failed(test_result)
271
- end
272
-
273
- def test_should_not_match_parameter_that_has_no_query_parameters_when_they_are_expected
274
- test_result = run_as_test do
275
- mock = mock()
276
- mock.expects(:method).with(has_equivalent_query_string('http://example.com/foo'))
277
- mock.method('http://example.com/foo?a=1&b=2')
278
- end
279
- assert_failed(test_result)
280
- end
281
-
282
- def test_should_not_match_parameter_that_has_the_same_query_string_bit_which_differs_otherwise
283
- test_result = run_as_test do
284
- mock = mock()
285
- mock.expects(:method).with(has_equivalent_query_string('http://a.example.com/foo?a=1&b=2'))
286
- mock.method('http://b.example.com/foo?a=1&b=2')
287
- end
288
- assert_failed(test_result)
289
- end
290
-
291
- def test_should_match_parameter_with_no_domain_or_scheme
292
- test_result = run_as_test do
293
- mock = mock()
294
- mock.expects(:method).with(has_equivalent_query_string('/foo?a=1&b=2'))
295
- mock.method('/foo?a=1&b=2')
296
- end
297
- assert_passed(test_result)
298
- end
299
-
300
- def test_should_match_parameter_when_value_is_divisible_by_four
301
- test_result = run_as_test do
302
- mock = mock()
303
- mock.expects(:method).with { |actual_value| actual_value % 4 == 0 }
304
- mock.method(8)
305
- end
306
- assert_passed(test_result)
307
- end
308
-
309
- def test_should_not_match_parameter_when_value_is_not_divisible_by_four
310
- test_result = run_as_test do
311
- mock = mock()
312
- mock.expects(:method).with { |actual_value| actual_value % 4 == 0 }
313
- mock.method(9)
314
- end
315
- assert_failed(test_result)
316
- end
317
-
318
- def test_should_match_parameters_when_values_add_up_to_ten
319
- test_result = run_as_test do
320
- mock = mock()
321
- matcher = lambda { |*values| values.inject(0) { |sum, n| sum + n } == 10 }
322
- mock.expects(:method).with(&matcher)
323
- mock.method(1, 2, 3, 4)
324
- end
325
- assert_passed(test_result)
326
- end
327
-
328
- def test_should_not_match_parameters_when_values_do_not_add_up_to_ten
329
- test_result = run_as_test do
330
- mock = mock()
331
- matcher = lambda { |*values| values.inject(0) { |sum, n| sum + n } == 10 }
332
- mock.expects(:method).with(&matcher)
333
- mock.method(1, 2, 3, 4, 5)
334
- end
335
- assert_failed(test_result)
336
- end
337
- end