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,141 +1,553 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper.rb'
1
+ require 'spec_helper'
2
+ require 'spec/runner/resources/custom_example_group_runner'
2
3
 
3
4
  module Spec
4
5
  module Runner
5
- describe "Options" do
6
- before do
7
- @error_stream = StringIO.new('')
8
- @out_stream = StringIO.new('')
9
- @options = Options.new
6
+ describe Options do
7
+ before(:each) do
8
+ @err = StringIO.new('')
9
+ @out = StringIO.new('')
10
+ @options = Options.new(@err, @out)
11
+
12
+ before_suite_parts = []
13
+ after_suite_parts = []
14
+ @options.stub!(:before_suite_parts).and_return(before_suite_parts)
15
+ @options.stub!(:after_suite_parts).and_return(after_suite_parts)
10
16
  end
11
17
 
12
- it "instantiates empty arrays" do
13
- @options.examples.should == []
14
- @options.formatters.should == []
18
+ after(:each) do
19
+ Spec::Expectations.differ = nil
20
+ end
21
+
22
+ describe "#require_ruby_debug" do
23
+ it "should require ruby-debug" do
24
+ @options.stub!(:require)
25
+ @options.should_receive(:require).with("ruby-debug")
26
+ @options.require_ruby_debug
27
+ end
15
28
  end
16
29
 
17
- it "defaults to QuietBacktraceTweaker" do
18
- @options.backtrace_tweaker.class.should == QuietBacktraceTweaker
30
+ describe "#examples" do
31
+ it "should default to empty array" do
32
+ @options.examples.should == []
33
+ end
19
34
  end
20
35
 
21
- it "defaults to no dry_run" do
22
- @options.dry_run.should == false
36
+ describe "#include_pattern" do
37
+ it "should default to '**/*_spec.rb'" do
38
+ @options.filename_pattern.should == "**/*_spec.rb"
39
+ end
23
40
  end
24
41
 
25
- it "parse_diff sets context_lines" do
26
- @options.parse_diff nil, @out_stream, @error_stream
27
- @options.context_lines.should == 3
42
+ describe "#files_to_load" do
43
+
44
+ it "should load files not following pattern if named explicitly" do
45
+ file = File.expand_path(File.dirname(__FILE__) + "/resources/a_bar.rb")
46
+ @options.files << file
47
+ @options.files_to_load.should include(file)
48
+ end
49
+
50
+ describe "with default --pattern" do
51
+ it "should load files named _spec.rb" do
52
+ dir = File.expand_path(File.dirname(__FILE__) + "/resources/")
53
+ @options.files << dir
54
+ @options.files_to_load.should == ["#{dir}/a_spec.rb"]
55
+ end
56
+ end
57
+
58
+ describe "with explicit pattern (single)" do
59
+ before(:each) do
60
+ @options.filename_pattern = "**/*_foo.rb"
61
+ end
62
+
63
+ it "should load files following pattern" do
64
+ file = File.expand_path(File.dirname(__FILE__) + "/resources/a_foo.rb")
65
+ @options.files << file
66
+ @options.files_to_load.should include(file)
67
+ end
68
+
69
+ it "should load files in directories following pattern" do
70
+ dir = File.expand_path(File.dirname(__FILE__) + "/resources")
71
+ @options.files << dir
72
+ @options.files_to_load.should include("#{dir}/a_foo.rb")
73
+ end
74
+
75
+ it "should not load files in directories not following pattern" do
76
+ dir = File.expand_path(File.dirname(__FILE__) + "/resources")
77
+ @options.files << dir
78
+ @options.files_to_load.should_not include("#{dir}/a_bar.rb")
79
+ end
80
+ end
81
+
82
+ describe "with explicit pattern (comma,separated,values)" do
83
+
84
+ before(:each) do
85
+ @options.filename_pattern = "**/*_foo.rb,**/*_bar.rb"
86
+ end
87
+
88
+ it "should support comma separated values" do
89
+ dir = File.expand_path(File.dirname(__FILE__) + "/resources")
90
+ @options.files << dir
91
+ @options.files_to_load.should include("#{dir}/a_foo.rb")
92
+ @options.files_to_load.should include("#{dir}/a_bar.rb")
93
+ end
94
+
95
+ it "should support comma separated values with spaces" do
96
+ dir = File.expand_path(File.dirname(__FILE__) + "/resources")
97
+ @options.files << dir
98
+ @options.files_to_load.should include("#{dir}/a_foo.rb")
99
+ @options.files_to_load.should include("#{dir}/a_bar.rb")
100
+ end
101
+
102
+ end
103
+
28
104
  end
