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,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper.rb'
1
+ require 'spec_helper'
2
2
 
3
3
  module Spec
4
4
  module Mocks
@@ -13,112 +13,85 @@ module Spec
13
13
  :original_value
14
14
  end
15
15
  end
16
- @obj = @class.new
16
+ @instance = @class.new
17
+ @stub = Object.new
17
18
  end
18
19
 
19
- it "should allow for a mock expectation to temporarily replace a method stub on a mock" do
20
- mock = Spec::Mocks::Mock.new("a mock")
21
- mock.stub!(:msg).and_return(:stub_value)
22
- mock.should_receive(:msg).with(:arg).and_return(:mock_value)
23
- mock.msg(:arg).should equal(:mock_value)
24
- mock.msg.should equal(:stub_value)
25
- mock.msg.should equal(:stub_value)
26
- mock.rspec_verify
27
- end
28
-
29
- it "should allow for a mock expectation to temporarily replace a method stub on a non-mock" do
30
- @obj.stub!(:msg).and_return(:stub_value)
31
- @obj.should_receive(:msg).with(:arg).and_return(:mock_value)
32
- @obj.msg(:arg).should equal(:mock_value)
33
- @obj.msg.should equal(:stub_value)
34
- @obj.msg.should equal(:stub_value)
35
- @obj.rspec_verify
20
+ [:stub!, :stub].each do |method|
21
+ context "using #{method}" do
22
+ it "should return expected value when expected message is received" do
23
+ @instance.send(method, :msg).and_return(:return_value)
24
+ @instance.msg.should equal(:return_value)
25
+ @instance.rspec_verify
26
+ end
27
+ end
36
28
  end
37
29
 
38
- it "should ignore when expected message is not received" do
39
- @obj.stub!(:msg)
30
+ it "should ignore when expected message is received" do
31
+ @instance.stub!(:msg)
32
+ @instance.msg
40
33
  lambda do
41
- @obj.rspec_verify
34
+ @instance.rspec_verify
42
35
  end.should_not raise_error
43
36
  end
44
-
45
- it "should clear itself on rspec_verify" do
46
- @obj.stub!(:this_should_go).and_return(:blah)
47
- @obj.this_should_go.should == :blah
48
- @obj.rspec_verify
37
+
38
+ it "should ignore when message is received with args" do
39
+ @instance.stub!(:msg)
40
+ @instance.msg(:an_arg)
49
41
  lambda do
50
- @obj.this_should_go
51
- end.should raise_error
42
+ @instance.rspec_verify
43
+ end.should_not raise_error
52
44
  end
53
45
 
54
- it "should ignore when expected message is received" do
55
- @obj.stub!(:msg)
56
- @obj.msg
57
- @obj.rspec_verify
46
+ it "should ignore when expected message is not received" do
47
+ @instance.stub!(:msg)
48
+ lambda do
49
+ @instance.rspec_verify
50
+ end.should_not raise_error
58
51
  end
59
52
 
60
- it "should ignore when message is received with args" do
61
- @obj.stub!(:msg)
62
- @obj.msg(:an_arg)
63
- @obj.rspec_verify
53
+ it "should handle multiple stubbed methods" do
54
+ @instance.stub!(:msg1 => 1, :msg2 => 2)
55
+ @instance.msg1.should == 1
56
+ @instance.msg2.should == 2
64
57
  end
65
58
 
66
- it "should not support with" do
59
+ it "should clear itself when verified" do
60
+ @instance.stub!(:this_should_go).and_return(:blah)
61
+ @instance.this_should_go.should == :blah
62
+ @instance.rspec_verify
67
63
  lambda do
68
- Spec::Mocks::Mock.new("a mock").stub!(:msg).with(:arg)
69
- end.should raise_error(NoMethodError)
70
- end
71
-
72
- it "should return expected value when expected message is received" do
73
- @obj.stub!(:msg).and_return(:return_value)
74
- @obj.msg.should equal(:return_value)
75
- @obj.rspec_verify
64
+ @instance.this_should_go
65
+ end.should raise_error(NameError)
76
66
  end
77
67
 
78
68
  it "should return values in order to consecutive calls" do
79
69
  return_values = ["1",2,Object.new]
