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,158 +1,406 @@
1
+ require 'ostruct'
2
+ require 'rbconfig'
3
+
1
4
  module Spec
2
5
  module Runner
3
6
  class Options
4
- BUILT_IN_FORMATTERS = {
5
- 'specdoc' => Formatter::SpecdocFormatter,
6
- 's' => Formatter::SpecdocFormatter,
7
- 'html' => Formatter::HtmlFormatter,
8
- 'h' => Formatter::HtmlFormatter,
9
- 'rdoc' => Formatter::RdocFormatter,
10
- 'r' => Formatter::RdocFormatter,
11
- 'progress' => Formatter::ProgressBarFormatter,
12
- 'p' => Formatter::ProgressBarFormatter,
13
- 'failing_examples' => Formatter::FailingExamplesFormatter,
14
- 'e' => Formatter::FailingExamplesFormatter,
15
- 'failing_behaviours' => Formatter::FailingBehavioursFormatter,
16
- 'b' => Formatter::FailingBehavioursFormatter
7
+ FILE_SORTERS = {
8
+ 'mtime' => lambda {|file_a, file_b| File.mtime(file_b) <=> File.mtime(file_a)}
17
9
  }
18
-
10
+
11
+ EXAMPLE_FORMATTERS = { # Load these lazily for better speed
12
+ 'silent' => ['spec/runner/formatter/silent_formatter', 'Formatter::SilentFormatter'],
13
+ 'l' => ['spec/runner/formatter/silent_formatter', 'Formatter::SilentFormatter'],
14
+ 'specdoc' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'],
15
+ 's' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'],
16
+ 'nested' => ['spec/runner/formatter/nested_text_formatter', 'Formatter::NestedTextFormatter'],
17
+ 'n' => ['spec/runner/formatter/nested_text_formatter', 'Formatter::NestedTextFormatter'],
18
+ 'html' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'],
19
+ 'h' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'],
20
+ 'progress' => ['spec/runner/formatter/progress_bar_formatter', 'Formatter::ProgressBarFormatter'],
21
+ 'p' => ['spec/runner/formatter/progress_bar_formatter', 'Formatter::ProgressBarFormatter'],
22
+ 'failing_examples' => ['spec/runner/formatter/failing_examples_formatter', 'Formatter::FailingExamplesFormatter'],
23
+ 'e' => ['spec/runner/formatter/failing_examples_formatter', 'Formatter::FailingExamplesFormatter'],
24
+ 'failing_example_groups' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'],
25
+ 'g' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'],
26
+ 'profile' => ['spec/runner/formatter/profile_formatter', 'Formatter::ProfileFormatter'],
27
+ 'o' => ['spec/runner/formatter/profile_formatter', 'Formatter::ProfileFormatter'],
28
+ 'textmate' => ['spec/runner/formatter/text_mate_formatter', 'Formatter::TextMateFormatter']
29
+ }
30
+
19
31
  attr_accessor(
32
+ :autospec, # hack to tell
33
+ :filename_pattern,
20
34
  :backtrace_tweaker,
21
- :colour,
22
35
  :context_lines,
23
36
  :diff_format,
24
- :differ_class,
25
37
  :dry_run,
26
- :examples,
27
- :failure_file,
28
- :formatters,
29
- :generate,
38
+ :profile,
30
39
  :heckle_runner,
40
+ :debug,
31
41
  :line_number,
32
42
  :loadby,
33
43
  :reporter,
34
44
  :reverse,
35
- :runner_type,
36
45
  :timeout,
37
- :verbose
46
+ :verbose,
47
+ :user_input_for_runner,
48
+ :error_stream,
49
+ :output_stream,
50
+ # TODO: BT - Figure out a better name
51
+ :argv
38
52
  )
39
-
40
- def initialize
53
+ attr_reader :colour, :differ_class, :files, :examples, :example_groups
54
+ attr_writer :drb_port
55
+
56
+ def initialize(error_stream, output_stream)
57
+ @error_stream = error_stream
58
+ @output_stream = output_stream
59
+ @filename_pattern = "**/*_spec.rb"
41
60
  @backtrace_tweaker = QuietBacktraceTweaker.new
42
61
  @examples = []
43
- @formatters = []
44
62
  @colour = false
63
+ @profile = false
45
64
  @dry_run = false
65
+ @debug = false
66
+ @reporter = Reporter.new(self)
67
+ @context_lines = 3
68
+ @diff_format = :unified
69
+ @files = []
70
+ @example_groups = []
71
+ @result = nil
72
+ @examples_run = false
73
+ @examples_should_be_run = nil
74
+ @user_input_for_runner = nil
75
+ @after_suite_parts = []
76
+ @files_loaded = false
77
+ @out_used = nil
46
78
  end
47
79
 
48
- def create_behaviour_runner
49
- @formatters.each do |formatter|
50
- formatter.colour = @colour if formatter.respond_to?(:colour=)
51
- formatter.dry_run = @dry_run if formatter.respond_to?(:dry_run=)
52
- end
53
- @reporter = Reporter.new(@formatters, @backtrace_tweaker)
80
+ def add_example_group(example_group)
81
+ @example_groups << example_group
82
+ end
54
83
 
55
- # this doesn't really belong here.
56
- # it should, but the way things are coupled, it doesn't
57
- if @differ_class
58
- Spec::Expectations.differ = @differ_class.new(@diff_format, @context_lines, @colour)
84
+ def line_number_requested?
85
+ !!line_number
86
+ end
87
+
88
+ def example_line
89
+ Spec::Runner::LineNumberQuery.new(self).example_line_for(files.first, line_number)
90
+ end
91
+
92
+ def remove_example_group(example_group)
93
+ @example_groups.delete(example_group)
94
+ end
95
+
96
+ def require_ruby_debug
97
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
98
+ require 'ruby-debug'
99
+ end
100
+
101
+ def project_root # :nodoc:
102
+ require 'pathname'
103
+ @project_root ||= determine_project_root
104
+ end
105
+
106
+ def determine_project_root # :nodoc:
107
+ # This is borrowed (slightly modified) from Scott Taylors
108
+ # project_path project:
109
+ # http://github.com/smtlaissezfaire/project_path
110
+ Pathname(File.expand_path('.')).ascend do |path|
111
+ if File.exists?(File.join(path, "spec"))
112
+ return path
113
+ end
59
114
  end
115
+ end
60
116
 
61
- return nil if @generate
117
+ def add_dir_from_project_root_to_load_path(dir, load_path=$LOAD_PATH) # :nodoc:
118
+ return if project_root.nil?
119
+ full_dir = File.join(project_root, dir)
120
+ load_path.unshift full_dir unless load_path.include?(full_dir)
121
+ end
62
122
 
63
- if @runner_type
64
- @runner_type.new(self)
65
- else
66
- BehaviourRunner.new(self)
123
+ def run_examples
124
+ require_ruby_debug if debug
125
+ return true unless examples_should_be_run?
126
+ success = true
127
+ begin
128
+ runner = custom_runner || ExampleGroupRunner.new(self)
129
+
130
+ unless @files_loaded
131
+ ['spec','lib'].each do |dir|
132
+ add_dir_from_project_root_to_load_path(dir)
133
+ end
134
+ runner.load_files(files_to_load)
135
+ @files_loaded = true
136
+ end
137
+
138
+ define_predicate_matchers
139
+ plugin_mock_framework
140
+ ignore_backtrace_patterns
141
+
142
+ # TODO - this has to happen after the files get loaded,
143
+ # otherwise the before_suite_parts are not populated
144
+ # from the configuration. There is no spec for this
145
+ # directly, but features/before_and_after_blocks/before_and_after_blocks.story
146
+ # will fail if this happens before the files are loaded.
147
+ before_suite_parts.each { |part| part.call }
148
+
149
+ if example_groups.empty?
150
+ true
151
+ else
152
+ set_spec_from_line_number if line_number
153
+ success = runner.run
154
+ @examples_run = true
155
+ heckle if heckle_runner
156
+ success
157
+ end
158
+ ensure
159
+ after_suite_parts.each do |part|
160
+ part.arity < 1 ? part.call : part.call(success)
161
+ end
67
162
  end
68
163
  end
69
164
 
70
- def parse_diff(format, out_stream, error_stream)
71
- @context_lines = 3
72
- case format
73
- when :context, 'context', 'c'
74
- @diff_format = :context
75
- when :unified, 'unified', 'u', '', nil
76
- @diff_format = :unified
165
+ def before_suite_parts
166
+ Spec::Example::BeforeAndAfterHooks.before_suite_parts
167
+ end
168
+
169
+ def after_suite_parts
170
+ Spec::Example::BeforeAndAfterHooks.after_suite_parts
171
+ end
172
+
173
+ def examples_run?
174
+ @examples_run
175
+ end
176
+
177
+ def examples_should_not_be_run
178
+ @examples_should_be_run = false
179
+ end
180
+
181
+ def mock_framework
182
+ # TODO - don't like this dependency - perhaps store this in here instead?
183
+ Spec::Runner.configuration.mock_framework
184
+ end
185
+
186
+ def colour=(colour)
187
+ @colour = colour
188
+ if @colour && Config::CONFIG['host_os'] =~ /mswin|mingw/ ;\
189
+ begin ;\
190
+ replace_output = @output_stream.equal?($stdout) ;\
191
+ require 'rubygems' unless ENV['NO_RUBYGEMS'] ;\
192
+ require 'Win32/Console/ANSI' ;\
193
+ @output_stream = $stdout if replace_output ;\
194
+ rescue LoadError ;\
195
+ warn "You must 'gem install win32console' to use colour on Windows" ;\
196
+ @colour = false ;\
197
+ end
77
198
  end
199
+ end
78
200
 
79
- if [:context,:unified].include? @diff_format
80
- require 'spec/expectations/differs/default'
81
- @differ_class = Spec::Expectations::Differs::Default
201
+ def parse_diff(format)
202
+ case format
203
+ when :context, 'context', 'c'
204
+ @diff_format = :context
205
+ default_differ
206
+ when :unified, 'unified', 'u', '', nil
207
+ @diff_format = :unified
208
+ default_differ
82
209
  else
83
- begin
84
- @diff_format = :custom
85
- @differ_class = eval(format)
86
- rescue NameError
87
- error_stream.puts "Couldn't find differ class #{format}"
88
- error_stream.puts "Make sure the --require option is specified *before* --diff"
89
- exit if out_stream == $stdout
90
- end
210
+ @diff_format = :custom
211
+ self.differ_class = load_class(format, 'differ', '--diff')
91
212
  end
92
213
  end
93
214
 
94
215
  def parse_example(example)
95
216
  if(File.file?(example))
96
- @examples = File.open(example).read.split("\n")
217
+ @examples = [File.open(example).read.split("\n")].flatten
97
218
  else
98
219
  @examples = [example]
99
220
  end
100
221
  end
101
222
 
102
- def parse_format(format, out_stream, error_stream)
103
- where = out_stream
104
- # This funky regexp checks whether we have a FILE_NAME or not
105
- if (format =~ /([a-zA-Z_]+(?:::[a-zA-Z_]+)*):?(.*)/) && ($2 != '')
106
- format = $1
107
- where = $2
108
- else
223
+ def parse_format(format_arg)
224
+ format, where = ClassAndArgumentsParser.parse(format_arg)
225
+ unless where
109
226
  raise "When using several --format options only one of them can be without a file" if @out_used
227
+ where = @output_stream
110
228
  @out_used = true
111
229
  end
230
+ @format_options ||= []
231
+ @format_options << [format, where]
232
+ end
112
233
 
113
- begin
114
- formatter_type = BUILT_IN_FORMATTERS[format] || eval(format)
115
- @formatters << formatter_type.new(where)
116
- rescue NameError
117
- error_stream.puts "Couldn't find formatter class #{format}"
118
- error_stream.puts "Make sure the --require option is specified *before* --format"
119
- exit if out_stream == $stdout
234
+ def formatters
235
+ @format_options ||= [['progress', @output_stream]]
236
+ @formatters ||= load_formatters(@format_options, EXAMPLE_FORMATTERS)
237
+ end
238
+
239
+ def load_formatters(format_options, formatters)
240
+ format_options.map do |format, where|
241
+ formatter_type = if formatters[format]
242
+ require formatters[format][0]
243
+ eval(formatters[format][1], binding, __FILE__, __LINE__)
244
+ else
245
+ load_class(format, 'formatter', '--format')
246
+ end
247
+ formatter_type.new(formatter_options, where)
120
248
  end
121
249
  end
122
250
 
123
- def parse_require(req)
124
- req.split(",").each{|file| require file}
251
+ def formatter_options
252
+ @formatter_options ||= OpenStruct.new(
253
+ :colour => colour,
254
+ :autospec => autospec,
255
+ :dry_run => dry_run
256
+ )
125
257
  end
126
258
 
127
- def parse_heckle(heckle)
128
- heckle_require = PLATFORM == 'i386-mswin32' ? 'spec/runner/heckle_runner_win' : 'spec/runner/heckle_runner'
129
- require heckle_require
130
- @heckle_runner = HeckleRunner.new(heckle)
259
+ def which_heckle_runner
260
+ ([/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} || Spec::Ruby.version.to_f == 1.9) ? "spec/runner/heckle_runner_unsupported" : "spec/runner/heckle_runner"
131
261
  end
132
262
 
133
- def parse_generate_options(options_file, args_copy, out_stream)
134
- # Remove the --generate-options option and the argument before writing to file
135
- index = args_copy.index("-G") || args_copy.index("--generate-options")
136
- args_copy.delete_at(index)
137
- args_copy.delete_at(index)
263
+ def load_heckle_runner(heckle)
264
+ @format_options ||= [['silent', @output_stream]]
265
+ require which_heckle_runner
266
+ @heckle_runner = ::Spec::Runner::HeckleRunner.new(heckle)
267
+ end
138
268
 
139
- File.open(options_file, 'w') do |io|
140
- io.puts args_copy.join("\n")
269
+ def number_of_examples
270
+ return examples.size unless examples.empty?
271
+ @example_groups.inject(0) {|sum, group| sum + group.number_of_examples}
272
+ end
273
+
274
+ def files_to_load
275
+ result = []
276
+ sorted_files.each do |file|
277
+ if File.directory?(file)
278
+ filename_pattern.split(",").each do |pattern|
279
+ result += Dir[File.expand_path("#{file}/#{pattern.strip}")]
280
+ end
281
+ elsif File.file?(file)
282
+ result << file
283
+ else
284
+ raise "File or directory not found: #{file}"
285
+ end
141
286
  end
142
- out_stream.puts "\nOptions written to #{options_file}. You can now use these options with:"
143
- out_stream.puts "spec --options #{options_file}"
144
- @generate = true
287
+ result
288
+ end
289
+
290
+ def dry_run?
291
+ @dry_run == true
145
292
  end
146
293
 
147
- def parse_runner(runner, out_stream, error_stream)
294
+ def drb_port
295
+ @drb_port.to_i if defined?(@drb_port)
296
+ end
297
+
298
+ protected
299
+
300
+ def define_predicate_matchers
301
+ Spec::Runner.configuration.predicate_matchers.each_pair do |matcher_method, method_on_object|
302
+ Spec::Example::ExampleMethods::__send__ :define_method, matcher_method do |*args|
303
+ eval("be_#{method_on_object.to_s.gsub('?','')}(*args)")
304
+ end
305
+ end
306
+ end
307
+
308
+ def plugin_mock_framework
309
+ case mock_framework
310
+ when Module
311
+ Spec::Example::ExampleMethods.__send__ :include, mock_framework
312
+ else
313
+ require mock_framework
314
+ Spec::Example::ExampleMethods.__send__ :include, Spec::Adapters::MockFramework
315
+ end
316
+ end
317
+
318
+ def ignore_backtrace_patterns
319
+ @backtrace_tweaker.ignore_patterns Spec::Runner.configuration.ignored_backtrace_patterns
320
+ end
321
+
322
+ def examples_should_be_run?
323
+ return @examples_should_be_run unless @examples_should_be_run.nil?
324
+ @examples_should_be_run = true
325
+ end
326
+
327
+ def differ_class=(klass)
328
+ return unless klass
329
+ @differ_class = klass
330
+ Spec::Expectations.differ = self.differ_class.new(self)
331
+ end
332
+
333
+ def load_class(name, kind, option)
334
+ if name =~ /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/
335
+ arg = $2 == "" ? nil : $2
336
+ [$1, arg]
337
+ else
338
+ m = "#{name.inspect} is not a valid class name"
339
+ @error_stream.puts m
340
+ raise m
341
+ end
148
342
  begin
149
- @runner_type = eval(runner)
150
- rescue NameError
151
- error_stream.puts "Couldn't find behaviour runner class #{runner}"
152
- error_stream.puts "Make sure the --require option is specified."
153
- exit if out_stream == $stdout
343
+ eval(name, binding, __FILE__, __LINE__)
344
+ rescue NameError => e
345
+ @error_stream.puts "Couldn't find #{kind} class #{name}"
346
+ @error_stream.puts "Make sure the --require option is specified *before* #{option}"
347
+ if $_spec_spec ; raise e ; else exit(1) ; end
348
+ end
349
+ end
350
+
351
+ def custom_runner
352
+ return nil unless custom_runner?
353
+ klass_name, arg = ClassAndArgumentsParser.parse(user_input_for_runner)
354
+ runner_type = load_class(klass_name, 'example group runner', '--runner')
355
+ return runner_type.new(self, arg)
356
+ end
357
+
358
+ def custom_runner?
359
+ return user_input_for_runner ? true : false
360
+ end
361
+
362
+ def heckle
363
+ heckle_runner = self.heckle_runner
364
+ self.heckle_runner = nil
365
+ heckle_runner.heckle_with
366
+ end
367
+
368
+ def sorted_files
369
+ return sorter ? files.sort(&sorter) : files
370
+ end
371
+
372
+ def sorter
373
+ FILE_SORTERS[loadby]
374
+ end
375
+
376
+ def default_differ
377
+ require 'spec/runner/differs/default'
378
+ self.differ_class = ::Spec::Expectations::Differs::Default
379
+ end
380
+
381
+ def set_spec_from_line_number
382
+ if examples.empty?
383
+ if files.length == 1
384
+ if File.directory?(files[0])
385
+ error_stream.puts "You must specify one file, not a directory when providing a line number"
386
+ exit(1) if stderr?
387
+ else
388
+ example = LineNumberQuery.new(self).spec_name_for(files[0], line_number)
389
+ @examples = [example]
390
+ end
391
+ else
392
+ error_stream.puts "Only one file can be specified when providing a line number: #{files.inspect}"
393
+ exit(3) if stderr?
394
+ end
395
+ else
396
+ error_stream.puts "You cannot use --example and specify a line number"
397
+ exit(4) if stderr?
154
398
  end
155
399
  end
400
+
401
+ def stderr?
402
+ @error_stream == $stderr
403
+ end
156
404
  end
157
405
  end
158
406
  end