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,21 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/anything'
4
- require 'mocha/inspect'
5
-
6
- class AnythingTest < Mocha::TestCase
7
-
8
- include Mocha::ParameterMatchers
9
-
10
- def test_should_match_anything
11
- matcher = anything
12
- assert matcher.matches?([:something])
13
- assert matcher.matches?([{'x' => 'y'}])
14
- end
15
-
16
- def test_should_describe_matcher
17
- matcher = anything
18
- assert_equal "anything", matcher.mocha_inspect
19
- end
20
-
21
- end
@@ -1,25 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/equals'
4
- require 'mocha/inspect'
5
-
6
- class EqualsTest < Mocha::TestCase
7
-
8
- include Mocha::ParameterMatchers
9
-
10
- def test_should_match_object_that_equals_value
11
- matcher = equals('x')
12
- assert matcher.matches?(['x'])
13
- end
14
-
15
- def test_should_not_match_object_that_does_not_equal_value
16
- matcher = equals('x')
17
- assert !matcher.matches?(['y'])
18
- end
19
-
20
- def test_should_describe_matcher
21
- matcher = equals('x')
22
- assert_equal "'x'", matcher.mocha_inspect
23
- end
24
-
25
- end
@@ -1,51 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/has_entries'
4
- require 'mocha/parameter_matchers/object'
5
- require 'mocha/inspect'
6
-
7
- class HasEntriesTest < Mocha::TestCase
8
-
9
- include Mocha::ParameterMatchers
10
-
11
- def test_should_match_hash_including_specified_entries
12
- matcher = has_entries(:key_1 => 'value_1', :key_2 => 'value_2')
13
- assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2', :key_3 => 'value_3' }])
14
- end
15
-
16
- def test_should_not_match_hash_not_including_specified_entries
17
- matcher = has_entries(:key_1 => 'value_2', :key_2 => 'value_2', :key_3 => 'value_3')
18
- assert !matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
19
- end
20
-
21
- def test_should_describe_matcher
22
- matcher = has_entries(:key_1 => 'value_1', :key_2 => 'value_2')
23
- description = matcher.mocha_inspect
24
- matches = /has_entries\((.*)\)/.match(description)
25
- assert_not_nil matches[0]
26
- entries = eval(matches[1], binding, __FILE__, __LINE__)
27
- assert_equal 'value_1', entries[:key_1]
28
- assert_equal 'value_2', entries[:key_2]
29
- end
30
-
31
- def test_should_match_hash_including_specified_entries_with_nested_key_matchers
32
- matcher = has_entries(equals(:key_1) => 'value_1', equals(:key_2) => 'value_2')
33
- assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2', :key_3 => 'value_3' }])
34
- end
35
-
36
- def test_should_not_match_hash_not_including_specified_entries_with_nested_key_matchers
37
- matcher = has_entries(equals(:key_1) => 'value_2', equals(:key_2) => 'value_2', equals(:key_3) => 'value_3')
38
- assert !matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
39
- end
40
-
41
- def test_should_match_hash_including_specified_entries_with_nested_value_matchers
42
- matcher = has_entries(:key_1 => equals('value_1'), :key_2 => equals('value_2'))
43
- assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2', :key_3 => 'value_3' }])
44
- end
45
-
46
- def test_should_not_match_hash_not_including_specified_entries_with_nested_value_matchers
47
- matcher = has_entries(:key_1 => equals('value_2'), :key_2 => equals('value_2'), :key_3 => equals('value_3'))
48
- assert !matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
49
- end
50
-
51
- end
@@ -1,129 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/has_entry'
4
- require 'mocha/parameter_matchers/object'
5
- require 'mocha/parameter_matchers/equals'
6
- require 'mocha/inspect'
7
-
8
- class HasEntryTest < Mocha::TestCase
9
-
10
- include Mocha::ParameterMatchers
11
-
12
- def test_should_match_hash_including_specified_key_value_pair
13
- matcher = has_entry(:key_1, 'value_1')
14
- assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
15
- end
16
-
17
- def test_should_not_match_hash_not_including_specified_key_value_pair
18
- matcher = has_entry(:key_1, 'value_2')
19
- assert !matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
20
- end
21
-
22
- def test_should_match_hash_including_specified_entry
23
- matcher = has_entry(:key_1 => 'value_1')
24
- assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
25
- end
26
-
27
- def test_should_not_match_hash_not_including_specified_entry
28
- matcher = has_entry(:key_1 => 'value_2')
29
- assert !matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
30
- end
31
-
32
- def test_should_describe_matcher_with_key_value_pair
33
- matcher = has_entry(:key_1, 'value_1')
34
- assert_equal "has_entry(:key_1 => 'value_1')", matcher.mocha_inspect
35
- end
36
-
37
- def test_should_describe_matcher_with_entry
38
- matcher = has_entry(:key_1 => 'value_1')
39
- assert_equal "has_entry(:key_1 => 'value_1')", matcher.mocha_inspect
40
- end
41
-
42
- def test_should_match_hash_including_specified_entry_with_nested_key_matcher
43
- matcher = has_entry(equals(:key_1) => 'value_1')
44
- assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
45
- end
46
-
47
- def test_should_match_hash_including_specified_entry_with_nested_value_matcher
48
- matcher = has_entry(:key_1 => equals('value_1'))
49
- assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
50
- end
51
-
52
- def test_should_not_match_hash_not_including_specified_entry_with_nested_key_matcher
53
- matcher = has_entry(equals(:key_1) => 'value_2')
54
- assert !matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
55
- end
56
-
57
- def test_should_not_match_hash_not_including_specified_entry_with_nested_value_matcher
58
- matcher = has_entry(:key_1 => equals('value_2'))
59
- assert !matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
60
- end
61
-
62
- def test_should_not_match_object_that_doesnt_respond_to_keys
63
- matcher = has_entry(:key_1 => equals('value_2'))
64
- object = Class.new do
65
- def [](key)
66
- 'value_2'
67
- end
68
- end.new
69
- assert !matcher.matches?([object])
70
- end
71
-
72
- def test_should_not_match_object_that_doesnt_respond_to_square_bracket
73
- matcher = has_entry(:key_1 => equals('value_2'))
74
- object = Class.new do
75
- def keys
76
- [:key_1]
77
- end
78
- end.new
79
- assert !matcher.matches?([object])
80
- end
81
-
82
- def test_should_raise_argument_error_if_single_argument_is_not_a_hash
83
- e = assert_raises(ArgumentError) do
84
- has_entry(Array.new)
85
- end
86
- assert_equal "Argument is not a Hash.", e.message
87
- end
88
-
89
- def test_should_raise_argument_error_if_no_entries_are_supplied
90
- e = assert_raises(ArgumentError) do
91
- has_entry({})
92
- end
93
- assert_equal "Argument has no entries.", e.message
94
- end
95
-
96
- def test_should_raise_argument_error_if_multiple_entries_are_supplied
97
- e = assert_raises(ArgumentError) do
98
- has_entry(:key_1 => 'value_1', :key_2 => 'value_2')
99
- end
100
- assert_equal "Argument has multiple entries. Use Mocha::ParameterMatchers#has_entries instead.", e.message
101
- end
102
-
103
- def test_should_raise_argument_error_if_more_than_two_arguments_are_supplied
104
- e = assert_raises(ArgumentError) do
105
- has_entry(1, 2, 3)
106
- end
107
- assert_equal "Too many arguments; use either a single argument (must be a Hash) or two arguments (a key and a value).", e.message
108
- end
109
-
110
- def test_should_match_array_as_key
111
- matcher = has_entry([:key_1, :key_2] => 'value_1')
112
- assert matcher.matches?([{[:key_1, :key_2] => 'value_1', :key_3 => 'value_2'}])
113
- end
114
-
115
- def test_should_match_array_as_value
116
- matcher = has_entry(:key_1 => ['value_1', 'value_2'])
117
- assert matcher.matches?([{:key_1 => ['value_1', 'value_2']}])
118
- end
119
-
120
- def test_should_match_hash_as_value_and_key
121
- matcher = has_entry({{:key_1 => 'value_1', :key_2 => 'value_2'} => {:key_3 => 'value_3', :key_4 => 'value_4'}})
122
- assert matcher.matches?([{{:key_1 => 'value_1', :key_2 => 'value_2'} => {:key_3 => 'value_3', :key_4 => 'value_4'}, :key_5 => 'value_5'}])
123
- end
124
-
125
- def test_should_match_matcher_as_value_and_key
126
- matcher = has_entry({has_entry(:key_1 => 'value_1') => has_entry(:key_3 => 'value_3')})
127
- assert matcher.matches?([{{:key_1 => 'value_1', :key_2 => 'value_2'} => {:key_3 => 'value_3', :key_4 => 'value_4'}, :key_5 => 'value_5'}])
128
- end
129
- end
@@ -1,55 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/has_key'
4
- require 'mocha/parameter_matchers/object'
5
- require 'mocha/inspect'
6
-
7
- class HasKeyTest < Mocha::TestCase
8
-
9
- include Mocha::ParameterMatchers
10
-
11
- def test_should_match_hash_including_specified_key
12
- matcher = has_key(:key_1)
13
- assert matcher.matches?([{ :key_1 => 1, :key_2 => 2 }])
14
- end
15
-
16
- def test_should_not_match_hash_not_including_specified_key
17
- matcher = has_key(:key_1)
18
- assert !matcher.matches?([{ :key_2 => 2 }])
19
- end
20
-
21
- def test_should_describe_matcher
22
- matcher = has_key(:key)
23
- assert_equal 'has_key(:key)', matcher.mocha_inspect
24
- end
25
-
26
- def test_should_match_hash_including_specified_key_with_nested_key_matcher
27
- matcher = has_key(equals(:key_1))
28
- assert matcher.matches?([{ :key_1 => 1, :key_2 => 2 }])
29
- end
30
-
31
- def test_should_not_match_hash_not_including_specified_key_with_nested_key_matcher
32
- matcher = has_key(equals(:key_1))
33
- assert !matcher.matches?([{ :key_2 => 2 }])
34
- end
35
-
36
- def test_should_not_raise_error_on_empty_arguments
37
- matcher = has_key(:key)
38
- assert_nothing_raised { matcher.matches?([]) }
39
- end
40
-
41
- def test_should_not_match_on_empty_arguments
42
- matcher = has_key(:key)
43
- assert !matcher.matches?([])
44
- end
45
-
46
- def test_should_not_raise_error_on_argument_that_does_not_respond_to_keys
47
- matcher = has_key(:key)
48
- assert_nothing_raised { matcher.matches?([:key]) }
49
- end
50
-
51
- def test_should_not_match_on_argument_that_does_not_respond_to_keys
52
- matcher = has_key(:key)
53
- assert !matcher.matches?([:key])
54
- end
55
- end
@@ -1,57 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/has_value'
4
- require 'mocha/parameter_matchers/object'
5
- require 'mocha/parameter_matchers/equals'
6
- require 'mocha/inspect'
7
-
8
- class HasValueTest < Mocha::TestCase
9
-
10
- include Mocha::ParameterMatchers
11
-
12
- def test_should_match_hash_including_specified_value
13
- matcher = has_value('value_1')
14
- assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
15
- end
16
-
17
- def test_should_not_match_hash_not_including_specified_value
18
- matcher = has_value('value_1')
19
- assert !matcher.matches?([{ :key_2 => 'value_2' }])
20
- end
21
-
22
- def test_should_describe_matcher
23
- matcher = has_value('value_1')
24
- assert_equal "has_value('value_1')", matcher.mocha_inspect
25
- end
26
-
27
- def test_should_match_hash_including_specified_value_with_nested_value_matcher
28
- matcher = has_value(equals('value_1'))
29
- assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
30
- end
31
-
32
- def test_should_not_match_hash_not_including_specified_value_with_nested_value_matcher
33
- matcher = has_value(equals('value_1'))
34
- assert !matcher.matches?([{ :key_2 => 'value_2' }])
35
- end
36
-
37
- def test_should_not_raise_error_on_empty_arguments
38
- matcher = has_value('value_1')
39
- assert_nothing_raised { matcher.matches?([]) }
40
- end
41
-
42
- def test_should_not_match_empty_arguments
43
- matcher = has_value('value_1')
44
- assert !matcher.matches?([])
45
- end
46
-
47
- def test_should_not_raise_error_on_argument_that_does_not_respond_to_values
48
- matcher = has_value('value_1')
49
- assert_nothing_raised { matcher.matches?(['value_1']) }
50
- end
51
-
52
- def test_should_not_match_on_argument_that_does_not_respond_to_values
53
- matcher = has_value('value_1')
54
- assert !matcher.matches?(['value_1'])
55
- end
56
-
57
- end
@@ -1,102 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/includes'
4
- require 'mocha/parameter_matchers/object'
5
- require 'mocha/parameter_matchers/has_key'
6
- require 'mocha/parameter_matchers/regexp_matches'
7
- require 'mocha/inspect'
8
-
9
- class IncludesTest < Mocha::TestCase
10
-
11
- include Mocha::ParameterMatchers
12
-
13
- def test_should_match_object_including_value
14
- matcher = includes(:x)
15
- assert matcher.matches?([[:x, :y, :z]])
16
- end
17
-
18
- def test_should_match_object_including_all_values
19
- matcher = includes(:x, :y, :z)
20
- assert matcher.matches?([[:x, :y, :z]])
21
- end
22
-
23
- def test_should_not_match_object_that_does_not_include_value
24
- matcher = includes(:not_included)
25
- assert !matcher.matches?([[:x, :y, :z]])
26
- end
27
-
28
- def test_should_not_match_object_that_does_not_include_any_one_value
29
- matcher = includes(:x, :y, :z, :not_included)
30
- assert !matcher.matches?([[:x, :y, :z]])
31
- end
32
-
33
- def test_should_describe_matcher_with_one_item
34
- matcher = includes(:x)
35
- assert_equal "includes(:x)", matcher.mocha_inspect
36
- end
37
-
38
- def test_should_describe_matcher_with_multiple_items
39
- matcher = includes(:x, :y, :z)
40
- assert_equal "includes(:x, :y, :z)", matcher.mocha_inspect
41
- end
42
-
43
- def test_should_not_raise_error_on_emtpy_arguments
44
- matcher = includes(:x)
45
- assert_nothing_raised { matcher.matches?([]) }
46
- end
47
-
48
- def test_should_not_match_on_empty_arguments
49
- matcher = includes(:x)
50
- assert !matcher.matches?([])
51
- end
52
-
53
- def test_should_not_raise_error_on_argument_that_does_not_respond_to_include
54
- matcher = includes(:x)
55
- assert_nothing_raised { matcher.matches?([:x]) }
56
- end
57
-
58
- def test_should_not_match_on_argument_that_does_not_respond_to_include
59
- matcher = includes(:x)
60
- assert !matcher.matches?([:x])
61
- end
62
-
63
- def test_should_match_object_including_value_which_matches_nested_matcher
64
- matcher = includes(has_key(:key))
65
- assert matcher.matches?([[:non_matching_element, {:key => 'value'}]])
66
- end
67
-
68
- def test_should_not_match_object_which_doesnt_include_value_that_matches_nested_matcher
69
- matcher = includes(has_key(:key))
70
- assert !matcher.matches?([[:non_matching_element, {:other_key => 'other-value'}]])
71
- end
72
-
73
- def test_should_match_string_argument_containing_substring
74
- matcher = includes('bar')
75
- assert matcher.matches?(['foobarbaz'])
76
- end
77
-
78
- def test_should_not_match_string_argument_without_substring
79
- matcher = includes('bar')
80
- assert !matcher.matches?(['foobaz'])
81
- end
82
-
83
- def test_should_match_hash_argument_containing_given_key
84
- matcher = includes(:key)
85
- assert matcher.matches?([{:thing => 1, :key => 2}])
86
- end
87
-
88
- def test_should_not_match_hash_argument_missing_given_key
89
- matcher = includes(:key)
90
- assert !matcher.matches?([{:thing => 1, :other => :key}])
91
- end
92
-
93
- def test_should_match_hash_when_nested_matcher_matches_key
94
- matcher = includes(regexp_matches(/ar/))
95
- assert matcher.matches?([{'foo' => 1, 'bar' => 2}])
96
- end
97
-
98
- def test_should_not_match_hash_when_nested_matcher_doesn_not_match_key
99
- matcher = includes(regexp_matches(/az/))
100
- assert !matcher.matches?([{'foo' => 1, 'bar' => 2}])
101
- end
102
- end
@@ -1,25 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/instance_of'
4
- require 'mocha/inspect'
5
-
6
- class InstanceOfTest < Mocha::TestCase
7
-
8
- include Mocha::ParameterMatchers
9
-
10
- def test_should_match_object_that_is_an_instance_of_specified_class
11
- matcher = instance_of(String)
12
- assert matcher.matches?(['string'])
13
- end
14
-
15
- def test_should_not_match_object_that_is_not_an_instance_of_specified_class
16
- matcher = instance_of(String)
17
- assert !matcher.matches?([99])
18
- end
19
-
20
- def test_should_describe_matcher
21
- matcher = instance_of(String)
22
- assert_equal "instance_of(String)", matcher.mocha_inspect
23
- end
24
-
25
- end
@@ -1,25 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/is_a'
4
- require 'mocha/inspect'
5
-
6
- class IsATest < Mocha::TestCase
7
-
8
- include Mocha::ParameterMatchers
9
-
10
- def test_should_match_object_that_is_a_specified_class
11
- matcher = is_a(Integer)
12
- assert matcher.matches?([99])
13
- end
14
-
15
- def test_should_not_match_object_that_is_not_a_specified_class
16
- matcher = is_a(Integer)
17
- assert !matcher.matches?(['string'])
18
- end
19
-
20
- def test_should_describe_matcher
21
- matcher = is_a(Integer)
22
- assert_equal "is_a(Integer)", matcher.mocha_inspect
23
- end
24
-
25
- end
@@ -1,25 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/kind_of'
4
- require 'mocha/inspect'
5
-
6
- class KindOfTest < Mocha::TestCase
7
-
8
- include Mocha::ParameterMatchers
9
-
10
- def test_should_match_object_that_is_a_kind_of_specified_class
11
- matcher = kind_of(Integer)
12
- assert matcher.matches?([99])
13
- end
14
-
15
- def test_should_not_match_object_that_is_not_a_kind_of_specified_class
16
- matcher = kind_of(Integer)
17
- assert !matcher.matches?(['string'])
18
- end
19
-
20
- def test_should_describe_matcher
21
- matcher = kind_of(Integer)
22
- assert_equal "kind_of(Integer)", matcher.mocha_inspect
23
- end
24
-
25
- end
@@ -1,26 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/not'
4
- require 'mocha/inspect'
5
- require 'stub_matcher'
6
-
7
- class NotTest < Mocha::TestCase
8
-
9
- include Mocha::ParameterMatchers
10
-
11
- def test_should_match_if_matcher_does_not_match
12
- matcher = Not(Stub::Matcher.new(false))
13
- assert matcher.matches?(['any_old_value'])
14
- end
15
-
16
- def test_should_not_match_if_matcher_does_match
17
- matcher = Not(Stub::Matcher.new(true))
18
- assert !matcher.matches?(['any_old_value'])
19
- end
20
-
21
- def test_should_describe_matcher
22
- matcher = Not(Stub::Matcher.new(true))
23
- assert_equal 'Not(matcher(true))', matcher.mocha_inspect
24
- end
25
-
26
- end
@@ -1,46 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/regexp_matches'
4
- require 'mocha/inspect'
5
-
6
- class RegexpMatchesTest < Mocha::TestCase
7
-
8
- include Mocha::ParameterMatchers
9
-
10
- def test_should_match_parameter_matching_regular_expression
11
- matcher = regexp_matches(/oo/)
12
- assert matcher.matches?(['foo'])
13
- end
14
-
15
- def test_should_not_match_parameter_not_matching_regular_expression
16
- matcher = regexp_matches(/oo/)
17
- assert !matcher.matches?(['bar'])
18
- end
19
-
20
- def test_should_describe_matcher
21
- matcher = regexp_matches(/oo/)
22
- assert_equal "regexp_matches(/oo/)", matcher.mocha_inspect
23
- end
24
-
25
- def test_should_not_raise_error_on_empty_arguments
26
- matcher = regexp_matches(/oo/)
27
- assert_nothing_raised { matcher.matches?([]) }
28
- end
29
-
30
- def test_should_not_match_on_empty_arguments
31
- matcher = regexp_matches(/oo/)
32
- assert !matcher.matches?([])
33
- end
34
-
35
- def test_should_not_raise_error_on_argument_that_does_not_respond_to_equals_tilde
36
- object_not_responding_to_equals_tilde = Class.new { undef =~ }.new
37
- matcher = regexp_matches(/oo/)
38
- assert_nothing_raised { matcher.matches?([object_not_responding_to_equals_tilde]) }
39
- end
40
-
41
- def test_should_not_match_on_argument_that_does_not_respond_to_equals_tilde
42
- object_not_responding_to_equals_tilde = Class.new { undef =~ }.new
43
- matcher = regexp_matches(/oo/)
44
- assert !matcher.matches?([object_not_responding_to_equals_tilde])
45
- end
46
- end
@@ -1,32 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/responds_with'
4
- require 'mocha/parameter_matchers/object'
5
- require 'mocha/inspect'
6
-
7
- class RespondsWithTest < Mocha::TestCase
8
-
9
- include Mocha::ParameterMatchers
10
-
11
- def test_should_match_parameter_responding_with_expected_value
12
- matcher = responds_with(:upcase, 'FOO')
13
- assert matcher.matches?(['foo'])
14
- end
15
-
16
- def test_should_not_match_parameter_responding_with_unexpected_value
17
- matcher = responds_with(:upcase, 'FOO')
18
- assert !matcher.matches?(['bar'])
19
- end
20
-
21
- def test_should_match_parameter_responding_with_nested_responds_with_matcher
22
- matcher = responds_with(:foo, responds_with(:bar, 'baz'))
23
- object = Class.new { def foo; Class.new { def bar; 'baz'; end }.new; end }.new
24
- assert matcher.matches?([object])
25
- end
26
-
27
- def test_should_describe_matcher
28
- matcher = responds_with(:foo, :bar)
29
- assert_equal 'responds_with(:foo, :bar)', matcher.mocha_inspect
30
- end
31
-
32
- end
@@ -1,27 +0,0 @@
1
- module Stub
2
-
3
- class Matcher
4
-
5
- attr_accessor :value
6
-
7
- def initialize(matches)
8
- @matches = matches
9
- end
10
-
11
- def matches?(available_parameters)
12
- value = available_parameters.shift
13
- @value = value
14
- @matches
15
- end
16
-
17
- def mocha_inspect
18
- "matcher(#{@matches})"
19
- end
20
-
21
- def to_matcher
22
- self
23
- end
24
-
25
- end
26
-
27
- end
@@ -1,25 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- require 'mocha/parameter_matchers/yaml_equivalent'
4
- require 'mocha/inspect'
5
-
6
- class YamlEquivalentTest < Mocha::TestCase
7
-
8
- include Mocha::ParameterMatchers
9
-
10
- def test_should_match_parameter_matching_yaml_representation_of_object
11
- matcher = yaml_equivalent([1, 2, 3])
12
- assert matcher.matches?(["--- \n- 1\n- 2\n- 3\n"])
13
- end
14
-
15
- def test_should_not_match_parameter_matching_yaml_representation_of_object
16
- matcher = yaml_equivalent([1, 2, 3])
17
- assert !matcher.matches?(["--- \n- 4\n- 5\n"])
18
- end
19
-
20
- def test_should_describe_matcher
21
- matcher = yaml_equivalent([1, 2, 3])
22
- assert_equal "yaml_equivalent([1, 2, 3])", matcher.mocha_inspect
23
- end
24
-
25
- end