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,25 +1,80 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper.rb'
1
+ require 'spec_helper'
2
+ require 'spec/runner/resources/custom_example_group_runner'
3
+ require 'fakefs/spec_helpers'
2
4
 
3
- describe "OptionParser" do
5
+ describe "OptionParser" do
4
6
  before(:each) do
5
7
  @out = StringIO.new
6
8
  @err = StringIO.new
7
- @parser = Spec::Runner::OptionParser.new
9
+ @parser = Spec::Runner::OptionParser.new(@err, @out)
8
10
  end
9
11
 
10
12
  def parse(args)
11
- @parser.parse(args, @err, @out, true)
13
+ @parser.parse(args)
14
+ @parser.options
15
+ end
16
+
17
+ describe "with fakefs" do
18
+ include FakeFS::SpecHelpers
19
+
20
+ it "should not use colour by default" do
21
+ options = parse([])
22
+ options.colour.should == false
23
+ end
24
+
25
+ it "should use progress bar formatter by default" do
26
+ options = parse([])
27
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter)
28
+ end
29
+ end
30
+
31
+ it "should leave the submitted argv alone" do
32
+ args = ["--pattern", "foo"]
33
+ @parser.order!(args)
34
+ args.should == ["--pattern", "foo"]
35
+ end
36
+
37
+ it "should accept files to include" do
38
+ options = parse(["--pattern", "foo"])
39
+ options.filename_pattern.should == "foo"
40
+ end
41
+
42
+ it "should accept debugger option" do
43
+ options = parse(["--debugger"])
44
+ options.debug.should be_true
45
+ end
46
+
47
+ it "should accept -u form of debugger option" do
48
+ options = parse(["-u"])
49
+ options.debug.should be_true
50
+ end
51
+
52
+ it "should turn off the debugger option if drb is specified later" do
53
+ @parser.stub!(:parse_drb).with(no_args).and_return(true)
54
+ options = parse(["-u", "--drb"])
55
+ options.debug.should be_false
56
+ end
57
+
58
+ it "should turn off the debugger option if drb is specified first" do
59
+ @parser.stub!(:parse_drb).with(no_args).and_return(true)
60
+ options = parse(["--drb", "-u"])
61
+ options.debug.should be_false
12
62
  end
13
63
 
14
- def behaviour_runner(args)
15
- @parser.create_behaviour_runner(args, @err, @out, true)
64
+ it "should accept port option" do
65
+ options = parse(["--port", "9000"])
66
+ options.drb_port.should == 9000
16
67
  end
17
68
 
69
+ it 'should require argument to port option' do
70
+ lambda { parse(["--port"]) }.should raise_error(OptionParser::MissingArgument)
71
+ end
72
+
18
73
  it "should accept dry run option" do
19
74
  options = parse(["--dry-run"])
20
75
  options.dry_run.should be_true
21
76
  end
22
-
77
+
23
78
  it "should eval and use custom formatter when none of the builtins" do
24
79
  options = parse(["--format", "Custom::Formatter"])
25
80
  options.formatters[0].class.should be(Custom::Formatter)
@@ -37,37 +92,44 @@ describe "OptionParser" do
37
92
  options.formatters[2].where.should eql("foo\\bar")
38
93
  options.formatters[3].where.should eql("/foo/bar")
39
94
  end
40
-
95
+
41
96
  it "should not be verbose by default" do
42
97
  options = parse([])
43
98
  options.verbose.should be_nil
44
99
  end
45
-
46
- it "should not use colour by default" do
100
+
101
+ it "should print help to stdout if no args and spec_comand?" do
102
+ Spec::Runner::OptionParser.stub!(:spec_command?).and_return(true)
47
103
  options = parse([])
48
- options.colour.should == false
104
+ @out.rewind
105
+ @out.read.should match(/Usage: spec \(FILE\(:LINE\)\?\|DIRECTORY\|GLOB\)\+ \[options\]/m)
49
106
  end