29
105
 
30
- it "defaults diff to unified" do
31
- @options.parse_diff nil, @out_stream, @error_stream
32
- @options.diff_format.should == :unified
106
+ describe "#backtrace_tweaker" do
107
+ it "should default to QuietBacktraceTweaker" do
108
+ @options.backtrace_tweaker.class.should == QuietBacktraceTweaker
109
+ end
110
+
111
+ it "adds custom ignored backtrace patterns" do
112
+ Spec::Runner.configuration.stub!(:ignored_backtrace_patterns).and_return([/custom_pattern/])
113
+ @options.run_examples
114
+ @options.backtrace_tweaker.ignored_patterns.should include(/custom_pattern/)
115
+ end
33
116
  end
34
117
 
35
- it "should use unified diff format option when format is unified" do
36
- @options.parse_diff 'unified', @out_stream, @error_stream
37
- @options.diff_format.should == :unified
38
- @options.differ_class.should equal(Spec::Expectations::Differs::Default)
118
+ describe "#dry_run" do
119
+ it "should default to false" do
120
+ @options.dry_run.should == false
121
+ end
39
122
  end
40
123
 
41
- it "should use context diff format option when format is context" do
42
- @options.parse_diff 'context', @out_stream, @error_stream
43
- @options.diff_format.should == :context
44
- @options.differ_class.should == Spec::Expectations::Differs::Default
124
+ describe "#debug" do
125
+ it "should default to false" do
126
+ @options.debug.should == false
127
+ end
45
128
  end
46
129
 
47
- it "should use custom diff format option when format is a custom format" do
48
- @options.parse_diff "Custom::Formatter", @out_stream, @error_stream
49
- @options.diff_format.should == :custom
50
- @options.differ_class.should == Custom::Formatter
130
+ describe "#context_lines" do
131
+ it "should default to 3" do
132
+ @options.context_lines.should == 3
133
+ end
51
134
  end
52
135
 
