rspec 1.0.0 → 1.3.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 (456) hide show
  1. data/.document +7 -0
  2. data/History.rdoc +1546 -0
  3. data/{MIT-LICENSE → License.txt} +3 -1
  4. data/Manifest.txt +384 -0
  5. data/README.rdoc +41 -0
  6. data/Rakefile +94 -229
  7. data/Ruby1.9.rdoc +31 -0
  8. data/TODO.txt +17 -0
  9. data/Upgrade.rdoc +260 -0
  10. data/bin/autospec +4 -0
  11. data/bin/spec +5 -3
  12. data/cucumber.yml +5 -0
  13. data/examples/failing/README.txt +11 -0
  14. data/examples/failing/diffing_spec.rb +36 -0
  15. data/examples/failing/failing_implicit_docstrings_example.rb +17 -0
  16. data/examples/failing/failure_in_after.rb +10 -0
  17. data/examples/failing/failure_in_before.rb +10 -0
  18. data/examples/failing/mocking_example.rb +38 -0
  19. data/examples/failing/mocking_with_flexmock.rb +26 -0
  20. data/examples/failing/mocking_with_mocha.rb +25 -0
  21. data/examples/failing/mocking_with_rr.rb +27 -0
  22. data/examples/failing/partial_mock_example.rb +18 -0
  23. data/examples/failing/pending_example.rb +7 -0
  24. data/examples/failing/predicate_example.rb +32 -0
  25. data/examples/failing/raising_example.rb +47 -0
  26. data/examples/failing/syntax_error_example.rb +7 -0
  27. data/examples/failing/team_spec.rb +41 -0
  28. data/examples/failing/timeout_behaviour.rb +5 -0
  29. data/examples/{custom_formatter.rb → passing/custom_formatter.rb} +1 -1
  30. data/examples/passing/dynamic_spec.rb +7 -0
  31. data/examples/{file_accessor.rb → passing/file_accessor.rb} +18 -18
  32. data/examples/{file_accessor_spec.rb → passing/file_accessor_spec.rb} +37 -38
  33. data/examples/passing/filtered_formatter.rb +17 -0
  34. data/examples/passing/filtered_formatter_example.rb +31 -0
  35. data/examples/{greeter_spec.rb → passing/greeter_spec.rb} +1 -1
  36. data/examples/passing/helper_method_example.rb +12 -0
  37. data/examples/passing/implicit_docstrings_example.rb +16 -0
  38. data/examples/{io_processor.rb → passing/io_processor.rb} +8 -8
  39. data/examples/{io_processor_spec.rb → passing/io_processor_spec.rb} +2 -3
  40. data/examples/{mocking_example.rb → passing/mocking_example.rb} +0 -2
  41. data/examples/{multi_threaded_behaviour_runner.rb → passing/multi_threaded_example_group_runner.rb} +10 -9
  42. data/examples/passing/nested_classes_example.rb +35 -0
  43. data/examples/passing/options_example.rb +29 -0
  44. data/examples/passing/options_formatter.rb +20 -0
  45. data/examples/{partial_mock_example.rb → passing/partial_mock_example.rb} +2 -3
  46. data/examples/passing/pending_example.rb +18 -0
  47. data/examples/{predicate_example.rb → passing/predicate_example.rb} +1 -3
  48. data/examples/{shared_behaviours_example.rb → passing/shared_example_group_example.rb} +15 -11
  49. data/examples/passing/shared_stack_examples.rb +36 -0
  50. data/examples/passing/simple_matcher_example.rb +29 -0
  51. data/examples/{stack.rb → passing/stack.rb} +1 -1
  52. data/examples/{stack_spec.rb → passing/stack_spec.rb} +6 -40
  53. data/examples/passing/stack_spec_with_nested_example_groups.rb +66 -0
  54. data/examples/{stubbing_example.rb → passing/stubbing_example.rb} +1 -3
  55. data/examples/passing/yielding_example.rb +31 -0
  56. data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +85 -0
  57. data/features/before_and_after_blocks/before_and_after_blocks.feature +167 -0
  58. data/features/command_line/line_number_option.feature +56 -0
  59. data/features/command_line/line_number_option_with_example_with_no_name.feature +22 -0
  60. data/features/example_groups/define_example_attribute.feature +41 -0
  61. data/features/example_groups/example_group_with_should_methods.feature +29 -0
  62. data/features/example_groups/implicit_docstrings.feature +59 -0
  63. data/features/example_groups/nested_groups.feature +32 -0
  64. data/features/expectations/customized_message.feature +54 -0
  65. data/features/expectations/expect_change.feature +65 -0
  66. data/features/expectations/expect_error.feature +44 -0
  67. data/features/extensions/custom_example_group.feature +19 -0
  68. data/features/formatters/custom_formatter.feature +30 -0
  69. data/features/formatters/nested_formatter.feature +32 -0
  70. data/features/interop/cucumber_stubs_dont_leak.feature +11 -0
  71. data/features/interop/examples_and_tests_together.feature +84 -0
  72. data/features/interop/rspec_output.feature +25 -0
  73. data/features/interop/test_but_not_test_unit.feature +26 -0
  74. data/features/interop/test_case_with_should_methods.feature +46 -0
  75. data/features/load_paths/add_lib_to_load_path.feature +20 -0
  76. data/features/load_paths/add_spec_to_load_path.feature +20 -0
  77. data/features/matchers/define_diffable_matcher.feature +26 -0
  78. data/features/matchers/define_matcher.feature +179 -0
  79. data/features/matchers/define_matcher_outside_rspec.feature +38 -0
  80. data/features/matchers/define_matcher_with_fluent_interface.feature +48 -0
  81. data/features/matchers/define_wrapped_matcher.feature +56 -0
  82. data/features/matchers/match_unless_raises.feature +60 -0
  83. data/features/matchers/match_unless_raises_unexpected_error.feature +39 -0
  84. data/features/mock_framework_integration/use_flexmock.feature +27 -0
  85. data/features/mock_framework_integration/use_mocha.feature +27 -0
  86. data/features/mock_framework_integration/use_rr.feature +27 -0
  87. data/features/mocks/block_local_expectations.feature +62 -0
  88. data/features/mocks/mix_stubs_and_mocks.feature +22 -0
  89. data/features/mocks/stub_implementation.feature +26 -0
  90. data/features/pending/pending_examples.feature +81 -0
  91. data/features/runner/specify_line_number.feature +32 -0
  92. data/features/spec_helper/spec_helper.feature +25 -0
  93. data/features/step_definitions/running_rspec_steps.rb +52 -0
  94. data/features/step_definitions/stubbing_steps.rb +16 -0
  95. data/features/subject/explicit_subject.feature +31 -0
  96. data/features/subject/implicit_subject.feature +43 -0
  97. data/features/support/env.rb +83 -0
  98. data/features/support/matchers/smart_match.rb +31 -0
  99. data/geminstaller.yml +29 -0
  100. data/init.rb +9 -0
  101. data/lib/autotest/discover.rb +3 -0
  102. data/lib/autotest/rspec.rb +54 -0
  103. data/lib/spec/adapters/mock_frameworks/flexmock.rb +24 -0
  104. data/{plugins → lib/spec/adapters}/mock_frameworks/mocha.rb +8 -4
  105. data/lib/spec/adapters/mock_frameworks/rr.rb +22 -0
  106. data/lib/spec/adapters/mock_frameworks/rspec.rb +21 -0
  107. data/lib/spec/autorun.rb +3 -0
  108. data/lib/spec/deprecation.rb +41 -0
  109. data/lib/spec/dsl/main.rb +93 -0
  110. data/lib/spec/dsl.rb +1 -10
  111. data/lib/spec/example/args_and_options.rb +27 -0
  112. data/lib/spec/example/before_and_after_hooks.rb +93 -0
  113. data/lib/spec/example/errors.rb +25 -0
  114. data/lib/spec/example/example_group.rb +10 -0
  115. data/lib/spec/example/example_group_factory.rb +82 -0
  116. data/lib/spec/example/example_group_hierarchy.rb +53 -0
  117. data/lib/spec/example/example_group_methods.rb +287 -0
  118. data/lib/spec/example/example_group_proxy.rb +61 -0
  119. data/lib/spec/example/example_matcher.rb +43 -0
  120. data/lib/spec/example/example_methods.rb +152 -0
  121. data/lib/spec/example/example_proxy.rb +41 -0
  122. data/lib/spec/example/module_reopening_fix.rb +43 -0
  123. data/lib/spec/example/pending.rb +18 -0
  124. data/lib/spec/example/predicate_matchers.rb +46 -0
  125. data/lib/spec/example/shared_example_group.rb +59 -0
  126. data/lib/spec/example/subject.rb +114 -0
  127. data/lib/spec/example.rb +164 -0
  128. data/lib/spec/expectations/errors.rb +7 -1
  129. data/lib/spec/expectations/extensions/kernel.rb +52 -0
  130. data/lib/spec/expectations/extensions.rb +1 -2
  131. data/lib/spec/expectations/fail_with.rb +45 -0
  132. data/lib/spec/expectations/handler.rb +37 -30
  133. data/lib/spec/expectations.rb +2 -23
  134. data/lib/spec/extensions/instance_exec.rb +31 -0
  135. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  136. data/lib/spec/interop/test/unit/testcase.rb +56 -0
  137. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  138. data/lib/spec/interop/test/unit/testsuite_adapter.rb +36 -0
  139. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
  140. data/lib/spec/interop/test.rb +44 -0
  141. data/lib/spec/matchers/be.rb +183 -140
  142. data/lib/spec/matchers/be_close.rb +18 -23
  143. data/lib/spec/matchers/be_instance_of.rb +26 -0
  144. data/lib/spec/matchers/be_kind_of.rb +26 -0
  145. data/lib/spec/matchers/change.rb +72 -41
  146. data/lib/spec/matchers/compatibility.rb +14 -0
  147. data/lib/spec/matchers/dsl.rb +20 -0
  148. data/lib/spec/matchers/eql.rb +25 -26
  149. data/lib/spec/matchers/equal.rb +35 -25
  150. data/lib/spec/matchers/errors.rb +5 -0
  151. data/lib/spec/matchers/exist.rb +16 -0
  152. data/lib/spec/matchers/generated_descriptions.rb +36 -0
  153. data/lib/spec/matchers/has.rb +17 -26
  154. data/lib/spec/matchers/have.rb +36 -24
  155. data/lib/spec/matchers/include.rb +22 -48
  156. data/lib/spec/matchers/match.rb +11 -31
  157. data/lib/spec/matchers/match_array.rb +71 -0
  158. data/lib/spec/matchers/matcher.rb +132 -0
  159. data/lib/spec/matchers/method_missing.rb +9 -0
  160. data/lib/spec/matchers/operator_matcher.rb +55 -44
  161. data/lib/spec/matchers/pretty.rb +37 -0
  162. data/lib/spec/matchers/raise_exception.rb +131 -0
  163. data/lib/spec/matchers/respond_to.rb +35 -9
  164. data/lib/spec/matchers/satisfy.rb +2 -2
  165. data/lib/spec/matchers/simple_matcher.rb +134 -0
  166. data/lib/spec/matchers/throw_symbol.rb +56 -31
  167. data/lib/spec/matchers/wrap_expectation.rb +55 -0
  168. data/lib/spec/matchers.rb +104 -48
  169. data/lib/spec/mocks/argument_expectation.rb +28 -112
  170. data/lib/spec/mocks/argument_matchers.rb +237 -0
  171. data/lib/spec/mocks/error_generator.rb +20 -13
  172. data/lib/spec/mocks/errors.rb +1 -1
  173. data/lib/spec/mocks/example_methods.rb +69 -0
  174. data/lib/spec/mocks/extensions.rb +1 -0
  175. data/lib/spec/mocks/framework.rb +15 -0
  176. data/lib/spec/mocks/message_expectation.rb +206 -93
  177. data/lib/spec/mocks/methods.rb +66 -7
  178. data/lib/spec/mocks/mock.rb +53 -11
  179. data/lib/spec/mocks/proxy.rb +160 -55
  180. data/lib/spec/mocks/space.rb +2 -2
  181. data/lib/spec/mocks.rb +14 -23
  182. data/lib/spec/rake/spectask.rb +108 -53
  183. data/lib/spec/rake/verify_rcov.rb +4 -4
  184. data/lib/spec/ruby.rb +9 -0
  185. data/lib/spec/runner/backtrace_tweaker.rb +45 -23
  186. data/lib/spec/runner/class_and_arguments_parser.rb +14 -0
  187. data/lib/spec/runner/command_line.rb +7 -14
  188. data/lib/spec/runner/configuration.rb +202 -0
  189. data/lib/spec/runner/differs/default.rb +93 -0
  190. data/lib/spec/runner/differs/load-diff-lcs.rb +12 -0
  191. data/lib/spec/runner/drb_command_line.rb +18 -7
  192. data/lib/spec/runner/example_group_runner.rb +58 -0
  193. data/lib/spec/runner/extensions/kernel.rb +5 -46
  194. data/lib/spec/runner/formatter/base_formatter.rb +97 -26
  195. data/lib/spec/runner/formatter/base_text_formatter.rb +79 -39
  196. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +25 -0
  197. data/lib/spec/runner/formatter/failing_examples_formatter.rb +6 -8
  198. data/lib/spec/runner/formatter/html_formatter.rb +101 -75
  199. data/lib/spec/runner/formatter/nested_text_formatter.rb +50 -0
  200. data/lib/spec/runner/formatter/no_op_method_missing.rb +21 -0
  201. data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
  202. data/lib/spec/runner/formatter/progress_bar_formatter.rb +11 -8
  203. data/lib/spec/runner/formatter/silent_formatter.rb +10 -0
  204. data/lib/spec/runner/formatter/snippet_extractor.rb +2 -2
  205. data/lib/spec/runner/formatter/specdoc_formatter.rb +20 -15
  206. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  207. data/lib/spec/runner/heckle_runner.rb +56 -56
  208. data/lib/spec/runner/{heckle_runner_win.rb → heckle_runner_unsupported.rb} +10 -10
  209. data/lib/spec/runner/line_number_query.rb +78 -0
  210. data/lib/spec/runner/option_parser.rb +147 -148
  211. data/lib/spec/runner/options.rb +343 -95
  212. data/lib/spec/runner/reporter.rb +117 -60
  213. data/lib/spec/runner.rb +39 -138
  214. data/lib/spec/stubs/cucumber.rb +5 -0
  215. data/lib/spec/test/unit.rb +10 -0
  216. data/lib/spec/version.rb +14 -22
  217. data/lib/spec.rb +5 -10
  218. data/resources/helpers/cmdline.rb +8 -0
  219. data/resources/rake/examples.rake +7 -0
  220. data/resources/rake/examples_with_rcov.rake +9 -0
  221. data/resources/rake/failing_examples_with_html.rake +9 -0
  222. data/resources/rake/verify_rcov.rake +7 -0
  223. data/spec/README.jruby +15 -0
  224. data/spec/autotest/autotest_helper.rb +8 -0
  225. data/spec/autotest/autotest_matchers.rb +38 -0
  226. data/spec/autotest/discover_spec.rb +8 -0
  227. data/spec/autotest/failed_results_re_spec.rb +31 -0
  228. data/spec/autotest/rspec_spec.rb +126 -0
  229. data/spec/ruby_forker.rb +13 -0
  230. data/spec/spec/dsl/main_spec.rb +103 -0
  231. data/spec/spec/example/example_group_class_definition_spec.rb +51 -0
  232. data/spec/spec/example/example_group_factory_spec.rb +180 -0
  233. data/spec/spec/example/example_group_methods_spec.rb +778 -0
  234. data/spec/spec/example/example_group_proxy_spec.rb +107 -0
  235. data/spec/spec/example/example_group_spec.rb +632 -0
  236. data/spec/spec/example/example_matcher_spec.rb +85 -0
  237. data/spec/spec/example/example_methods_spec.rb +162 -0
  238. data/spec/spec/example/example_proxy_spec.rb +57 -0
  239. data/spec/spec/example/helper_method_spec.rb +24 -0
  240. data/spec/spec/{dsl/behaviour_eval_spec.rb → example/nested_example_group_spec.rb} +25 -3
  241. data/spec/spec/example/pending_module_spec.rb +58 -0
  242. data/spec/spec/example/predicate_matcher_spec.rb +41 -0
  243. data/spec/spec/example/shared_example_group_spec.rb +257 -0
  244. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  245. data/spec/spec/example/subject_spec.rb +110 -0
  246. data/spec/spec/expectations/differs/default_spec.rb +100 -13
  247. data/spec/spec/expectations/extensions/{object_spec.rb → kernel_spec.rb} +13 -14
  248. data/spec/spec/expectations/fail_with_spec.rb +42 -17
  249. data/spec/spec/expectations/handler_spec.rb +206 -0
  250. data/spec/spec/expectations/wrap_expectation_spec.rb +31 -0
  251. data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
  252. data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
  253. data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
  254. data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
  255. data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
  256. data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
  257. data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
  258. data/spec/spec/interop/test/unit/resources/test_case_with_various_names.rb +22 -0
  259. data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
  260. data/spec/spec/interop/test/unit/spec_spec.rb +48 -0
  261. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +18 -0
  262. data/spec/spec/interop/test/unit/testcase_spec.rb +50 -0
  263. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  264. data/spec/spec/matchers/be_close_spec.rb +32 -21
  265. data/spec/spec/matchers/be_instance_of_spec.rb +36 -0
  266. data/spec/spec/matchers/be_kind_of_spec.rb +33 -0
  267. data/spec/spec/matchers/be_spec.rb +261 -10
  268. data/spec/spec/matchers/change_spec.rb +178 -61
  269. data/spec/spec/matchers/compatibility_spec.rb +28 -0
  270. data/spec/spec/matchers/description_generation_spec.rb +47 -46
  271. data/spec/spec/matchers/dsl_spec.rb +34 -0
  272. data/spec/spec/matchers/eql_spec.rb +14 -9
  273. data/spec/spec/matchers/equal_spec.rb +43 -14
  274. data/spec/spec/matchers/exist_spec.rb +41 -24
  275. data/spec/spec/matchers/has_spec.rb +154 -1
  276. data/spec/spec/matchers/have_spec.rb +311 -189
  277. data/spec/spec/matchers/include_spec.rb +45 -2
  278. data/spec/spec/matchers/match_array_spec.rb +115 -0
  279. data/spec/spec/matchers/match_spec.rb +25 -5
  280. data/spec/spec/matchers/matcher_spec.rb +289 -0
  281. data/spec/spec/matchers/matchers_spec.rb +2 -0
  282. data/spec/spec/matchers/operator_matcher_spec.rb +48 -15
  283. data/spec/spec/matchers/raise_exception_spec.rb +345 -0
  284. data/spec/spec/matchers/respond_to_spec.rb +78 -16
  285. data/spec/spec/matchers/satisfy_spec.rb +1 -1
  286. data/spec/spec/matchers/simple_matcher_spec.rb +100 -0
  287. data/spec/spec/matchers/throw_symbol_spec.rb +111 -41
  288. data/spec/spec/mocks/and_yield_spec.rb +117 -0
  289. data/spec/spec/mocks/any_number_of_times_spec.rb +9 -2
  290. data/spec/spec/mocks/argument_expectation_spec.rb +19 -15
  291. data/spec/spec/mocks/argument_matchers_spec.rb +19 -0
  292. data/spec/spec/mocks/at_least_spec.rb +2 -2
  293. data/spec/spec/mocks/at_most_spec.rb +3 -3
  294. data/spec/spec/mocks/bug_report_10260_spec.rb +1 -1
  295. data/spec/spec/mocks/bug_report_10263_spec.rb +27 -0
  296. data/spec/spec/mocks/bug_report_11545_spec.rb +32 -0
  297. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  298. data/spec/spec/mocks/bug_report_496_spec.rb +17 -0
  299. data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
  300. data/spec/spec/mocks/bug_report_7611_spec.rb +2 -2
  301. data/spec/spec/mocks/bug_report_7805_spec.rb +2 -2
  302. data/spec/spec/mocks/bug_report_8165_spec.rb +4 -4
  303. data/spec/spec/mocks/bug_report_8302_spec.rb +2 -2
  304. data/spec/spec/mocks/bug_report_830_spec.rb +21 -0
  305. data/spec/spec/mocks/double_spec.rb +12 -0
  306. data/spec/spec/mocks/failing_argument_matchers_spec.rb +95 -0
  307. data/spec/spec/mocks/hash_including_matcher_spec.rb +90 -0
  308. data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
  309. data/spec/spec/mocks/mock_ordering_spec.rb +15 -5
  310. data/spec/spec/mocks/mock_space_spec.rb +1 -1
  311. data/spec/spec/mocks/mock_spec.rb +346 -129
  312. data/spec/spec/mocks/multiple_return_value_spec.rb +9 -9
  313. data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
  314. data/spec/spec/mocks/null_object_mock_spec.rb +15 -1
  315. data/spec/spec/mocks/once_counts_spec.rb +2 -2
  316. data/spec/spec/mocks/options_hash_spec.rb +19 -17
  317. data/spec/spec/mocks/partial_mock_spec.rb +124 -12
  318. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +2 -2
  319. data/spec/spec/mocks/passing_argument_matchers_spec.rb +145 -0
  320. data/spec/spec/mocks/precise_counts_spec.rb +2 -2
  321. data/spec/spec/mocks/record_messages_spec.rb +2 -2
  322. data/spec/spec/mocks/stub_chain_spec.rb +42 -0
  323. data/spec/spec/mocks/stub_implementation_spec.rb +31 -0
  324. data/spec/spec/mocks/stub_spec.rb +147 -103
  325. data/spec/spec/mocks/stubbed_message_expectations_spec.rb +26 -0
  326. data/spec/spec/mocks/twice_counts_spec.rb +2 -2
  327. data/spec/spec/mocks/unstub_spec.rb +127 -0
  328. data/spec/spec/package/bin_spec_spec.rb +11 -7
  329. data/spec/spec/rake/spectask_spec.rb +150 -0
  330. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  331. data/spec/spec/runner/command_line_spec.rb +158 -29
  332. data/spec/spec/runner/configuration_spec.rb +320 -0
  333. data/spec/spec/runner/drb_command_line_spec.rb +137 -72
  334. data/spec/spec/runner/empty_file.txt +0 -0
  335. data/spec/spec/runner/example_group_runner_spec.rb +26 -0
  336. data/spec/spec/runner/examples.txt +2 -0
  337. data/spec/spec/runner/failed.txt +3 -0
  338. data/spec/spec/runner/formatter/base_formatter_spec.rb +30 -0
  339. data/spec/spec/runner/formatter/base_text_formatter_spec.rb +113 -0
  340. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
  341. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +17 -12
  342. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +377 -0
  343. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +377 -0
  344. data/spec/spec/runner/formatter/html_formatted-1.8.7.html +377 -0
  345. data/spec/spec/runner/formatter/html_formatted-1.9.1.html +377 -0
  346. data/spec/spec/runner/formatter/html_formatter_spec.rb +112 -52
  347. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +329 -0
  348. data/spec/spec/runner/formatter/profile_formatter_spec.rb +70 -0
  349. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +87 -16
  350. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
  351. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +153 -50
  352. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6-jruby.html +371 -0
  353. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +371 -0
  354. data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +371 -0
  355. data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +371 -0
  356. data/spec/spec/runner/formatter/text_mate_formatter_spec.rb +106 -0
  357. data/spec/spec/runner/heckle_runner_spec.rb +32 -17
  358. data/spec/spec/runner/heckler_spec.rb +17 -11
  359. data/spec/spec/runner/line_number_query/line_number_query_fixture.rb +70 -0
  360. data/spec/spec/runner/line_number_query_spec.rb +129 -0
  361. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +27 -21
  362. data/spec/spec/runner/option_parser_spec.rb +367 -164
  363. data/spec/spec/runner/options_spec.rb +506 -94
  364. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  365. data/spec/spec/runner/output_one_time_fixture_runner.rb +7 -0
  366. data/spec/spec/runner/output_one_time_spec.rb +15 -0
  367. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +94 -27
  368. data/spec/spec/runner/reporter_spec.rb +212 -121
  369. data/spec/spec/runner/resources/a_bar.rb +0 -0
  370. data/spec/spec/runner/resources/a_foo.rb +0 -0
  371. data/spec/spec/runner/resources/a_spec.rb +1 -0
  372. data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
  373. data/spec/spec/runner/resources/utf8_encoded.rb +8 -0
  374. data/spec/spec/runner/spec.opts +2 -0
  375. data/spec/spec/runner/spec_drb.opts +2 -0
  376. data/spec/spec/runner/spec_spaced.opts +2 -0
  377. data/spec/spec/runner_spec.rb +13 -0
  378. data/spec/spec.opts +6 -0
  379. data/spec/spec_helper.rb +87 -45
  380. data/spec/support/macros.rb +29 -0
  381. data/spec/{spec → support}/spec_classes.rb +26 -4
  382. metadata +461 -141
  383. data/CHANGES +0 -748
  384. data/EXAMPLES.rd +0 -108
  385. data/README +0 -70
  386. data/UPGRADE +0 -31
  387. data/bin/spec_translator +0 -8
  388. data/examples/auto_spec_description_example.rb +0 -19
  389. data/examples/before_and_after_example.rb +0 -39
  390. data/examples/behave_as_example.rb +0 -45
  391. data/examples/dynamic_spec.rb +0 -9
  392. data/examples/helper_method_example.rb +0 -11
  393. data/examples/legacy_spec.rb +0 -10
  394. data/examples/not_yet_implemented_spec.rb +0 -12
  395. data/examples/priority.txt +0 -1
  396. data/examples/spec_helper.rb +0 -1
  397. data/examples/test_case_adapter_example.rb +0 -26
  398. data/examples/test_case_spec.rb +0 -65
  399. data/lib/spec/dsl/behaviour.rb +0 -204
  400. data/lib/spec/dsl/behaviour_callbacks.rb +0 -77
  401. data/lib/spec/dsl/behaviour_eval.rb +0 -177
  402. data/lib/spec/dsl/behaviour_factory.rb +0 -42
  403. data/lib/spec/dsl/composite_proc_builder.rb +0 -28
  404. data/lib/spec/dsl/configuration.rb +0 -119
  405. data/lib/spec/dsl/description.rb +0 -46
  406. data/lib/spec/dsl/example.rb +0 -127
  407. data/lib/spec/dsl/example_matcher.rb +0 -28
  408. data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
  409. data/lib/spec/expectations/differs/default.rb +0 -61
  410. data/lib/spec/expectations/extensions/object.rb +0 -66
  411. data/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
  412. data/lib/spec/extensions/object.rb +0 -6
  413. data/lib/spec/extensions.rb +0 -1
  414. data/lib/spec/matchers/raise_error.rb +0 -100
  415. data/lib/spec/mocks/argument_constraint_matchers.rb +0 -12
  416. data/lib/spec/mocks/spec_methods.rb +0 -30
  417. data/lib/spec/runner/behaviour_runner.rb +0 -102
  418. data/lib/spec/runner/extensions/object.rb +0 -32
  419. data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -25
  420. data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
  421. data/lib/spec/runner/formatter.rb +0 -9
  422. data/lib/spec/runner/spec_parser.rb +0 -50
  423. data/lib/spec/test_case_adapter.rb +0 -10
  424. data/lib/spec/translator.rb +0 -106
  425. data/plugins/mock_frameworks/flexmock.rb +0 -27
  426. data/plugins/mock_frameworks/rspec.rb +0 -18
  427. data/spec/spec/dsl/behaviour_factory_spec.rb +0 -30
  428. data/spec/spec/dsl/behaviour_spec.rb +0 -604
  429. data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -57
  430. data/spec/spec/dsl/configuration_spec.rb +0 -50
  431. data/spec/spec/dsl/description_spec.rb +0 -81
  432. data/spec/spec/dsl/example_class_spec.rb +0 -24
  433. data/spec/spec/dsl/example_instance_spec.rb +0 -162
  434. data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
  435. data/spec/spec/dsl/predicate_matcher_spec.rb +0 -21
  436. data/spec/spec/dsl/shared_behaviour_spec.rb +0 -208
  437. data/spec/spec/matchers/handler_spec.rb +0 -88
  438. data/spec/spec/matchers/matcher_methods_spec.rb +0 -78
  439. data/spec/spec/matchers/raise_error_spec.rb +0 -147
  440. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +0 -73
  441. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +0 -92
  442. data/spec/spec/runner/behaviour_runner_spec.rb +0 -118
  443. data/spec/spec/runner/context_matching_spec.rb +0 -27
  444. data/spec/spec/runner/execution_context_spec.rb +0 -31
  445. data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
  446. data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -27
  447. data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -21
  448. data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +0 -36
  449. data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +0 -19
  450. data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +0 -46
  451. data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +0 -21
  452. data/spec/spec/runner/object_ext_spec.rb +0 -11
  453. data/spec/spec/runner/spec_matcher_spec.rb +0 -102
  454. data/spec/spec/runner/spec_parser_spec.rb +0 -93
  455. data/spec/spec/translator_spec.rb +0 -216
  456. /data/examples/{custom_expectation_matchers.rb → passing/custom_matchers.rb} +0 -0