80
- @obj.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
81
- @obj.msg.should == return_values[0]
82
- @obj.msg.should == return_values[1]
83
- @obj.msg.should == return_values[2]
70
+ @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
71
+ @instance.msg.should == return_values[0]
72
+ @instance.msg.should == return_values[1]
73
+ @instance.msg.should == return_values[2]
84
74
  end
85
75
 
86
76
  it "should keep returning last value in consecutive calls" do
87
77
  return_values = ["1",2,Object.new]
88
- @obj.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
89
- @obj.msg.should == return_values[0]
90
- @obj.msg.should == return_values[1]
91
- @obj.msg.should == return_values[2]
92
- @obj.msg.should == return_values[2]
93
- @obj.msg.should == return_values[2]
94
- end
95
-
96
- it "should revert to original instance method if existed" do
97
- @obj.existing_instance_method.should equal(:original_value)
98
- @obj.stub!(:existing_instance_method).and_return(:mock_value)
99
- @obj.existing_instance_method.should equal(:mock_value)
100
- @obj.rspec_verify
101
- # TODO JRUBY: This causes JRuby to fail with:
102
- # NativeException in 'Stub should revert to original instance method if existed'
103
- # java.lang.ArrayIndexOutOfBoundsException: 0
104
- # org.jruby.internal.runtime.methods.IterateCallable.internalCall(IterateCallable.java:63)
105
- # org.jruby.internal.runtime.methods.AbstractCallable.call(AbstractCallable.java:64)
106
- # org.jruby.runtime.ThreadContext.yieldInternal(ThreadContext.java:574)
107
- # org.jruby.runtime.ThreadContext.yieldSpecificBlock(ThreadContext.java:549)
108
- # org.jruby.runtime.Block.call(Block.java:158)
109
- # org.jruby.RubyProc.call(RubyProc.java:118)
110
- # org.jruby.internal.runtime.methods.ProcMethod.internalCall(ProcMethod.java:69)
111
- # org.jruby.internal.runtime.methods.AbstractMethod.call(AbstractMethod.java:58)
112
- # org.jruby.RubyObject.callMethod(RubyObject.java:379)
113
- # org.jruby.RubyObject.callMethod(RubyObject.java:331)
114
- # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:472)
115
- # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:462)
116
- # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:390)
117
- # org.jruby.evaluator.EvaluationState.eval(EvaluationState.java:133)
118
- @obj.existing_instance_method.should equal(:original_value)
119
- end
120
-
121
- it "should revert to original class method if existed" do
78
+ @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
79
+ @instance.msg.should == return_values[0]
80
+ @instance.msg.should == return_values[1]
81
+ @instance.msg.should == return_values[2]
82
+ @instance.msg.should == return_values[2]
83
+ @instance.msg.should == return_values[2]
84
+ end
85
+
86
+ it "should revert to original instance method if there is one" do
87
+ @instance.existing_instance_method.should equal(:original_value)
88
+ @instance.stub!(:existing_instance_method).and_return(:mock_value)
89
+ @instance.existing_instance_method.should equal(:mock_value)
90
+ @instance.rspec_verify
91
+ @instance.existing_instance_method.should equal(:original_value)
92
+ end
93
+
94
+ it "should revert to original class method if there is one" do
122
95
  @class.existing_class_method.should equal(:original_value)
123
96
  @class.stub!(:existing_class_method).and_return(:mock_value)
124
97
  @class.existing_class_method.should equal(:mock_value)
@@ -126,34 +99,105 @@ module Spec
126
99
  @class.existing_class_method.should equal(:original_value)
127
100
  end
128
101
 
129
- it "should clear itself on rspec_verify" do
130
- @obj.stub!(:this_should_go).and_return(:blah)
131
- @obj.this_should_go.should == :blah
132
- @obj.rspec_verify
133
- lambda do
134
- @obj.this_should_go
135
- end.should raise_error
136
- end
137
-
138
- it "should support yielding" do
139
- @obj.stub!(:method_that_yields).and_yield(:yielded_value)
102
+ it "should yield a specified object" do
103
+ @instance.stub!(:method_that_yields).and_yield(:yielded_obj)
140
104
  current_value = :value_before
