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
data/test/test_helper.rb DELETED
@@ -1,50 +0,0 @@
1
- unless defined?(STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS)
2
- STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS = Object.instance_methods + Object.private_instance_methods
3
- end
4
-
5
- $:.unshift File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
6
- $:.unshift File.expand_path(File.join(File.dirname(__FILE__)))
7
- $:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'unit'))
8
- $:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'unit', 'parameter_matchers'))
9
- $:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'acceptance'))
10
-
11
- require 'mocha/detection/mini_test'
12
-
13
- begin
14
- require 'minitest'
15
- rescue LoadError
16
- end
17
- begin
18
- require 'minitest/unit'
19
- rescue LoadError
20
- end
21
-
22
- module Mocha; end
23
-
24
- if (minitest_testcase = Mocha::Detection::MiniTest.testcase) && (ENV['MOCHA_RUN_INTEGRATION_TESTS'] != 'test-unit')
25
- begin
26
- require 'minitest/autorun'
27
- rescue LoadError
28
- MiniTest::Unit.autorun
29
- end
30
- class Mocha::TestCase < minitest_testcase
31
- def assert_nothing_raised(exception = StandardError)
32
- yield
33
- rescue exception => e
34
- flunk "Unexpected exception raised: #{e}"
35
- end
36
-
37
- alias_method :assert_not_nil, :refute_nil
38
- alias_method :assert_raise, :assert_raises
39
- alias_method :assert_not_same, :refute_same
40
- alias_method :assert_no_match, :refute_match
41
- end
42
- else
43
- require 'test/unit'
44
- class Mocha::TestCase < Test::Unit::TestCase
45
- def test_dummy
46
- # Some versions (?) of Test::Unit try to run this base class as a test case
47
- # and it fails because it has no test methods, so I'm adding a dummy test.
48
- end
49
- end
50
- end
data/test/test_runner.rb DELETED
@@ -1,58 +0,0 @@
1
- require 'assertions'
2
-
3
- require 'mocha/detection/mini_test'
4
-
5
- module TestRunner
6
- def run_as_test(&block)
7
- run_as_tests(:test_me => block)
8
- end
9
-
10
- def run_as_tests(methods = {})
11
- base_class = Mocha::TestCase
12
- test_class = Class.new(base_class) do
13
- include Assertions
14
-
15
- methods.each do |(method_name, proc)|
16
- define_method(method_name, proc)
17
- end
18
- end
19
-
20
- tests = methods.keys.select { |m| m.to_s[/^test/] }.map { |m| test_class.new(m) }
21
-
22
- if Mocha::Detection::MiniTest.testcase && (ENV['MOCHA_RUN_INTEGRATION_TESTS'] != 'test-unit')
23
- minitest_version = Gem::Version.new(Mocha::Detection::MiniTest.version)
24
- if Gem::Requirement.new('>= 5.0.0').satisfied_by?(minitest_version)
25
- require File.expand_path('../minitest_result', __FILE__)
26
- tests.each do |test|
27
- test.run
28
- end
29
- Minitest::Runnable.runnables.delete(test_class)
30
- test_result = MinitestResult.new(tests)
31
- elsif Gem::Requirement.new('> 0.0.0', '< 5.0.0').satisfied_by?(minitest_version)
32
- require File.expand_path('../mini_test_result', __FILE__)
33
- runner = MiniTest::Unit.new
34
- tests.each do |test|
35
- test.run(runner)
36
- end
37
- test_result = MiniTestResult.new(runner, tests)
38
- end
39
- else
40
- require File.expand_path('../test_unit_result', __FILE__)
41
- test_result = TestUnitResult.build_test_result
42
- tests.each do |test|
43
- test.run(test_result) {}
44
- end
45
- end
46
-
47
- test_result
48
- end
49
-
50
- def assert_passed(test_result)
51
- flunk "Test failed unexpectedly with message: #{test_result.failures}" if test_result.failure_count > 0
52
- flunk "Test failed unexpectedly with message: #{test_result.errors.map(&:exception)}" if test_result.error_count > 0
53
- end
54
-
55
- def assert_failed(test_result)
56
- flunk "Test passed unexpectedly" unless test_result.failure_count + test_result.error_count > 0
57
- end
58
- end
@@ -1,20 +0,0 @@
1
- require 'test/unit/testresult'
2
-
3
- class TestUnitResult
4
- def self.build_test_result
5
- test_result = Test::Unit::TestResult.new
6
- class << test_result
7
- attr_reader :failures, :errors
8
- def failure_messages
9
- failures.map { |failure| failure.message }
10
- end
11
- def failure_message_lines
12
- failure_messages.map { |message| message.split("\n") }.flatten
13
- end
14
- def error_messages
15
- errors.map { |error| error.message }
16
- end
17
- end
18
- test_result
19
- end
20
- end
@@ -1,134 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
- require 'method_definer'
3
- require 'mocha/mock'
4
- require 'mocha/any_instance_method'
5
-
6
- class AnyInstanceMethodTest < Mocha::TestCase
7
-
8
- include Mocha
9
-
10
- unless RUBY_V2_PLUS
11
- def test_should_hide_original_method
12
- klass = Class.new { def method_x; end }
13
- method = AnyInstanceMethod.new(klass, :method_x)
14
-
15
- method.hide_original_method
16
-
17
- assert_equal false, klass.method_defined?(:method_x)
18
- end
19
- end
20
-
21
- def test_should_not_raise_error_hiding_method_that_isnt_defined
22
- klass = Class.new
23
- method = AnyInstanceMethod.new(klass, :method_x)
24
-
25
- assert_nothing_raised { method.hide_original_method }
26
- end
27
-
28
- def test_should_define_a_new_method
29
- klass = Class.new { def method_x; end }
30
- method = AnyInstanceMethod.new(klass, :method_x)
31
- mocha = build_mock
32
- mocha.expects(:method_x).with(:param1, :param2).returns(:result)
33
- any_instance = Object.new
34
- any_instance.define_instance_method(:mocha) { mocha }
35
- klass.define_instance_method(:any_instance) { any_instance }
36
-
37
- method.hide_original_method
38
- method.define_new_method
39
-
40
- instance = klass.new
41
- result = instance.method_x(:param1, :param2)
42
-
43
- assert_equal :result, result
44
- assert mocha.__verified__?
45
- end
46
-
47
- def test_should_restore_original_method
48
- klass = Class.new { def method_x; :original_result; end }
49
- method = AnyInstanceMethod.new(klass, :method_x)
50
-
51
- method.hide_original_method
52
- method.define_new_method
53
- method.remove_new_method
54
- method.restore_original_method
55
-
56
- instance = klass.new
57
- assert instance.respond_to?(:method_x)
58
- assert_equal :original_result, instance.method_x
59
- end
60
-
61
- def test_should_not_restore_original_method_if_none_was_defined_in_first_place
62
- klass = Class.new { def method_x; :new_result; end }
63
- method = AnyInstanceMethod.new(klass, :method_x)
64
-
65
- method.restore_original_method
66
-
67
- instance = klass.new
68
- assert_equal :new_result, instance.method_x
69
- end
70
-
71
- def test_should_call_remove_new_method
72
- klass = Class.new { def method_x; end }
73
- any_instance = build_mock
74
- any_instance_mocha = build_mock
75
- any_instance.stubs(:mocha).returns(any_instance_mocha)
76
- klass.define_instance_method(:any_instance) { any_instance }
77
- method = AnyInstanceMethod.new(klass, :method_x)
78
- method.replace_instance_method(:restore_original_method) { }
79
- method.define_instance_accessor(:remove_called)
80
- method.replace_instance_method(:remove_new_method) { self.remove_called = true }
81
-
82
- method.unstub
83
-
84
- assert method.remove_called
85
- end
86
-
87
- def test_should_call_restore_original_method
88
- klass = Class.new { def method_x; end }
89
- any_instance = build_mock
90
- any_instance_mocha = build_mock
91
- any_instance.stubs(:mocha).returns(any_instance_mocha)
92
- klass.define_instance_method(:any_instance) { any_instance }
93
- method = AnyInstanceMethod.new(klass, :method_x)
94
- method.replace_instance_method(:remove_new_method) { }
95
- method.define_instance_accessor(:restore_called)
96
- method.replace_instance_method(:restore_original_method) { self.restore_called = true }
97
-
98
- method.unstub
99
-
100
- assert method.restore_called
101
- end
102
-
103
- def test_should_call_mock_unstub
104
- klass = Class.new { def method_x; end }
105
-
106
- method = AnyInstanceMethod.new(klass, :method_x)
107
-
108
- method.replace_instance_method(:remove_new_method) { }
109
- method.replace_instance_method(:restore_original_method) { }
110
- mocha = Class.new { class << self; attr_accessor :unstub_method; end; def self.unstub(method); self.unstub_method = method; end; }
111
- mocha.define_instance_method(:any_expectations?) { true }
112
- method.replace_instance_method(:mock) { mocha }
113
-
114
- method.unstub
115
-
116
- assert_equal mocha.unstub_method, :method_x
117
- end
118
-
119
- def test_should_return_any_instance_mocha_for_stubbee
120
- mocha = Object.new
121
- any_instance = Object.new
122
- any_instance.define_instance_method(:mocha) { mocha }
123
- stubbee = Class.new
124
- stubbee.define_instance_method(:any_instance) { any_instance }
125
- method = AnyInstanceMethod.new(stubbee, :method_name)
126
- assert_equal stubbee.any_instance.mocha, method.mock
127
- end
128
-
129
- private
130
-
131
- def build_mock
132
- Mock.new(nil)
133
- end
134
- end
@@ -1,16 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
- require 'mocha/inspect'
3
-
4
- class ArrayInspectTest < Mocha::TestCase
5
-
6
- def test_should_use_inspect
7
- array = [1, 2]
8
- assert_equal array.inspect, array.mocha_inspect
9
- end
10
-
11
- def test_should_use_mocha_inspect_on_each_item
12
- array = [1, 2, "chris"]
13
- assert_equal "[1, 2, 'chris']", array.mocha_inspect
14
- end
15
-
16
- end
@@ -1,19 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
- require 'mocha/backtrace_filter'
3
-
4
- class BacktraceFilterTest < Mocha::TestCase
5
-
6
- include Mocha
7
-
8
- def test_should_exclude_mocha_locations_from_backtrace
9
- mocha_lib = "/username/workspace/mocha_wibble/lib/"
10
- backtrace = [ mocha_lib + 'exclude/me/1', mocha_lib + 'exclude/me/2', '/keep/me', mocha_lib + 'exclude/me/3']
11
- filter = BacktraceFilter.new(mocha_lib)
12
- assert_equal ['/keep/me'], filter.filtered(backtrace)
13
- end
14
-
15
- def test_should_determine_path_for_mocha_lib_directory
16
- assert_match Regexp.new("/lib/$"), BacktraceFilter::LIB_DIRECTORY
17
- end
18
-
19
- end
@@ -1,56 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
- require 'mocha/cardinality'
3
-
4
- class CardinalityTest < Mocha::TestCase
5
-
6
- include Mocha
7
-
8
- def test_should_allow_invocations_if_invocation_count_has_not_yet_reached_maximum
9
- cardinality = Cardinality.new(2, 3)
10
- assert cardinality.invocations_allowed?(0)
11
- assert cardinality.invocations_allowed?(1)
12
- assert cardinality.invocations_allowed?(2)
13
- assert !cardinality.invocations_allowed?(3)
14
- end
15
-
16
- def test_should_be_satisfied_if_invocations_so_far_have_reached_required_threshold
17
- cardinality = Cardinality.new(2, 3)
18
- assert !cardinality.satisfied?(0)
19
- assert !cardinality.satisfied?(1)
20
- assert cardinality.satisfied?(2)
21
- assert cardinality.satisfied?(3)
22
- end
23
-
24
- def test_should_describe_cardinality
25
- assert_equal 'allowed any number of times', Cardinality.at_least(0).mocha_inspect
26
-
27
- assert_equal 'expected at most once', Cardinality.at_most(1).mocha_inspect
28
- assert_equal 'expected at most twice', Cardinality.at_most(2).mocha_inspect
29
- assert_equal 'expected at most 3 times', Cardinality.at_most(3).mocha_inspect
30
-
31
- assert_equal 'expected at least once', Cardinality.at_least(1).mocha_inspect
32
- assert_equal 'expected at least twice', Cardinality.at_least(2).mocha_inspect
33
- assert_equal 'expected at least 3 times', Cardinality.at_least(3).mocha_inspect
34
-
35
- assert_equal 'expected never', Cardinality.exactly(0).mocha_inspect
36
- assert_equal 'expected exactly once', Cardinality.exactly(1).mocha_inspect
37
- assert_equal 'expected exactly twice', Cardinality.exactly(2).mocha_inspect
38
- assert_equal 'expected exactly 3 times', Cardinality.times(3).mocha_inspect
39
-
40
- assert_equal 'expected between 2 and 4 times', Cardinality.times(2..4).mocha_inspect
41
- assert_equal 'expected between 1 and 3 times', Cardinality.times(1..3).mocha_inspect
42
- end
43
-
44
- def test_should_need_verifying
45
- assert Cardinality.exactly(2).needs_verifying?
46
- assert Cardinality.at_least(3).needs_verifying?
47
- assert Cardinality.at_most(2).needs_verifying?
48
- assert Cardinality.times(4).needs_verifying?
49
- assert Cardinality.times(2..4).needs_verifying?
50
- end
51
-
52
- def test_should_not_need_verifying
53
- assert_equal false, Cardinality.at_least(0).needs_verifying?
54
- end
55
-
56
- end
@@ -1,100 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
-
3
- require 'mocha/central'
4
- require 'mocha/mock'
5
- require 'method_definer'
6
-
7
- class CentralTest < Mocha::TestCase
8
-
9
- include Mocha
10
-
11
- def test_should_start_with_empty_stubba_methods
12
- stubba = Central.new
13
-
14
- assert_equal [], stubba.stubba_methods
15
- end
16
-
17
- def test_should_stub_method_if_not_already_stubbed
18
- method = build_mock
19
- method.expects(:stub)
20
- stubba = Central.new
21
-
22
- stubba.stub(method)
23
-
24
- assert method.__verified__?
25
- end
26
-
27
- def test_should_not_stub_method_if_already_stubbed
28
- method = build_mock
29
- method.stubs(:matches?).returns(true)
30
- method.expects(:stub).times(0)
31
- stubba = Central.new
32
- stubba.stubba_methods = [method]
33
-
34
- stubba.stub(method)
35
-
36
- assert method.__verified__?
37
- end
38
-
39
- def test_should_record_method
40
- method = build_mock
41
- method.expects(:stub)
42
- stubba = Central.new
43
-
44
- stubba.stub(method)
45
-
46
- assert_equal [method], stubba.stubba_methods
47
- end
48
-
49
- def test_should_unstub_specified_method
50
- stubba = Central.new
51
- method_1 = build_mock
52
- method_1.stubs(:matches?).returns(false)
53
- method_2 = build_mock
54
- method_2.stubs(:matches?).returns(true)
55
- method_2.expects(:unstub)
56
- stubba.stubba_methods = [method_1, method_2]
57
-
58
- stubba.unstub(method_2)
59
-
60
- assert_equal [method_1], stubba.stubba_methods
61
- assert method_2.__verified__?
62
- end
63
-
64
- def test_should_not_unstub_specified_method_if_not_already_stubbed
65
- stubba = Central.new
66
- method_1 = build_mock
67
- method_1.stubs(:matches?).returns(false)
68
- method_2 = build_mock
69
- method_2.expects(:unstub).never
70
- stubba.stubba_methods = [method_1]
71
-
72
- stubba.unstub(method_2)
73
-
74
- assert_equal [method_1], stubba.stubba_methods
75
- assert method_2.__verified__?
76
- end
77
-
78
- def test_should_unstub_all_methods
79
- stubba = Central.new
80
- method_1 = build_mock
81
- method_1.stubs(:matches?).returns(true)
82
- method_1.expects(:unstub)
83
- method_2 = build_mock
84
- method_2.stubs(:matches?).returns(true)
85
- method_2.expects(:unstub)
86
- stubba.stubba_methods = [method_1, method_2]
87
-
88
- stubba.unstub_all
89
-
90
- assert_equal [], stubba.stubba_methods
91
- assert method_1.__verified__?
92
- assert method_2.__verified__?
93
- end
94
-
95
- private
96
-
97
- def build_mock
98
- Mock.new(nil)
99
- end
100
- end
@@ -1,41 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
-
3
- require 'mocha/change_state_side_effect'
4
-
5
- class ChangeStateSideEffectTest < Mocha::TestCase
6
-
7
- include Mocha
8
-
9
- class FakeState
10
-
11
- attr_reader :active
12
- attr_writer :description
13
-
14
- def activate
15
- @active = true
16
- end
17
-
18
- def mocha_inspect
19
- @description
20
- end
21
-
22
- end
23
-
24
- def test_should_activate_the_given_state
25
- state = FakeState.new
26
- side_effect = ChangeStateSideEffect.new(state)
27
-
28
- side_effect.perform
29
-
30
- assert state.active
31
- end
32
-
33
- def test_should_describe_itself_in_terms_of_the_activated_state
34
- state = FakeState.new
35
- state.description = 'the-new-state'
36
- side_effect = ChangeStateSideEffect.new(state)
37
-
38
- assert_equal 'then the-new-state', side_effect.mocha_inspect
39
- end
40
-
41
- end