@@ -1,31 +1,56 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  module Spec
4
4
  module Mocks
5
- describe "a Mock expectation" do
6
-
7
- before do
5
+ describe Mock do
6
+ treats_method_missing_as_private :subject => Mock.new, :noop => false
7
+
8
+ before(:each) do
8
9
  @mock = mock("test mock")
9
10
  end
10
-
11
- after do
11
+
12
+ after(:each) do
12
13
  @mock.rspec_reset
13
14
  end
14
-
15
+
16
+ describe "deprecated #stub_everything method" do
17
+ before(:each) do
18
+ Kernel.stub!(:warn)
19
+ end
20
+
21
+ it "creates a mock that behaves as a null object" do
22
+ stub_everything.should be_null_object
23
+ end
24
+
25
+ it "provides deprecation warning" do
26
+ Kernel.should_receive(:warn).with(/DEPRECATION: stub_everything.* is deprecated./)
27
+ stub_everything
28
+ end
29
+ end
30
+
15
31
  it "should report line number of expectation of unreceived message" do
16
- @mock.should_receive(:wont_happen).with("x", 3)
17
- #NOTE - this test is quite ticklish because it specifies that
18
- #the above statement appears on line 12 of this file.
32
+ expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
33
+ begin
34
+ @mock.rspec_verify
35
+ violated
36
+ rescue MockExpectationError => e
37
+ # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line
38
+ e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
39
+ end
40
+ end
19
41
 