53
- it "should print instructions about how to fix bad differ" do
54
- @options.parse_diff "Custom::BadFormatter", @out_stream, @error_stream
55
- @error_stream.string.should match(/Couldn't find differ class Custom::BadFormatter/n)
56
- end
136
+ describe "#parse_diff with nil" do
137
+ before(:each) do
138
+ @options.parse_diff nil
139
+ end
140
+
141
+ it "should make diff_format unified" do
142
+ @options.diff_format.should == :unified
143
+ end
57
144
 
58
- it "parse_example sets single example when argument not a file" do
59
- example = "something or other"
60
- File.file?(example).should == false
61
- @options.parse_example example
62
- @options.examples.should eql(["something or other"])
145
+ it "should set Spec::Expectations.differ to be a default differ" do
146
+ Spec::Expectations.differ.class.should ==
147
+ ::Spec::Expectations::Differs::Default
148
+ end
63
149
  end
64
150
 
65
- it "parse_example sets examples to contents of file" do
66
- example = "#{File.dirname(__FILE__)}/examples.txt"
67
- File.should_receive(:file?).with(example).and_return(true)
68
- file = StringIO.new("Sir, if you were my husband, I would poison your drink.\nMadam, if you were my wife, I would drink it.")
69
- File.should_receive(:open).with(example).and_return(file)
70
-
71
- @options.parse_example example
72
- @options.examples.should eql([
73
- "Sir, if you were my husband, I would poison your drink.",
74
- "Madam, if you were my wife, I would drink it."
75
- ])
151
+ describe "#parse_diff with 'unified'" do
152
+ before(:each) do
153
+ @options.parse_diff 'unified'
154
+ end
155
+
156
+ it "should make diff_format unified and uses default differ_class" do
157
+ @options.diff_format.should == :unified
158
+ @options.differ_class.should equal(Spec::Expectations::Differs::Default)
159
+ end
160
+
161
+ it "should set Spec::Expectations.differ to be a default differ" do
162
+ Spec::Expectations.differ.class.should ==
163
+ ::Spec::Expectations::Differs::Default
164
+ end
165
+ end
166
+
167
+ describe "#parse_diff with 'context'" do
168
+ before(:each) do
169
+ @options.parse_diff 'context'
170
+ end
171
+
172
+ it "should make diff_format context and uses default differ_class" do
173
+ @options.diff_format.should == :context
174
+ @options.differ_class.should == Spec::Expectations::Differs::Default
175
+ end
176
+
177
+ it "should set Spec::Expectations.differ to be a default differ" do
178
+ Spec::Expectations.differ.class.should ==
179
+ ::Spec::Expectations::Differs::Default
180
+ end
181
+ end
182
+
183
+ describe "#parse_diff with Custom::Differ" do
184
+ before(:each) do
185
+ @options.parse_diff 'Custom::Differ'
186
+ end
187
+
188
+ it "should use custom differ_class" do
189
+ @options.diff_format.should == :custom
190
+ @options.differ_class.should == Custom::Differ
191
+ Spec::Expectations.differ.should be_instance_of(Custom::Differ)
192
+ end
193
+
194
+ it "should set Spec::Expectations.differ to be a default differ" do
195
+ Spec::Expectations.differ.class.should ==
196
+ ::Custom::Differ
197
+ end
76
198
  end
77
- end
78
199
 
79
- describe "Options", "receiving create_behaviour_runner" do
80
- before do
81
- @options = Options.new
200
+ describe "#parse_diff with missing class name" do
201
+ it "should raise error" do
202
+ lambda { @options.parse_diff "Custom::MissingDiffer" }.should raise_error(NameError)
203
+ @err.string.should match(/Couldn't find differ class Custom::MissingDiffer/n)
204
+ end
82
205
  end
83
206
 
84
- it "returns nil when generate is true" do
85
- @options.generate = true
86
- @options.create_behaviour_runner.should == nil
207
+ describe "#parse_example" do
208
+ it "with argument thats not a file path, sets argument as the example" do
209
+ example = "something or other"
210
+ File.file?(example).should == false
211
+ @options.parse_example example
212
+ @options.examples.should eql(["something or other"])
213
+ end
214
+
215
+ it "with argument that is a file path, sets examples to contents of the file" do
216
+ example = "#{File.dirname(__FILE__)}/examples.txt"
217
+ File.should_receive(:file?).with(example).and_return(true)
218
+ file = StringIO.new("Sir, if you were my husband, I would poison your drink.\nMadam, if you were my wife, I would drink it.")
219
+ File.should_receive(:open).with(example).and_return(file)
220
+
221
+ @options.parse_example example
222
+ @options.examples.should eql([
223
+ "Sir, if you were my husband, I would poison your drink.",
224
+ "Madam, if you were my wife, I would drink it."
225
+ ])
226
+ end
87
227
  end
88
228
 
89
- it "returns a BehaviourRunner by default" do
90
- runner = @options.create_behaviour_runner
91
- runner.class.should == BehaviourRunner
229
+ describe "#examples_should_not_be_run" do
230
+ it "should cause #run_examples to return true and do nothing" do
231
+ @options.examples_should_not_be_run
232
+ ExampleGroupRunner.should_not_receive(:new)
233
+
234
+ @options.run_examples.should be_true
235
+ end
92
236
  end
93
237
 
94
- it "returns a custom runner when runner_type is set" do
95
- runner_type = Class.new do
96
- attr_reader :options
97
- def initialize(options)
98
- @options = options
238
+ describe "debug option specified" do
239
+ it "should cause ruby_debug to be required and do nothing" do
240
+ @options.debug = true
241
+ @options.should_receive(:require_ruby_debug)
242
+ @options.run_examples.should be_true
243
+ end
244
+ end
245
+
246
+ describe "debug option not specified" do
247
+ it "should not cause ruby_debug to be required" do
248
+ @options.debug = false
249
+ @options.should_not_receive(:require_ruby_debug)
250
+ @options.run_examples.should be_true
251
+ end
252
+ end
253
+
254
+ describe "#load_class" do
255
+ it "should raise error when not class name" do
256
+ lambda do
257
+ @options.__send__(:load_class, 'foo', 'fruit', '--food')
258
+ end.should raise_error('"foo" is not a valid class name')
259
+ end
260
+ end
261
+
262
+ describe "#reporter" do
263
+ it "returns a Reporter" do
264
+ @options.reporter.should be_instance_of(Reporter)
265
+ @options.reporter.options.should === @options
266
+ end
267
+ end
268
+
269
+ describe "#drb_port" do
270
+ it "returns a number" do
271
+ @options.drb_port = "400"
272
+ @options.drb_port.should == 400
273
+ end
274
+ end
275
+
276
+ describe "#number_of_examples" do
277
+ context "when --example is parsed" do
278
+ it "provides the number of examples parsed instead of the total number of examples collected" do
279
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
280
+ it "uses this example_group 1" do; end
281
+ it "uses this example_group 2" do; end
282
+ it "uses this example_group 3" do; end
283
+ end
284
+ @options.add_example_group @example_group
285
+ @options.parse_example("an example")
286
+ @options.number_of_examples.should == 1
287
+ end
288
+ end
289
+ end
290
+
291
+ describe "#add_example_group affecting passed in example_group" do
292
+ it "runs all examples when options.examples is empty" do
293
+ example_1_has_run = false
294
+ example_2_has_run = false
295
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
296
+ it "runs 1" do
297
+ example_1_has_run = true
298
+ end
299
+ it "runs 2" do
300
+ example_2_has_run = true
301
+ end
99
302
  end
303
+
304
+ @options.examples.clear
305
+
306
+ @options.add_example_group @example_group
307
+ @options.run_examples
308
+ example_1_has_run.should be_true
309
+ example_2_has_run.should be_true
100
310
  end
101
- @options.runner_type = runner_type
102
311
 
103
- runner = @options.create_behaviour_runner
104
- runner.class.should == runner_type
105
- runner.options.should === @options
312
+ it "keeps all example_definitions when options.examples is empty" do
313
+ example_1_has_run = false
314
+ example_2_has_run = false
315
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
316
+ it "runs 1" do
317
+ example_1_has_run = true
318
+ end
319
+ it "runs 2" do
320
+ example_2_has_run = true
321
+ end
322
+ end
323
+
324
+ @options.add_example_group @example_group
325
+ @options.run_examples
326
+ example_1_has_run.should be_true
327
+ example_2_has_run.should be_true
328
+ end
106
329
  end
107
330
 
108
- it "does not set Expectations differ when differ_class is not set" do
109
- @options.differ_class = nil
110
- Spec::Expectations.should_not_receive(:differ=)
111
- @options.create_behaviour_runner
331
+ describe "#add_example_group affecting example_group" do
332
+ it "adds example_group when example_group has example_definitions and is not shared" do
333
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
334
+ it "uses this example_group" do
335
+ end
336
+ end
337
+
338
+ @options.number_of_examples.should == 0
339
+ @options.add_example_group @example_group
340
+ @options.number_of_examples.should == 1
341
+ @options.example_groups.length.should == 1
342
+ end
112
343
  end
113
344
 
114
- it "sets Expectations differ when differ_class is set" do
115
- @options.differ_class = Spec::Expectations::Differs::Default
116
- Spec::Expectations.should_receive(:differ=).with(:anything).and_return do |arg|
117
- arg.class.should == Spec::Expectations::Differs::Default
345
+ describe "#remove_example_group" do
346
+ it "should remove the ExampleGroup from the list of ExampleGroups" do
347
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
348
+ end
349
+ @options.add_example_group @example_group
350
+ @options.example_groups.should include(@example_group)
351
+
352
+ @options.remove_example_group @example_group
353
+ @options.example_groups.should_not include(@example_group)
118
354
  end
119
- @options.create_behaviour_runner
120
355
  end
121
356
 
122
- it "creates a Reporter" do
123
- formatter = ::Spec::Runner::Formatter::BaseFormatter.new(:somewhere)
124
- @options.formatters << formatter
125
- reporter = Reporter.new(@formatters, @backtrace_tweaker)
126
- Reporter.should_receive(:new).with(@options.formatters, @options.backtrace_tweaker).and_return(reporter)
127
- @options.create_behaviour_runner
128
- @options.reporter.should === reporter
357
+ describe "#run_examples" do
358
+ describe "with global predicate matchers" do
359
+ it "defines global predicate matcher methods on ExampleMethods" do
360
+ Spec::Runner.configuration.stub!(:predicate_matchers).and_return({:this => :that?})
361
+ group = Class.new(::Spec::Example::ExampleGroupDouble).describe("Some Examples")
362
+ example = group.new(::Spec::Example::ExampleProxy.new)
363
+
364
+ @options.run_examples
365
+ example.this
366
+ end
367
+
368
+ after(:each) do
369
+ Spec::Example::ExampleMethods.class_eval "undef :this"
370
+ end
371
+ end
372
+
373
+ describe "with a mock framework defined as a Symbol" do
374
+ it "includes Spec::Adapters::MockFramework" do
375
+ Spec::Runner.configuration.stub!(:mock_framework).and_return('spec/adapters/mock_frameworks/rspec')
376
+
377
+ Spec::Example::ExampleMethods.should_receive(:include).with(Spec::Adapters::MockFramework)
378
+
379
+ @options.run_examples
380
+ end
381
+ end
382
+
383
+ describe "with a mock framework defined as a Module" do
384
+ it "includes the module in ExampleMethods" do
385
+ mod = Module.new
386
+ Spec::Runner.configuration.stub!(:mock_framework).and_return(mod)
387
+ Spec::Example::ExampleMethods.should_receive(:include).with(mod)
388
+ @options.run_examples
389
+ end
390
+ end
391
+
392
+ describe "when not given a custom runner" do
393
+ it "should use the standard" do
394
+ runner = ::Spec::Runner::ExampleGroupRunner.new(@options)
395
+ ::Spec::Runner::ExampleGroupRunner.should_receive(:new).
396
+ with(@options).
397
+ and_return(runner)
398
+ @options.user_input_for_runner = nil
399
+
400
+ @options.run_examples
401
+ end
402
+ end
403
+
404
+ describe "when given a custom runner" do
405
+ it "should use the custom runner" do
406
+ runner = Custom::ExampleGroupRunner.new(@options, nil)
407
+ Custom::ExampleGroupRunner.should_receive(:new).
408
+ with(@options, nil).
409
+ and_return(runner)
410
+ @options.user_input_for_runner = "Custom::ExampleGroupRunner"
411
+
412
+ @options.run_examples
413
+ end
414
+
415
+ it "should use the custom runner with extra options" do
416
+ runner = Custom::ExampleGroupRunner.new(@options, 'something')
417
+ Custom::ExampleGroupRunner.should_receive(:new).
418
+ with(@options, 'something').
419
+ and_return(runner)
420
+ @options.user_input_for_runner = "Custom::ExampleGroupRunner:something"
421
+
422
+ @options.run_examples
423
+ end
424
+ end
425
+
426
+ describe "when there are examples" do
427
+ before(:each) do
428
+ @example_group = Class.new(::Spec::Example::ExampleGroup)
429
+ @options.add_example_group @example_group
430
+ @options.formatters << Formatter::BaseTextFormatter.new(@options, @out)
431
+ end
432
+
433
+ it "runs the Examples and outputs the result" do
434
+ @options.run_examples
435
+ @out.string.should include("0 examples, 0 failures")
436
+ end
437
+
438
+ it "sets #examples_run? to true" do
439
+ @options.examples_run?.should be_false
440
+ @options.run_examples
441
+ @options.examples_run?.should be_true
442
+ end
443
+
444
+ describe "and the suite passes" do
445
+ before do
446
+ @example_group.should_receive(:run).and_return(true)
447
+ end
448
+
449
+ it "invokes after_suite_parts with true" do
450
+ success_result = nil
451
+ @options.after_suite_parts << lambda do |success|
452
+ success_result = success
453
+ end
454
+
455
+ @options.run_examples
456
+ success_result.should be_true
457
+ end
458
+ end
459
+
460
+ describe "and the suite fails" do
461
+ before(:each) do
462
+ @example_group.should_receive(:run).and_return(false)
463
+ end
464
+
465
+ it "invokes after_suite_parts with false" do
466
+ success_result = nil
467
+ @options.after_suite_parts << lambda do |success|
468
+ success_result = success
469
+ end
470
+
471
+ @options.run_examples
472
+ success_result.should be_false
473
+ end
474
+ end
475
+
476
+ describe "when using heckle runner" do
477
+ before(:each) do
478
+ @heckle_runner_mock = mock("HeckleRunner")
479
+ @options.heckle_runner = @heckle_runner_mock
480
+ end
481
+
482
+ it "should heckle" do
483
+ @heckle_runner_mock.should_receive(:heckle_with)
484
+ @options.run_examples
485
+ end
486
+
487
+ it "shouldn't heckle recursively" do
488
+ heckled = false
489
+ @heckle_runner_mock.should_receive(:heckle_with) {
490
+ heckled.should == false
491
+ heckled = true
492
+ @options.run_examples
493
+ }
494
+ @options.run_examples
495
+ end
496
+
497
+ it "shouldn't load spec files twice" do
498
+ example_runner = mock("ExampleGroupRunner")
499
+ example_runner_inside_heckle = mock("ExampleGroupRunner inside Heckle")
500
+
501
+ ExampleGroupRunner.should_receive(:new).twice.and_return(
502
+ example_runner, example_runner_inside_heckle
503
+ )
504
+
505
+ example_runner.stub!(:run)
506
+ example_runner.should_receive(:load_files)
507
+ @heckle_runner_mock.stub!(:heckle_with).and_return { @options.run_examples }
508
+ example_runner_inside_heckle.stub!(:run)
509
+ example_runner_inside_heckle.should_not_receive(:load_files)
510
+
511
+ @options.run_examples
512
+ end
513
+ end
514
+ end
515
+
516
+ describe "when there are no examples" do
517
+ before(:each) do
518
+ @options.formatters << Formatter::BaseTextFormatter.new(@options, @out)
519
+ end
520
+
521
+ it "does not run Examples and does not output a result" do
522
+ @options.run_examples
523
+ @out.string.should_not include("examples")
524
+ @out.string.should_not include("failures")
525
+ end
526
+
527
+ it "sets #examples_run? to false" do
528
+ @options.examples_run?.should be_false
529
+ @options.run_examples
530
+ @options.examples_run?.should be_false
531
+ end
532
+
533
+ it "invokes after_suite_parts with true" do
534
+ success_result = nil
535
+ @options.after_suite_parts << lambda do |success|
536
+ success_result = success
537
+ end
538
+
539
+ @options.run_examples
540
+ success_result.should be_true
541
+ end
542
+ end
129
543
  end
130
544
 
131
- it "sets colour and dry_run on the formatters" do
132
- @options.colour = true
133
- @options.dry_run = true
134
- formatter = ::Spec::Runner::Formatter::BaseTextFormatter.new(:somewhere)
135
- formatter.should_receive(:colour=).with(true)
136
- formatter.should_receive(:dry_run=).with(true)
137
- @options.formatters << formatter
138
- @options.create_behaviour_runner
545
+ describe "#add_dir_from_project_root_to_load_path" do
546
+ it "handles nil gracefully" do
547
+ load_path = double().as_null_object
548
+ @options.stub(:project_root).and_return(nil)
549
+ @options.add_dir_from_project_root_to_load_path(nil,load_path)
550
+ end
139
551
  end
140
552
  end
141
553
  end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Running an Example" do
4
+ it "should not output twice" do
5
+ true.should be_true
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require "spec_helper"
2
+
3
+ triggering_double_output = Spec::Runner.options
4
+ options = Spec::Runner::OptionParser.parse(
5
+ [File.dirname(__FILE__) + "/output_one_time_fixture.rb"], $stderr, $stdout
6
+ )
7
+ Spec::Runner::CommandLine.run(options)