141
- @obj.method_that_yields {|val| current_value = val}
142
- current_value.should == :yielded_value
143
- @obj.rspec_verify
105
+ @instance.method_that_yields {|val| current_value = val}
106
+ current_value.should == :yielded_obj
107
+ @instance.rspec_verify
108
+ end
109
+
110
+ it "should yield multiple times with multiple calls to and_yield" do
111
+ @instance.stub!(:method_that_yields_multiple_times).and_yield(:yielded_value).
112
+ and_yield(:another_value)
113
+ current_value = []
114
+ @instance.method_that_yields_multiple_times {|val| current_value << val}
115
+ current_value.should == [:yielded_value, :another_value]
116
+ @instance.rspec_verify
117
+ end
118
+
119
+ it "should yield a specified object and return another specified object" do
120
+ yielded_obj = mock("my mock")
121
+ yielded_obj.should_receive(:foo).with(:bar)
122
+ @instance.stub!(:method_that_yields_and_returns).and_yield(yielded_obj).and_return(:baz)
123
+ @instance.method_that_yields_and_returns { |o| o.foo :bar }.should == :baz
144
124
  end
145
125
 
146
126
  it "should throw when told to" do
147
- @mock.stub!(:something).and_throw(:blech)
127
+ @mock.stub!(:something).and_throw(:up)
148
128
  lambda do
149
129
  @mock.something
150
- end.should throw_symbol(:blech)
130
+ end.should throw_symbol(:up)
151
131
  end
152
-
153
- it "should support overriding w/ a new stub" do
132
+
133
+ it "should override a pre-existing stub" do
154
134
  @stub.stub!(:existing_instance_method).and_return(:updated_stub_value)
155
135
  @stub.existing_instance_method.should == :updated_stub_value
156
136
  end
137
+
138
+ it "should limit " do
139
+ @stub.stub!(:foo).with("bar")
140
+ @stub.should_receive(:foo).with("baz")
141
+ @stub.foo("bar")
142
+ @stub.foo("baz")
143
+ end
144
+
145
+ it "calculates return value by executing block passed to #and_return" do
146
+ @mock.stub!(:something).with("a","b","c").and_return { |a,b,c| c+b+a }
147
+ @mock.something("a","b","c").should == "cba"
148
+ @mock.rspec_verify
149
+ end
157
150
  end
151
+
152
+ describe "A method stub with args" do
153
+ before(:each) do
154
+ @stub = Object.new
155
+ @stub.stub!(:foo).with("bar")
156
+ end
157
+
158
+ it "should not complain if not called" do
159
+ end
160
+
161
+ it "should not complain if called with arg" do
162
+ @stub.foo("bar")
163
+ end
164
+
165
+ it "should complain if called with no arg" do
166
+ lambda do
167
+ @stub.foo
168
+ end.should raise_error
169
+ end
170
+
171
+ it "should complain if called with other arg" do
172
+ lambda do
173
+ @stub.foo("other")
174
+ end.should raise_error
175
+ end
176
+
177
+ it "should not complain if also mocked w/ different args" do
178
+ @stub.should_receive(:foo).with("baz")
179
+ @stub.foo("bar")
180
+ @stub.foo("baz")
181
+ end
182
+
183
+ it "should complain if also mocked w/ different args AND called w/ a 3rd set of args" do
184
+ @stub.should_receive(:foo).with("baz")
185
+ @stub.foo("bar")
186
+ @stub.foo("baz")
187
+ lambda do
188
+ @stub.foo("other")
189
+ end.should raise_error
190
+ end
191
+
192
+ it "should support options" do
193
+ @stub.stub!(:foo, :expected_from => "bar")
194
+ end
195
+
196
+ it "should use 'Stub' in the failure message" do
197
+ stub = stub('name')
198
+ expect {stub.foo}.to raise_error(/Stub "name" received/)
199
+ end
200
+ end
201
+
158
202
  end