50
-
107
+
108
+ it "should not print help to stdout if no args and NOT spec_command?" do
109
+ Spec::Runner::OptionParser.stub!(:spec_command?).and_return(false)
110
+ options = parse([])
111
+ @out.rewind
112
+ @out.read.should == ""
113
+ end
114
+
51
115
  it "should print help to stdout" do
52
116
  options = parse(["--help"])
53
117
  @out.rewind
54
- @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m)
118
+ @out.read.should match(/Usage: spec \(FILE\(:LINE\)\?\|DIRECTORY\|GLOB\)\+ \[options\]/m)
55
119
  end
56
-
57
- it "should print instructions about how to fix bad formatter" do
58
- options = parse(["--format", "Custom::BadFormatter"])
59
- @err.string.should match(/Couldn't find formatter class Custom::BadFormatter/n)
60
- end
61
-
62
- it "should print usage to err if no dir specified" do
63
- options = parse([])
64
- @err.string.should match(/Usage: spec/)
120
+
121
+ it "should print instructions about how to require missing formatter" do
122
+ lambda do
123
+ options = parse(["--format", "Custom::MissingFormatter"])
124
+ options.formatters
125
+ end.should raise_error(NameError)
126
+ @err.string.should match(/Couldn't find formatter class Custom::MissingFormatter/n)
65
127
  end
66
-
128
+
67
129
  it "should print version to stdout" do
68
130
  options = parse(["--version"])
69
131
  @out.rewind
70
- @out.read.should match(/RSpec-\d+\.\d+\.\d+.*\(r\d+\) - BDD for Ruby\nhttp:\/\/rspec.rubyforge.org\/\n/n)
132
+ @out.read.should match(/rspec \d+\.\d+\.\d+/n)
71
133
  end
72
134
 
73
135
  it "should require file when require specified" do
@@ -75,37 +137,37 @@ describe "OptionParser" do
75
137
  parse(["--require", "whatever"])
76
138
  end.should raise_error(LoadError)
77
139
  end
78
-
140
+
79
141
  it "should support c option" do
80
142
  options = parse(["-c"])
81
143
  options.colour.should be_true
82
144
  end
83
-
145
+
84
146
  it "should support queens colour option" do
85
147
  options = parse(["--colour"])
86
148
  options.colour.should be_true
87
149
  end
88
-
150
+
89
151
  it "should support us color option" do
90
152
  options = parse(["--color"])
91
153
  options.colour.should be_true
92
154
  end
93
-
155
+
94
156
  it "should support single example with -e option" do
95
157
  options = parse(["-e", "something or other"])
96
158
  options.examples.should eql(["something or other"])
97
159
  end
98
-
160
+
99
161
  it "should support single example with -s option (will be removed when autotest supports -e)" do
100
162
  options = parse(["-s", "something or other"])
101
163
  options.examples.should eql(["something or other"])
102
164
  end
103
-
165
+
104
166
  it "should support single example with --example option" do
105
167
  options = parse(["--example", "something or other"])
106
168
  options.examples.should eql(["something or other"])
107
169
  end
108
-
170
+
109
171
  it "should read several example names from file if --example is given an existing file name" do
110
172
  options = parse(["--example", File.dirname(__FILE__) + '/examples.txt'])
111
173
  options.examples.should eql([
@@ -117,232 +179,373 @@ describe "OptionParser" do
117
179
  options = parse(["--example", File.dirname(__FILE__) + '/empty_file.txt'])
118
180
  options.examples.should eql([])
119
181
  end
120
-
182
+
121
183
  it "should use html formatter when format is h" do
122
184
  options = parse(["--format", "h"])
123
185
  options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
124
186
  end
125
-
187
+
126
188
  it "should use html formatter when format is html" do
127
189
  options = parse(["--format", "html"])
128
190
  options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
129
191
  end
130
-
192
+
193
+ it "should use silent formatter when format is s" do
194
+ options = parse(["--format", "l"])
195
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::SilentFormatter)
196
+ end
197
+
198
+ it "should use silent formatter when format is silent" do
199
+ options = parse(["--format", "silent"])
200
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::SilentFormatter)
201
+ end
202
+
131
203
  it "should use html formatter with explicit output when format is html:test.html" do
132
204
  FileUtils.rm 'test.html' if File.exist?('test.html')
133
205
  options = parse(["--format", "html:test.html"])
134
- File.should be_exist('test.html')
206
+ options.formatters # creates the file
207
+ File.should exist('test.html')
135
208
  options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
136
- FileUtils.rm 'test.html' rescue nil # Help windows
209
+ options.formatters[0].close
210
+ FileUtils.rm 'test.html'
137
211
  end
138
-
212
+
139
213
  it "should use noisy backtrace tweaker with b option" do
140
214
  options = parse(["-b"])
141
215
  options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker)
142
216
  end
143
-
217
+
144
218
  it "should use noisy backtrace tweaker with backtrace option" do
145
219
  options = parse(["--backtrace"])
146
220
  options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker)