42
+ it "should report line number of expectation of unreceived message after #should_receive after similar stub" do
43
+ @mock.stub!(:wont_happen)
44
+ expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
20
45
  begin
21
46
  @mock.rspec_verify
22
47
  violated
23
48
  rescue MockExpectationError => e
24
- e.backtrace[0].should match(/mock_spec\.rb:16/)
49
+ # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line
50
+ e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
25
51
  end
26
-
27
52
  end
28
-
53
+
29
54
  it "should pass when not receiving message specified as not to be received" do
30
55
  @mock.should_not_receive(:not_expected)
31
56
  @mock.rspec_verify
@@ -40,24 +65,18 @@ module Spec
40
65
 
41
66
  it "should fail when receiving message specified as not to be received" do
42
67
  @mock.should_not_receive(:not_expected)
43
- @mock.not_expected
44
- begin
45
- @mock.rspec_verify
68
+ lambda {
69
+ @mock.not_expected
46
70
  violated
47
- rescue MockExpectationError => e
48
- e.message.should == "Mock 'test mock' expected :not_expected with (any args) 0 times, but received it once"
49
- end
71
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no args) 0 times, but received it once")
50
72
  end
51
73
 
52
74
  it "should fail when receiving message specified as not to be received with args" do
53
75
  @mock.should_not_receive(:not_expected).with("unexpected text")