159
- end
203
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Mocks
5
+ describe "Example with stubbed and then called message" do
6
+ it "fails if the message is expected and then subsequently not called again" do
7
+ mock_obj = mock("mock", :msg => nil)
8
+ mock_obj.msg
9
+ mock_obj.should_receive(:msg)
10
+ lambda { mock_obj.rspec_verify }.should raise_error(Spec::Mocks::MockExpectationError)
11
+ end
12
+
13
+ it "outputs arguments of all similar calls" do
14
+ m = mock('mock', :foo => true)
15
+ m.should_receive(:foo).with('first')
16
+ m.foo('second')
17
+ m.foo('third')
18
+ lambda do
19
+ m.rspec_verify
20
+ end.should raise_error(%Q|Mock "mock" received :foo with unexpected arguments\n expected: ("first")\n got: (["second"], ["third"])|)
21
+ m.rspec_reset
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper.rb'
1
+ require 'spec_helper'
2
2
 
3
3
  module Spec
4
4
  module Mocks
@@ -64,4 +64,4 @@ module Spec
64
64
  end
65
65
  end
66
66
  end
67
- end
67
+ end
@@ -0,0 +1,127 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Mocks
5
+ describe Mock do
6
+ context "unstubbing a mock object with a stub" do
7
+ it "should remove the stub" do
8
+ a_mock = mock 'an object', :foo => :bar
9
+
10
+ a_mock.unstub! :foo
11
+ a_mock.should_not respond_to(:foo)
12
+ end
13
+ end
14
+
15
+ context "unstubbing a real object with a stub" do
16
+ before do
17
+ @obj = Object.new
18
+ end
19
+
20
+ it "should raise a NoMethodError if the message is called after unstubbing" do
21
+ @obj.stub!(:foo).and_return :bar
22
+ @obj.unstub!(:foo)
23
+
24
+ lambda {
25
+ @obj.foo
26
+ }.should raise_error(NoMethodError)
27
+ end
28
+
29
+ it "should only clear the stub specified" do
30
+ @obj.stub!(:foo).and_return :bar
31
+ @obj.stub!(:other).and_return :baz
32
+
33
+ @obj.unstub!(:foo)
34
+
35
+ @obj.other.should == :baz
36
+ end
37
+
38
+ it "should no longer respond_to? the method" do
39
+ @obj.stub!(:foo).and_return :bar
40
+ @obj.unstub!(:foo)
41
+
42
+ @obj.should_not respond_to(:foo)
43
+ end
44
+
45
+ it "should unstub using a string (should convert the string to a symbol)" do
46
+ @obj.stub!(:foo)
47
+
48
+ @obj.unstub!("foo")
49
+
50
+ @obj.should_not respond_to(:foo)
51
+ end
52
+
53
+ it "should restore a previous method definition" do
54
+ def @obj.foo
55
+ :a_result
56
+ end
57
+
58
+ @obj.stub!(:foo).and_return :stubbed_result
59
+ @obj.unstub!(:foo)
60
+
61
+ @obj.foo.should == :a_result
62
+ end
63
+
64
+ it "should have unstub as an alias of unstub!" do
65
+ @obj.stub!(:foo).and_return :bar
66
+
67
+ @obj.unstub(:foo)
68
+
69
+ lambda {
70
+ @obj.foo
71
+ }.should raise_error(NoMethodError)
72
+ end
73
+
74
+ it "should raise a MockExpectationError if it is not stubbed" do
75
+ lambda {
76
+ @obj.unstub!(:foo)
77
+ }.should raise_error(MockExpectationError, "The method `foo` was not stubbed or was already unstubbed")
78
+ end
79
+
80
+ it "should raise a MockExpectationError if it was already unstubbed" do
81
+ @obj.stub!(:foo)
82
+ @obj.unstub!(:foo)
83
+
84
+ lambda {
85
+ @obj.unstub!(:foo)
86
+ }.should raise_error(MockExpectationError, "The method `foo` was not stubbed or was already unstubbed")
87
+ end
88
+
89
+ it "should use the correct message name in the error" do
90
+ @obj.stub!(:bar)
91
+ @obj.unstub!(:bar)
92
+
93
+ lambda {
94
+ @obj.unstub!(:bar)
95
+ }.should raise_error(MockExpectationError, "The method `bar` was not stubbed or was already unstubbed")
96
+ end
97
+
98
+ it "should raise a MockExpectationError if the method is defined, but not stubbed" do
99
+ def @obj.meth; end
100
+
101
+ lambda {
102
+ @obj.unstub!(:meth)
103
+ }.should raise_error(MockExpectationError)
104
+ end
105
+
106
+ it "should be able to restub a after unstubbing" do
107
+ @obj.stub!(:foo).and_return :bar
108
+
109
+ @obj.unstub!(:foo)
110
+
111
+ @obj.stub!(:foo).and_return :baz
112
+
113
+ @obj.foo.should == :baz
114
+ end
115
+
116
+ it "should remove only the first stub if multiple stubs have been defined" do
117
+ @obj.stub!(:foo).and_return :first
118
+ @obj.stub!(:foo).and_return :second
119
+
120
+ @obj.unstub!(:foo)
121
+
122
+ @obj.foo.should == :first
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -1,12 +1,16 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
1
+ require 'spec_helper'
2
+ require 'ruby_forker'
2
3
 