147
221
  end
148
-
222
+
149
223
  it "should use quiet backtrace tweaker by default" do
150
224
  options = parse([])
151
225
  options.backtrace_tweaker.should be_instance_of(Spec::Runner::QuietBacktraceTweaker)
152
226
  end
153
-
154
- it "should use progress bar formatter by default" do
155
- options = parse([])
156
- options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter)
157
- end
158
-
159
- it "should use rdoc formatter when format is r" do
160
- options = parse(["--format", "r"])
161
- options.formatters[0].class.should equal(Spec::Runner::Formatter::RdocFormatter)
162
- end
163
-
164
- it "should use rdoc formatter when format is rdoc" do
165
- options = parse(["--format", "rdoc"])
166
- options.formatters[0].class.should equal(Spec::Runner::Formatter::RdocFormatter)
167
- end
168
-
227
+
169
228
  it "should use specdoc formatter when format is s" do
170
229
  options = parse(["--format", "s"])
171
230
  options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter)
172
231
  end
173
-
232
+
174
233
  it "should use specdoc formatter when format is specdoc" do
175
234
  options = parse(["--format", "specdoc"])
176
235
  options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter)
177
236
  end
178
237
 
238
+ it "should use nested text formatter when format is s" do
239
+ options = parse(["--format", "n"])
240
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
241
+ end
242
+
243
+ it "should use nested text formatter when format is nested" do
244
+ options = parse(["--format", "nested"])
245
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
246
+ end
247
+
179
248
  it "should support diff option when format is not specified" do
180
249
  options = parse(["--diff"])
181
250
  options.diff_format.should == :unified
182
251
  end
183
-
252
+
184
253
  it "should use unified diff format option when format is unified" do
185
254
  options = parse(["--diff", "unified"])
186
255
  options.diff_format.should == :unified
187
256
  options.differ_class.should equal(Spec::Expectations::Differs::Default)
188
257
  end
189
-
258
+
190
259
  it "should use context diff format option when format is context" do
191
260
  options = parse(["--diff", "context"])
192
261
  options.diff_format.should == :context
193
262
  options.differ_class.should == Spec::Expectations::Differs::Default
194
263
  end
195
-
264
+
196
265
  it "should use custom diff format option when format is a custom format" do
197
- options = parse(["--diff", "Custom::Formatter"])
266
+ Spec::Expectations.differ.should_not be_instance_of(Custom::Differ)
267
+
268
+ options = parse(["--diff", "Custom::Differ"])
269
+ options.parse_diff "Custom::Differ"
198
270
  options.diff_format.should == :custom
199
- options.differ_class.should == Custom::Formatter
271
+ options.differ_class.should == Custom::Differ
272
+ Spec::Expectations.differ.should be_instance_of(Custom::Differ)
200
273
  end