54
- @mock.not_expected("unexpected text")
55
- begin
56
- @mock.rspec_verify
76
+ lambda {
77
+ @mock.not_expected("unexpected text")
57
78
  violated
58
- rescue MockExpectationError => e
59
- e.message.should == "Mock 'test mock' expected :not_expected with (\"unexpected text\") 0 times, but received it once"
60
- end
79
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (\"unexpected text\") 0 times, but received it once")
61
80
  end
62
81
 
63
82
  it "should pass when receiving message specified as not to be received with wrong args" do
@@ -84,25 +103,39 @@ module Spec
84
103
  @mock.rspec_verify
85
104
  end
86
105
 
87
- it "should raise exception if args dont match when method called" do
106
+ it "should raise exception if args don't match when method called" do
88
107
  @mock.should_receive(:something).with("a","b","c").and_return("booh")
89
- begin
108
+ lambda {
90
109
  @mock.something("a","d","c")
91
110
  violated
92
- rescue MockExpectationError => e
93
- e.message.should == "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")"
94
- end
111
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: (\"a\", \"d\", \"c\")")
95
112
  end
96
-
113
+
114
+ it "should raise exception if args don't match when method called even when the method is stubbed" do
115
+ @mock.stub!(:something)
116
+ @mock.should_receive(:something).with("a","b","c")
117
+ lambda {
118
+ @mock.something("a","d","c")
119
+ @mock.rspec_verify
120
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: ([\"a\", \"d\", \"c\"])")
121
+ end
122
+
123
+ it "should raise exception if args don't match when method called even when using null_object" do
124
+ @mock = mock("test mock", :null_object => true)
125
+ @mock.should_receive(:something).with("a","b","c")
126
+ lambda {
127
+ @mock.something("a","d","c")
128
+ @mock.rspec_verify
129
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: ([\"a\", \"d\", \"c\"])")
130
+ end
131
+
97
132
  it "should fail if unexpected method called" do
98
- begin
133
+ lambda {
99
134
  @mock.something("a","b","c")
100
135
  violated
101
- rescue MockExpectationError => e
102
- e.message.should == "Mock 'test mock' received unexpected message :something with (\"a\", \"b\", \"c\")"
103
- end
136
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received unexpected message :something with (\"a\", \"b\", \"c\")")
104
137
  end
105
-
138
+
106
139
  it "should use block for expectation if provided" do
107
140
  @mock.should_receive(:something) do | a, b |
108
141
  a.should == "a"
@@ -112,189 +145,248 @@ module Spec
112
145
  @mock.something("a", "b").should == "booh"
113
146
  @mock.rspec_verify
114
147
  end
115
-
148
+
116
149
  it "should fail if expectation block fails" do
117
150
  @mock.should_receive(:something) {| bool | bool.should be_true}
118
- begin
151
+ lambda {
119
152
  @mock.something false
120
- rescue MockExpectationError => e
121
- e.message.should match(/Mock 'test mock' received :something but passed block failed with: expected true, got false/)
122
- end
153
+ }.should raise_error(MockExpectationError, /Mock "test mock" received :something but passed block failed with: expected false to be true/)
123
154
  end
124
-
125
- it "should fail when method defined as never is received" do
155
+
156
+ it "should fail right away when method defined as never is received" do
126
157
  @mock.should_receive(:not_expected).never
127
- begin
158
+ lambda {
128
159
  @mock.not_expected
129
- rescue MockExpectationError => e
130
- e.message.should == "Mock 'test mock' expected :not_expected 0 times, but received it 1 times"
131
- end
160
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no args) 0 times, but received it once")
132
161
  end
133
-
162
+
163
+ it "should eventually fail when method defined as never is received" do
164
+ @mock.should_receive(:not_expected).never
165
+ lambda {
166
+ @mock.not_expected
167
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no args) 0 times, but received it once")
168
+ end
169
+
134
170
  it "should raise when told to" do
135
171
  @mock.should_receive(:something).and_raise(RuntimeError)
136
172
  lambda do
137
173
  @mock.something
138
174
  end.should raise_error(RuntimeError)
139
175
  end
140
-
176
+
141
177
  it "should raise passed an Exception instance" do
142
178
  error = RuntimeError.new("error message")
143
179
  @mock.should_receive(:something).and_raise(error)
144
- begin
180
+ lambda {
145
181
  @mock.something
146
- rescue RuntimeError => e
147
- e.message.should eql("error message")
148
- end
182
+ }.should raise_error(RuntimeError, "error message")
149
183
  end
150
184
 
151
185
  it "should raise RuntimeError with passed message" do
152
186
  @mock.should_receive(:something).and_raise("error message")
153
- begin
187
+ lambda {
154
188
  @mock.something
155
- rescue RuntimeError => e
156
- e.message.should eql("error message")
157
- end
189
+ }.should raise_error(RuntimeError, "error message")
158
190
  end
159
-
191
+
160
192
  it "should not raise when told to if args dont match" do
161
193
  @mock.should_receive(:something).with(2).and_raise(RuntimeError)
162
- lambda do
194
+ lambda {
163
195
  @mock.something 1
164
- end.should raise_error(MockExpectationError)
196
+ }.should raise_error(MockExpectationError)
165
197
  end
166
-
198
+
167
199
  it "should throw when told to" do
168
200
  @mock.should_receive(:something).and_throw(:blech)
169
- lambda do
201
+ lambda {
170
202
  @mock.something
171
- end.should throw_symbol(:blech)
203
+ }.should throw_symbol(:blech)
172
204
  end
173
205
 
174
206
  it "should raise when explicit return and block constrained" do
175
- lambda do
207
+ lambda {
176
208
  @mock.should_receive(:fruit) do |colour|
177
209
  :strawberry
178
210
  end.and_return :apple
179
- end.should raise_error(AmbiguousReturnError)
211
+ }.should raise_error(AmbiguousReturnError)
180
212
  end
181
-
213
+
182
214
  it "should ignore args on any args" do
183
- @mock.should_receive(:something).at_least(:once).with(:any_args)
215
+ @mock.should_receive(:something).at_least(:once).with(any_args)
184
216
  @mock.something
185
217
  @mock.something 1
186
218
  @mock.something "a", 2
187
219
  @mock.something [], {}, "joe", 7
188
220
  @mock.rspec_verify
189
221
  end
190
-
222
+
191
223
  it "should fail on no args if any args received" do
192
- @mock.should_receive(:something).with(:no_args)
193
- begin
224
+ @mock.should_receive(:something).with(no_args())
225
+ lambda {
194
226
  @mock.something 1
195
- rescue MockExpectationError => e
196
- e.message.should == "Mock 'test mock' expected :something with (no args) but received it with (1)"
197
- end
227
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (no args)\n got: (1)")
198
228
  end
199
-
229
+
200
230
  it "should fail when args are expected but none are received" do
201
231
  @mock.should_receive(:something).with(1)
202
- begin
232
+ lambda {
203
233
  @mock.something
204
- rescue MockExpectationError => e
205
- e.message.should == "Mock 'test mock' expected :something with (1) but received it with (no args)"
206
- end
234
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (1)\n got: (no args)")
235
+ end
236
+
237
+ it "should return value from block by default" do
238
+ @mock.stub!(:method_that_yields).and_yield
239
+ @mock.method_that_yields { :returned_obj }.should == :returned_obj
240
+ @mock.rspec_verify
207
241
  end
208
242
 
209
243
  it "should yield 0 args to blocks that take a variable number of arguments" do
210
- @mock.should_receive(:yield_back).with(:no_args).once.and_yield
244
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield
211
245
  a = nil
212
- @mock.yield_back {|*a|}
246
+ @mock.yield_back {|*x| a = x}
213
247
  a.should == []
214
248
  @mock.rspec_verify
215
249
  end
216
250
 
251
+ it "should yield 0 args multiple times to blocks that take a variable number of arguments" do
252
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield.
253
+ and_yield
254
+ a = nil
255
+ b = []
256
+ @mock.yield_back {|*a| b << a}
257
+ b.should == [ [], [] ]
258
+ @mock.rspec_verify
259
+ end
260
+
217
261
  it "should yield one arg to blocks that take a variable number of arguments" do
218
- @mock.should_receive(:yield_back).with(:no_args).once.and_yield(99)
262
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
219
263
  a = nil
220
- @mock.yield_back {|*a|}
264
+ @mock.yield_back {|*x| a = x}
221
265
  a.should == [99]
222
266
  @mock.rspec_verify
223
267
  end
224
268
 
269
+ it "should yield one arg 3 times consecutively to blocks that take a variable number of arguments" do
270
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99).
271
+ and_yield(43).
272
+ and_yield("something fruity")
273
+ a = nil
274
+ b = []
275
+ @mock.yield_back {|*a| b << a}
276
+ b.should == [[99], [43], ["something fruity"]]
277
+ @mock.rspec_verify
278
+ end
279
+
225
280
  it "should yield many args to blocks that take a variable number of arguments" do
226
- @mock.should_receive(:yield_back).with(:no_args).once.and_yield(99, 27, "go")
281
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99, 27, "go")
227
282
  a = nil
228
- @mock.yield_back {|*a|}
283
+ @mock.yield_back {|*x| a = x}
229
284
  a.should == [99, 27, "go"]
230
285
  @mock.rspec_verify
231
286
  end
232
287
 
288
+ it "should yield many args 3 times consecutively to blocks that take a variable number of arguments" do
289
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99, :green, "go").
290
+ and_yield("wait", :amber).
291
+ and_yield("stop", 12, :red)
292
+ a = nil
293
+ b = []
294
+ @mock.yield_back {|*a| b << a}
295
+ b.should == [[99, :green, "go"], ["wait", :amber], ["stop", 12, :red]]
296
+ @mock.rspec_verify
297
+ end
298
+
233
299
  it "should yield single value" do
234
- @mock.should_receive(:yield_back).with(:no_args).once.and_yield(99)
300
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
235
301
  a = nil
236
- @mock.yield_back {|a|}
302
+ @mock.yield_back {|x| a = x}
237
303
  a.should == 99
238
304
  @mock.rspec_verify
239
305
  end
240
306
 
307
+ it "should yield single value 3 times consecutively" do
308
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99).
309
+ and_yield(43).
310
+ and_yield("something fruity")
311
+ a = nil
312
+ b = []
313
+ @mock.yield_back {|a| b << a}
314
+ b.should == [99, 43, "something fruity"]
315
+ @mock.rspec_verify
316
+ end
317
+
241
318
  it "should yield two values" do
242
- @mock.should_receive(:yield_back).with(:no_args).once.and_yield('wha', 'zup')
319
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
243
320
  a, b = nil
244
- @mock.yield_back {|a,b|}
321
+ @mock.yield_back {|x,y| a=x; b=y}
245
322
  a.should == 'wha'
246
323
  b.should == 'zup'
247
324
  @mock.rspec_verify
248
325
  end
249
326
 
327
+ it "should yield two values 3 times consecutively" do
328
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup').
329
+ and_yield('not', 'down').
330
+ and_yield(14, 65)
331
+ a, b = nil
332
+ c = []
333
+ @mock.yield_back {|a,b| c << [a, b]}
334
+ c.should == [['wha', 'zup'], ['not', 'down'], [14, 65]]
335
+ @mock.rspec_verify
336
+ end
337
+
250
338
  it "should fail when calling yielding method with wrong arity" do
251
- @mock.should_receive(:yield_back).with(:no_args).once.and_yield('wha', 'zup')
252
- begin
339
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
340
+ lambda {
253
341
  @mock.yield_back {|a|}
254
- rescue MockExpectationError => e
255
- e.message.should == "Mock 'test mock' yielded |\"wha\", \"zup\"| to block with arity of 1"
256
- end
342
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" yielded |\"wha\", \"zup\"| to block with arity of 1")
343
+ end
344
+
345
+ it "should fail when calling yielding method consecutively with wrong arity" do
346
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup').
347
+ and_yield('down').
348
+ and_yield(14, 65)
349
+ lambda {
350
+ a, b = nil
351
+ c = []
352
+ @mock.yield_back {|a,b| c << [a, b]}
353
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" yielded |\"down\"| to block with arity of 2")
257
354
  end
258
355
 
259
356
  it "should fail when calling yielding method without block" do
260
- @mock.should_receive(:yield_back).with(:no_args).once.and_yield('wha', 'zup')
261
- begin
357
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
358
+ lambda {
262
359
  @mock.yield_back
263
- rescue MockExpectationError => e
264
- e.message.should == "Mock 'test mock' asked to yield |\"wha\", \"zup\"| but no block was passed"
265
- end
360
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" asked to yield |[\"wha\", \"zup\"]| but no block was passed")
266
361
  end
267
362
 
268
363
  it "should be able to mock send" do
269
- @mock.should_receive(:send).with(:any_args)
364
+ @mock.should_receive(:send).with(any_args)
270
365
  @mock.send 'hi'
271
366
  @mock.rspec_verify
272
367
  end
273
-
368
+
274
369
  it "should be able to raise from method calling yielding mock" do
275
370
  @mock.should_receive(:yield_me).and_yield 44
276
-
277
- lambda do
371
+
372
+ lambda {
278
373
  @mock.yield_me do |x|
279
374
  raise "Bang"
280
375
  end
281
- end.should raise_error(StandardError)
376
+ }.should raise_error(StandardError, "Bang")
282
377
 
283
378
  @mock.rspec_verify
284
379
  end
285
-
286
- # TODO - this is failing, but not if you run the file w/ --reverse - weird!!!!!!
287
- # specify "should clear expectations after verify" do
288
- # @mock.should_receive(:foobar)
289
- # @mock.foobar
290
- # @mock.rspec_verify
291
- # begin
292
- # @mock.foobar
293
- # rescue MockExpectationError => e
294
- # e.message.should == "Mock 'test mock' received unexpected message :foobar with (no args)"
295
- # end
296
- # end
297
-
380
+
381
+ it "should clear expectations after verify" do
382
+ @mock.should_receive(:foobar)
383
+ @mock.foobar
384
+ @mock.rspec_verify
385
+ lambda {
386
+ @mock.foobar
387
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received unexpected message :foobar with (no args)")
388
+ end
389
+
298
390
  it "should restore objects to their original state on rspec_reset" do
299
391
  mock = mock("this is a mock")
300
392
  mock.should_receive(:blah)
@@ -302,6 +394,99 @@ module Spec
302
394
  mock.rspec_verify #should throw if reset didn't work
303
395
  end
304
396
 
397
+ it "should work even after method_missing starts raising NameErrors instead of NoMethodErrors" do
398
+ # Object#method_missing throws either NameErrors or NoMethodErrors.
399
+ #
400
+ # On a fresh ruby program Object#method_missing:
401
+ # * raises a NoMethodError when called directly
402
+ # * raises a NameError when called indirectly
403
+ #
404
+ # Once Object#method_missing has been called at least once (on any object)
405
+ # it starts behaving differently:
406
+ # * raises a NameError when called directly
407
+ # * raises a NameError when called indirectly
408
+ #
409
+ # There was a bug in Mock#method_missing that relied on the fact
410
+ # that calling Object#method_missing directly raises a NoMethodError.
411
+ # This example tests that the bug doesn't exist anymore.
412
+
413
+
414
+ # Ensures that method_missing always raises NameErrors.
415
+ a_method_that_doesnt_exist rescue
416
+
417
+
418
+ @mock.should_receive(:foobar)
419
+ @mock.foobar
420
+ @mock.rspec_verify
421
+
422
+ lambda { @mock.foobar }.should_not raise_error(NameError)
423
+ lambda { @mock.foobar }.should raise_error(MockExpectationError)
424
+ end
425
+
426
+ it "should temporarily replace a method stub on a mock" do
427
+ @mock.stub!(:msg).and_return(:stub_value)
428
+ @mock.should_receive(:msg).with(:arg).and_return(:mock_value)
429
+ @mock.msg(:arg).should equal(:mock_value)
430
+ @mock.msg.should equal(:stub_value)
431
+ @mock.msg.should equal(:stub_value)
432
+ @mock.rspec_verify
433
+ end
434
+
435
+ it "should not require a different signature to replace a method stub" do
436
+ @mock.stub!(:msg).and_return(:stub_value)
437
+ @mock.should_receive(:msg).and_return(:mock_value)
438
+ @mock.msg(:arg).should equal(:mock_value)
439
+ @mock.msg.should equal(:stub_value)
440
+ @mock.msg.should equal(:stub_value)
441
+ @mock.rspec_verify
442
+ end
443
+
444
+ it "should raise an error when a previously stubbed method has a negative expectation" do
445
+ @mock.stub!(:msg).and_return(:stub_value)
446
+ @mock.should_not_receive(:msg).and_return(:mock_value)
447
+ lambda {@mock.msg(:arg)}.should raise_error(MockExpectationError)
448
+ end
449
+
450
+ it "should temporarily replace a method stub on a non-mock" do
451
+ non_mock = Object.new
452
+ non_mock.stub!(:msg).and_return(:stub_value)
453
+ non_mock.should_receive(:msg).with(:arg).and_return(:mock_value)
454
+ non_mock.msg(:arg).should equal(:mock_value)
455
+ non_mock.msg.should equal(:stub_value)
456
+ non_mock.msg.should equal(:stub_value)
457
+ non_mock.rspec_verify
458
+ end
459
+
460
+ it "should return the stubbed value when no new value specified" do
461
+ @mock.stub!(:msg).and_return(:stub_value)
462
+ @mock.should_receive(:msg)
463
+ @mock.msg.should equal(:stub_value)
464
+ @mock.rspec_verify
465
+ end
466
+
467
+ it "should not mess with the stub's yielded values when also mocked" do
468
+ @mock.stub!(:yield_back).and_yield(:stub_value)
469
+ @mock.should_receive(:yield_back).and_yield(:mock_value)
470
+ @mock.yield_back{|v| v.should == :mock_value }
471
+ @mock.yield_back{|v| v.should == :stub_value }
472
+ @mock.rspec_verify
473
+ end
474
+
475
+ it "should yield multiple values after a similar stub" do
476
+ File.stub!(:open).and_yield(:stub_value)
477
+ File.should_receive(:open).and_yield(:first_call).and_yield(:second_call)
478
+ yielded_args = []
479
+ File.open {|v| yielded_args << v }
480
+ yielded_args.should == [:first_call, :second_call]
481
+ File.open {|v| v.should == :stub_value }
482
+ File.rspec_verify
483
+ end
484
+
485
+ it "should assign stub return values" do
486
+ mock = Mock.new('name', :message => :response)
487
+ mock.message.should == :response
488
+ end
489
+
305
490
  end
306
491
 
307
492
  describe "a mock message receiving a block" do
@@ -309,11 +494,11 @@ module Spec
309
494
  @mock = mock("mock")
310
495
  @calls = 0
311
496
  end
312
-
497
+
313
498
  def add_call
314
499
  @calls = @calls + 1
315
500
  end
316
-
501
+
317
502
  it "should call the block after #should_receive" do
318
503
  @mock.should_receive(:foo) { add_call }
319
504
 
@@ -322,6 +507,15 @@ module Spec
322
507
  @calls.should == 1
323
508
  end
324
509
 
510
+ it "should call the block after #should_receive after a similar stub" do
511
+ @mock.stub!(:foo).and_return(:bar)
512
+ @mock.should_receive(:foo) { add_call }
513
+
514
+ @mock.foo
515
+
516
+ @calls.should == 1
517
+ end
518
+
325
519
  it "should call the block after #once" do
326
520
  @mock.should_receive(:foo).once { add_call }
327
521
 
@@ -341,7 +535,7 @@ module Spec
341
535
 
342
536
  it "should call the block after #times" do
343
537
  @mock.should_receive(:foo).exactly(10).times { add_call }
344
-
538
+
345
539
  (1..10).each { @mock.foo }
346
540
 
347
541
  @calls.should == 10
@@ -349,29 +543,52 @@ module Spec
349
543
 
350
544
  it "should call the block after #any_number_of_times" do
351
545
  @mock.should_receive(:foo).any_number_of_times { add_call }
352
-
546
+
353
547
  (1..7).each { @mock.foo }
354
548
 
355
549
  @calls.should == 7
356
550
  end
357
551
 
358
- it "should call the block after #with" do
359
- @mock.should_receive(:foo).with(:arg) { add_call }
360
-
361
- @mock.foo(:arg)
362
-
363
- @calls.should == 1
364
- end
365
-
366
552
  it "should call the block after #ordered" do
367
553
  @mock.should_receive(:foo).ordered { add_call }
368
554
  @mock.should_receive(:bar).ordered { add_call }
369
-
555
+
370
556
  @mock.foo
371
557
  @mock.bar
372
558
 
373
559
  @calls.should == 2
374
560
  end
375
561
  end
562
+
563
+ describe 'string representation generated by #to_s' do
564
+ it 'should not contain < because that might lead to invalid HTML in some situations' do
565
+ mock = mock("Dog")
566
+ valid_html_str = "#{mock}"
567
+ valid_html_str.should_not include('<')
568
+ end
569
+ end
570
+
571
+ describe "mock created with no name" do
572
+ it "should not use a name in a failure message" do
573
+ mock = mock()
574
+ expect {mock.foo}.to raise_error(/Mock received/)
575
+ end
576
+
577
+ it "should respond to initially stubbed methods" do
578
+ mock = mock(:foo => "woo", :bar => "car")
579
+ mock.foo.should == "woo"
580
+ mock.bar.should == "car"
581
+ end
582
+ end
583
+
584
+ describe "==" do
585
+ it "sends '== self' to the comparison object" do
586
+ first = mock('first')
587
+ second = mock('second')
588
+
589
+ first.should_receive(:==).with(second)
590
+ second == first
591
+ end
592
+ end
376
593
  end
377
594
  end