3
4
  describe "The bin/spec script" do
5
+ include RubyForker
6
+
4
7
  it "should have no warnings" do
5
- spec_path = "#{File.dirname(__FILE__)}/../../../bin/spec"
6
- output = nil
7
- IO.popen("ruby -w #{spec_path} --help 2>&1") do |io|
8
- output = io.read
9
- end
8
+ output = ruby "-w -Ilib bin/spec --help"
10
9
  output.should_not =~ /warning/n
11
10
  end
12
- end
11
+
12
+ it "should show the help w/ no args" do
13
+ output = ruby "-w -Ilib bin/spec"
14
+ output.should =~ /^Usage: spec/
15
+ end
16
+ end
@@ -0,0 +1,150 @@
1
+ require 'spec_helper'
2
+ require 'spec/rake/spectask'
3
+
4
+ module Spec
5
+ module Rake
6
+
7
+ class MockTask
8
+ class << self
9
+ attr_accessor :last_instance, :last_cmd
10
+ end
11
+
12
+ def self.tasks
13
+ @tasks ||= {}
14
+ end
15
+
16
+ def self.reset_tasks
17
+ @tasks = {}
18
+ end
19
+
20
+ def self.task(name)
21
+ tasks[name]
22
+ end
23
+
24
+ def self.register_task(name, block)
25
+ tasks[name] = block
26
+ end
27
+
28
+ def initialize(name, &block)
29
+ MockTask.register_task(name, block)
30
+ MockTask.last_instance = block
31
+ end
32
+
33
+ def self.create_task(name, &block)
34
+ new(name, &block)
35
+ end
36
+ end
37
+
38
+ class SpecTask
39
+ def task(name, &block)
40
+ MockTask.create_task(name, &block)
41
+ end
42
+
43
+ def system(cmd)
44
+ MockTask.last_cmd = cmd
45
+ true
46
+ end
47
+
48
+ def default_ruby_path
49
+ RUBY
50
+ end
51
+ end
52
+
53
+ describe SpecTask do
54
+
55
+ before(:each) do
56
+ MockTask.reset_tasks
57
+ end
58
+
59
+ it "should execute rake's ruby path by default" do
60
+ task = SpecTask.new
61
+ MockTask.last_instance.call
62
+ MockTask.last_cmd.should match(/^#{task.default_ruby_path} /)
63
+ end
64
+
65
+ it "should execute the command with system if ruby_cmd is specified" do
66
+ task = SpecTask.new {|t| t.ruby_cmd = "path_to_multiruby"}
67
+ task.should_receive(:system).and_return(true)
68
+ MockTask.last_instance.call
69
+ end
70
+
71
+ it "should execute the ruby_cmd path if specified" do
72
+ SpecTask.new {|t| t.ruby_cmd = "path_to_multiruby"}
73
+ MockTask.last_instance.call
74
+ MockTask.last_cmd.should match(/^path_to_multiruby /)
75
+ end
76
+
77
+ it "should produce a deprecation warning if the out option is used" do
78
+ SpecTask.new {|t| t.out = "somewhere_over_the_rainbow"}
79
+ STDERR.should_receive(:puts).with("The Spec::Rake::SpecTask#out attribute is DEPRECATED and will be removed in a future version. Use --format FORMAT:WHERE instead.")
80
+ MockTask.last_instance.call
81
+ end
82
+
83
+ it "should produce an error if failure_message is set and the command fails" do
84
+ task = SpecTask.new {|t| t.failure_message = "oops"; t.fail_on_error = false}
85
+ STDERR.should_receive(:puts).with("oops")
86
+ task.stub(:system).and_return(false)
87
+ MockTask.last_instance.call
88
+ end
89
+
90
+ it "should raise if fail_on_error is set and the command fails" do
91
+ task = SpecTask.new
92
+ task.stub(:system).and_return(false)
93
+ lambda {MockTask.last_instance.call}.should raise_error
94
+ end
95
+
96
+ it "should not raise if fail_on_error is not set and the command fails" do
97
+ task = SpecTask.new {|t| t.fail_on_error = false}
98
+ task.stub(:system).and_return(false)
99
+ lambda {MockTask.last_instance.call}.should_not raise_error
100
+ end
101
+
102
+ context "with ENV['SPEC'] set" do
103
+ before(:each) do
104
+ @orig_env_spec = ENV['SPEC']
105
+ ENV['SPEC'] = 'foo.rb'
106
+ end
107
+ after(:each) do
108
+ ENV['SPEC'] = @orig_env_spec
109
+ end
110
+ it "should use the provided file list" do
111
+ task = SpecTask.new
112
+ task.spec_file_list.should == ["foo.rb"]
113
+ end
114
+ end
115
+
116
+ context "with the rcov option" do
117
+
118
+ it "should create a clobber_rcov task" do
119
+ MockTask.stub!(:create_task)
120
+ MockTask.should_receive(:create_task).with(:clobber_rcov)
121
+ SpecTask.new(:rcov) {|t| t.rcov = true}
122
+ end
123
+
124
+ it "should setup the clobber_rcov task to remove the rcov directory" do
125
+ task = SpecTask.new(:rcov) {|t| t.rcov = true; t.rcov_dir = "path_to_rcov_directory"}
126
+ task.should_receive(:rm_r).with("path_to_rcov_directory")
127
+ MockTask.task(:clobber_rcov).call
128
+ end
129
+
130
+ it "should make the clobber task depend on clobber_rcov" do
131
+ MockTask.stub!(:create_task)
132
+ MockTask.should_receive(:create_task).with(:clobber => [:clobber_rcov])
133
+ SpecTask.new(:rcov) {|t| t.rcov = true}
134
+ end
135
+
136
+ it "should make the rcov task depend on clobber_rcov" do
137
+ MockTask.stub!(:create_task)
138
+ MockTask.should_receive(:create_task).with(:rcov => :clobber_rcov)
139
+ SpecTask.new(:rcov) {|t| t.rcov = true}
140
+ end
141
+
142
+ it "creates an rcov options list" do
143
+ MockTask.stub!(:create_task)
144
+ task = SpecTask.new(:rcov) {|t| t.rcov = true, t.rcov_opts = ['a','b']}
145
+ task.rcov_option_list.should == "a b"
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Runner
5
+ describe ClassAndArgumentsParser, ".parse" do
6
+
7
+ it "should use a single : to separate class names from arguments" do
8
+ ClassAndArgumentsParser.parse('Foo').should == ['Foo', nil]
9
+ ClassAndArgumentsParser.parse('Foo:arg').should == ['Foo', 'arg']
10
+ ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg').should == ['Foo::Bar::Zap', 'arg']
11
+ ClassAndArgumentsParser.parse('Foo:arg1,arg2').should == ['Foo', 'arg1,arg2']
12
+ ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg1,arg2').should == ['Foo::Bar::Zap', 'arg1,arg2']
13
+ ClassAndArgumentsParser.parse('Foo::Bar::Zap:drb://foo,drb://bar').should == ['Foo::Bar::Zap', 'drb://foo,drb://bar']
14
+ end
15
+
16
+ it "should raise an error when passed an empty string" do
17
+ lambda do
18
+ ClassAndArgumentsParser.parse('')
19
+ end.should raise_error("Couldn't parse \"\"")
20
+ end
21
+ end
22
+ end
23
+ end