201
-
202
- it "should print instructions about how to fix bad differ" do
203
- options = parse(["--diff", "Custom::BadFormatter"])
204
- @err.string.should match(/Couldn't find differ class Custom::BadFormatter/n)
274
+
275
+ it "should print instructions about how to fix missing differ" do
276
+ lambda { parse(["--diff", "Custom::MissingFormatter"]) }.should raise_error(NameError)
277
+ @err.string.should match(/Couldn't find differ class Custom::MissingFormatter/n)
205
278
  end
279
+
280
+ describe "when attempting a focussed spec" do
281
+ attr_reader :file, :dir
282
+ before(:each) do
283
+ @original_rspec_options = Spec::Runner.options
284
+ @file = "#{File.dirname(__FILE__)}/line_number_query/line_number_query_fixture.rb"
285
+ @dir = File.dirname(file)
286
+ end
287
+
288
+ after(:each) do
289
+ Spec::Runner.use @original_rspec_options
290
+ end
291
+
292
+ def parse(args)
293
+ options = super
294
+ Spec::Runner.use options
295
+ options.filename_pattern = "*_fixture.rb"
296
+ options
297
+ end
206
298
 
207
- it "should support --line to identify spec" do
208
- spec_parser = mock("spec_parser")
209
- @parser.instance_variable_set('@spec_parser', spec_parser)
210
-
211
- file_factory = mock("File")
212
- file_factory.should_receive(:file?).and_return(true)
213
- file_factory.should_receive(:open).and_return("fake_io")
214
- @parser.instance_variable_set('@file_factory', file_factory)
299
+ describe 'with the --line flag' do
300
+ it "should correctly identify the spec" do
301
+ options = parse([file, "--line", "13"])
302
+ options.line_number.should == 13
303
+ options.examples.should be_empty
304
+ options.run_examples
305
+ options.examples.should eql(["d"])
306
+ end
307
+
308
+ it "should fail with error message if specified file is a dir" do
309
+ options = parse([dir, "--line", "169"])
310
+ options.line_number.should == 169
311
+ options.run_examples
312
+ @err.string.should match(/You must specify one file, not a directory when providing a line number/n)
313
+ end
314
+
315
+
316
+ it "should fail with error message if file does not exist" do
317
+ options = parse(["some file", "--line", "169"])
318
+ proc do
319
+ options.run_examples
320
+ end.should raise_error
321
+ end
322
+
323
+ it "should fail with error message if more than one files are specified" do
324
+ options = parse([file, file, "--line", "169"])
325
+ options.run_examples
326
+ @err.string.should match(/Only one file can be specified when providing a line number/n)
327
+ end
328
+
329
+ it "should fail with error message if using simultaneously with --example" do
330
+ options = parse([file, "--example", "some example", "--line", "169"])
331
+ options.run_examples
332
+ @err.string.should match(/You cannot use --example and specify a line number/n)
333
+ end
334
+ end
215
335
 
216
- spec_parser.should_receive(:spec_name_for).with("fake_io", 169).and_return("some spec")
336
+ describe 'with the colon syntax (filename:LINE_NUMBER)' do
337
+
338
+ it "should strip the line number from the file name" do
339
+ options = parse(["#{file}:13"])
340
+ options.files.should include(file)
341
+ end
342
+
343
+ it "should correctly identify the spec" do
344
+ options = parse(["#{file}:13"])
345
+ options.line_number.should == 13
346
+ options.examples.should be_empty
347
+ options.run_examples
348
+ options.examples.should eql(["d"])
349
+ end
350
+
351
+ it "should fail with error message if specified file is a dir" do
352
+ options = parse(["#{dir}:169"])
353
+ options.line_number.should == 169
354
+ options.run_examples
355
+ @err.string.should match(/You must specify one file, not a directory when providing a line number/n)
356
+ end
357
+
358
+
359
+ it "should fail with error message if file does not exist" do
360
+ options = parse(["some file:169"])
361
+ proc do
362
+ options.run_examples
363
+ end.should raise_error
364
+ end
365
+
366
+ it "should fail with error message if more than one files are specified" do
367
+ options = parse([file, "#{file}:169"])
368
+ options.run_examples
369
+ @err.string.should match(/Only one file can be specified when providing a line number/n)
370
+ end
371
+
372
+ it "should fail with error message if using simultaneously with --example" do
373
+ options = parse(["#{file}:169", "--example", "some example"])
374
+ options.run_examples
375
+ @err.string.should match(/You cannot use --example and specify a line number/n)
376
+ end
377
+ end
217
378
 
218
- options = parse(["some file", "--line", "169"])
219
- options.examples.should eql(["some spec"])
220
- File.rspec_verify
221
379
  end
222
-
223
- it "should fail with error message if file is dir along with --line" do
224
- spec_parser = mock("spec_parser")
225
- @parser.instance_variable_set('@spec_parser', spec_parser)
226
-
227
- file_factory = mock("File")
228
- file_factory.should_receive(:file?).and_return(false)
229
- file_factory.should_receive(:directory?).and_return(true)
230
- @parser.instance_variable_set('@file_factory', file_factory)
231
-
232
- options = parse(["some file", "--line", "169"])
233
- @err.string.should match(/You must specify one file, not a directory when using the --line option/n)
380
+
381
+ if [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
382
+ it "should barf when --heckle is specified (and platform is windows)" do
383
+ lambda do
384
+ options = parse(["--heckle", "Spec"])
385
+ end.should raise_error(StandardError, /Heckle is not supported/)
386
+ end
387
+ elsif Spec::Ruby.version.to_f == 1.9
388
+ it "should barf when --heckle is specified (and platform is Ruby 1.9)" do
389
+ lambda do
390
+ options = parse(["--heckle", "Spec"])
391
+ end.should raise_error(StandardError, /Heckle is not supported/)
392
+ end
393
+ else
394
+ it "should heckle when --heckle is specified (and platform is not windows)" do
395
+ options = parse(["--heckle", "Spec"])
396
+ options.heckle_runner.should be_instance_of(Spec::Runner::HeckleRunner)
397
+ end
234
398
  end
235
-
236
- it "should fail with error message if file is dir along with --line" do
237
- spec_parser = mock("spec_parser")
238
- @parser.instance_variable_set('@spec_parser', spec_parser)
239
-
240
- file_factory = mock("File")
241
- file_factory.should_receive(:file?).and_return(false)
242
- file_factory.should_receive(:directory?).and_return(false)
243
- @parser.instance_variable_set('@file_factory', file_factory)
244
-
245
- options = parse(["some file", "--line", "169"])
246
- @err.string.should match(/some file does not exist/n)
399
+
400
+ it "should read options from file when --options is specified" do
401
+ options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
402
+ options.diff_format.should_not be_nil
403
+ options.colour.should be_true
247
404
  end
248
-
249
- it "should fail with error message if more than one files are specified along with --line" do
250
- spec_parser = mock("spec_parser")
251
- @parser.instance_variable_set('@spec_parser', spec_parser)
252
-
253
- options = parse(["some file", "some other file", "--line", "169"])
254
- @err.string.should match(/Only one file can be specified when using the --line option/n)
405
+
406
+ it "should default the formatter to ProgressBarFormatter when using options file" do
407
+ options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
408
+ options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::ProgressBarFormatter)
255
409
  end
256
410
 
257
- it "should fail with error message if --example and --line are used simultaneously" do
258
- spec_parser = mock("spec_parser")
259
- @parser.instance_variable_set('@spec_parser', spec_parser)
260
-
261
- options = parse(["some file", "--example", "some example", "--line", "169"])
262
- @err.string.should match(/You cannot use both --line and --example/n)
411
+ it "should run parse drb after parsing options" do
412
+ @parser.should_receive(:parse_drb).with(no_args).and_return(true)
413
+ options = parse(["--options", File.dirname(__FILE__) + "/spec_drb.opts"])
263
414
  end
264
415
 
265
- if(PLATFORM != "i386-mswin32")
266
- it "should heckle when --heckle is specified (and platform is not windows)" do
267
- options = parse(["--heckle", "Spec"])
268
- options.heckle_runner.should be_instance_of(Spec::Runner::HeckleRunner)
269
- end
270
- else
271
- it "should barf when --heckle is specified (and platform is windows)" do
272
- lambda do
273
- options = parse(["--heckle", "Spec"])
274
- end.should raise_error(StandardError, "Heckle not supported on Windows")
416
+ it "should send all the arguments other than --drb back to the parser after parsing options" do
417
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return do |options|
418
+ options.argv.should == ["example_file.rb", "--colour"]
275
419
  end
420
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
421
+ end
422
+
423
+ it "runs specs locally if no drb is running when --drb is specified" do
424
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return(false)
425
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
426
+ options.__send__(:examples_should_be_run?).should be_true
276
427
  end
277
428
 
278
- it "should read options from file when --options is specified" do
279
- Spec::Runner::CommandLine.should_receive(:run).with(["--diff", "--colour"], @err, @out, true, true)
280
- options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
429
+ it "says its running specs locally if no drb is running when --drb is specified" do
430
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return(false)
431
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
432
+ options.error_stream.rewind
433
+ options.error_stream.string.should =~ /Running specs locally/
281
434
  end
282
435
 
283
- it "should append options from file when --options is specified" do
284
- Spec::Runner::CommandLine.should_receive(:run).with(["some/spec.rb", "--diff", "--colour"], @err, @out, true, true)
285
- options = parse(["some/spec.rb", "--options", File.dirname(__FILE__) + "/spec.opts"])
436
+ it "does not run specs locally if drb is running when --drb is specified" do
437
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return(true)
438
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
439
+ options.__send__(:examples_should_be_run?).should be_false
286
440
  end
287
-
441
+
288
442
  it "should read spaced and multi-line options from file when --options is specified" do
289
- Spec::Runner::CommandLine.should_receive(:run).with(["--diff", "--colour", "--format", "s"], @err, @out, true, true)
290
443
  options = parse(["--options", File.dirname(__FILE__) + "/spec_spaced.opts"])
444
+ options.diff_format.should_not be_nil
445
+ options.colour.should be_true
446
+ options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::SpecdocFormatter)
291
447
  end
292
448
 
293
449
  it "should save config to file when --generate-options is specified" do
294
- FileUtils.rm 'test.spec.opts' rescue nil
450
+ FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts')
295
451
  options = parse(["--colour", "--generate-options", "test.spec.opts", "--diff"])
296
- File.open('test.spec.opts').read.should == "--colour\n--diff\n"
297
- FileUtils.rm 'test.spec.opts' rescue nil
452
+ IO.read('test.spec.opts').should == "--colour\n--diff\n"
453
+ FileUtils.rm 'test.spec.opts'
298
454
  end
299
-
300
- it "should call DrbCommandLine when --drb is specified" do
301
- Spec::Runner::DrbCommandLine.should_receive(:run).with(["some/spec.rb", "--diff", "--colour"], @err, @out, true, true)
302
- options = parse(["some/spec.rb", "--diff", "--drb", "--colour"])
455
+
456
+ it "should save config to file when -G is specified" do
457
+ FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts')
458
+ options = parse(["--colour", "-G", "test.spec.opts", "--diff"])
459
+ IO.read('test.spec.opts').should == "--colour\n--diff\n"
460
+ FileUtils.rm 'test.spec.opts'
303
461
  end
304
462
 
305
- it "should not return an Options object when --drb is specified" do
306
- Spec::Runner::DrbCommandLine.stub!(:run)
307
- parse(["some/spec.rb", "--drb"]).should be_nil
463
+ it "when --drb is specified, calls DrbCommandLine all of the other ARGV arguments" do
464
+ options = Spec::Runner::OptionParser.parse([
465
+ "some/spec.rb", "--diff", "--colour"
466
+ ], @err, @out)
467
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return do |options|
468
+ options.argv.should == ["some/spec.rb", "--diff", "--colour"]
469
+ end
470
+ parse(["some/spec.rb", "--diff", "--drb", "--colour"])
308
471
  end
309
-
472
+
310
473
  it "should reverse spec order when --reverse is specified" do
311
474
  options = parse(["some/spec.rb", "--reverse"])
312
475
  end
313
-
476
+
314
477
  it "should set an mtime comparator when --loadby mtime" do
315
- behaviour_runner = behaviour_runner(["--loadby", 'mtime'])
478
+ options = parse(["--loadby", 'mtime'])
479
+ runner = Spec::Runner::ExampleGroupRunner.new(options)
480
+ Spec::Runner::ExampleGroupRunner.should_receive(:new).
481
+ with(options).
482
+ and_return(runner)
483
+ runner.should_receive(:load_files).with(["most_recent_spec.rb", "command_line_spec.rb"])
484
+
316
485
  Dir.chdir(File.dirname(__FILE__)) do
486
+ options.files << 'command_line_spec.rb'
487
+ options.files << 'most_recent_spec.rb'
317
488
  FileUtils.touch "most_recent_spec.rb"
318
- all_files = ['command_line_spec.rb', 'most_recent_spec.rb']
319
- sorted_files = behaviour_runner.sort_paths(all_files)
320
- sorted_files.should == ["most_recent_spec.rb", "command_line_spec.rb"]
489
+ options.run_examples
321
490
  FileUtils.rm "most_recent_spec.rb"
322
491
  end
323
492
  end
324
-
325
- it "should not use a runner by default" do
493
+
494
+ it "should use the standard runner by default" do
495
+ runner = ::Spec::Runner::ExampleGroupRunner.new(@parser.options)
496
+ ::Spec::Runner::ExampleGroupRunner.should_receive(:new).
497
+ with(@parser.options).
498
+ and_return(runner)
326
499
  options = parse([])
327
- options.runner_type.should be_nil
500
+ options.run_examples
328
501
  end
329
-
502
+
330
503
  it "should use a custom runner when given" do
331
- options = parse(["--runner", "Custom::BehaviourRunner"])
332
- options.runner_type.should equal(Custom::BehaviourRunner)
504
+ runner = Custom::ExampleGroupRunner.new(@parser.options, nil)
505
+ Custom::ExampleGroupRunner.should_receive(:new).
506
+ with(@parser.options, nil).
507
+ and_return(runner)
508
+ options = parse(["--runner", "Custom::ExampleGroupRunner"])
509
+ options.run_examples
333
510
  end
334
-
335
- it "should fail when custom runner not found" do
336
- parse(["--runner", "whatever"])
337
- @err.string.should match(/Couldn't find behaviour runner class/)
511
+
512
+ it "should use a custom runner with extra options" do
513
+ runner = Custom::ExampleGroupRunner.new(@parser.options, 'something')
514
+ Custom::ExampleGroupRunner.should_receive(:new).
515
+ with(@parser.options, 'something').
516
+ and_return(runner)
517
+ options = parse(["--runner", "Custom::ExampleGroupRunner:something"])
518
+ options.run_examples
338
519
  end
339
-
340
- it "should return the correct default behaviour runner" do
341
- @parser.create_behaviour_runner([], @err, @out, true).should be_instance_of(Spec::Runner::BehaviourRunner)
520
+
521
+ it "sets options.autospec to true with --autospec" do
522
+ options = parse(["--autospec"])
523
+ options.autospec.should be(true)
342
524
  end
525
+
526
+ describe "implicitly loading spec/spec.opts" do
527
+ include FakeFS::SpecHelpers
343
528
 
344
- it "should return the correct default behaviour runner" do
345
- @parser.create_behaviour_runner(["--runner", "Custom::BehaviourRunner"], @err, @out, true).should be_instance_of(Custom::BehaviourRunner)
529
+ it "uses spec/spec.opts if present" do
530
+ File.open('spec/spec.opts', 'w') { |f| f.write "--colour" }
531
+ options = parse(['ignore.rb'])
532
+ options.colour.should be(true)
533
+ end
534
+
535
+ it "does not try to load spec/spec.opts if not present" do
536
+ FileUtils.rm 'spec/spec.opts'
537
+ options = parse(['ignore.rb'])
538
+ options.colour.should be(false)
539
+ end
540
+
541
+ it "uses specified opts if supplied" do
542
+ options = nil
543
+ File.open("spec/spec.opts",'w') { |f| f.write "" }
544
+ File.open("spec/alternate.opts",'w') { |f| f.write "--colour" }
545
+ options = parse(['-O','spec/alternate.opts'])
546
+ options.colour.should be(true)
547
+ end
346
548
  end
347
-
549
+
550
+
348
551
  end