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
@@ -35,11 +35,11 @@ module RCov
35
35
  def define
36
36
  desc "Verify that rcov coverage is at least #{threshold}%"
37
37
  task @name do
38
- total_coverage = nil
38
+ total_coverage = 0
39
39
 
40
40
  File.open(index_html).each_line do |line|
41
- if line =~ /<tt.*>(\d+\.\d+)%<\/tt>&nbsp;<\/td>/
42
- total_coverage = eval($1)
41
+ if line =~ /<tt class='coverage_total'>\s*(\d+\.\d+)%\s*<\/tt>/
42
+ total_coverage = $1.to_f
43
43
  break
44
44
  end
45
45
  end
@@ -49,4 +49,4 @@ module RCov
49
49
  end
50
50
  end
51
51
  end
52
- end
52
+ end
data/lib/spec/ruby.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Spec
2
+ module Ruby
3
+ class << self
4
+ def version
5
+ RUBY_VERSION
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,56 +1,78 @@
1
1
  module Spec
2
2
  module Runner
3
3
  class BacktraceTweaker
4
+ def initialize(*patterns)
5
+ @ignore_patterns = []
6
+ end
7
+
4
8
  def clean_up_double_slashes(line)
5
9
  line.gsub!('//','/')
6
10
  end
7
- end
8
11
 
9
- class NoisyBacktraceTweaker < BacktraceTweaker
10
- def tweak_backtrace(error, spec_name)
12
+ def ignore_patterns(*patterns)
13
+ # do nothing. Only QuietBacktraceTweaker ignores patterns.
14
+ end
15
+
16
+ def ignored_patterns
17
+ []
18
+ end
19
+
20
+ def tweak_backtrace(error)
11
21
  return if error.backtrace.nil?
12
- error.backtrace.each do |line|
13
- clean_up_double_slashes(line)
22
+ tweaked = error.backtrace.collect do |message|
23
+ clean_up_double_slashes(message)
24
+ kept_lines = message.split("\n").select do |line|
25
+ ignored_patterns.each do |ignore|
26
+ break if line =~ ignore
27
+ end
28
+ end
29
+ kept_lines.empty?? nil : kept_lines.join("\n")
14
30
  end
31
+ error.set_backtrace(tweaked.select {|line| line})
15
32
  end
16
33
  end
17
34
 
35
+ class NoisyBacktraceTweaker < BacktraceTweaker
36
+ end
37
+
18
38
  # Tweaks raised Exceptions to mask noisy (unneeded) parts of the backtrace
19
39
  class QuietBacktraceTweaker < BacktraceTweaker
20
40
  unless defined?(IGNORE_PATTERNS)
21
41
  root_dir = File.expand_path(File.join(__FILE__, '..', '..', '..', '..'))
22
- spec_files = Dir["#{root_dir}/lib/spec/*"].map do |path|
42
+ spec_files = Dir["#{root_dir}/lib/*"].map do |path|
23
43
  subpath = path[root_dir.length..-1]
24
44
  /#{subpath}/
25
45
  end
26
46
  IGNORE_PATTERNS = spec_files + [
47
+ /\/rspec-[^\/]*\/lib\/spec\//,
48
+ /\/spork-[^\/]*\/lib\/spork\//,
27
49
  /\/lib\/ruby\//,
28
50
  /bin\/spec:/,
51
+ /bin\/spork:/,
29
52
  /bin\/rcov:/,
30
- /lib\/rspec_on_rails/,
53
+ /lib\/rspec-rails/,
31
54
  /vendor\/rails/,
32
55
  # TextMate's Ruby and RSpec plugins
33
56
  /Ruby\.tmbundle\/Support\/tmruby.rb:/,
34
57
  /RSpec\.tmbundle\/Support\/lib/,
35
58
  /temp_textmate\./,
36
- /mock_frameworks\/rspec/
59
+ /mock_frameworks\/rspec/,
60
+ /spec_server/
37
61
  ]
38
62
  end
39
-
40
- def tweak_backtrace(error, spec_name)
41
- return if error.backtrace.nil?
42
- error.backtrace.collect! do |line|
43
- clean_up_double_slashes(line)
44
- IGNORE_PATTERNS.each do |ignore|
45
- if line =~ ignore
46
- line = nil
47
- break
48
- end
49
- end
50
- line
51
- end
52
- error.backtrace.compact!
63
+
64
+ def initialize(*patterns)
65
+ super
66
+ ignore_patterns(*patterns)
67
+ end
68
+
69
+ def ignore_patterns(*patterns)
70
+ @ignore_patterns += patterns.flatten.map { |pattern| Regexp.new(pattern) }
71
+ end
72
+
73
+ def ignored_patterns
74
+ IGNORE_PATTERNS + @ignore_patterns
53
75
  end
54
76
  end
55
77
  end
56
- end
78
+ end
@@ -0,0 +1,14 @@
1
+ module Spec
2
+ module Runner
3
+ class ClassAndArgumentsParser
4
+ def self.parse(s)
5
+ if s =~ /([a-zA-Z_]+(?:::[a-zA-Z_]+)*):?(.*)/
6
+ arg = $2 == "" ? nil : $2
7
+ [$1, arg]
8
+ else
9
+ raise "Couldn't parse #{s.inspect}"
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -2,21 +2,14 @@ require 'spec/runner/option_parser'
2
2
 
3
3
  module Spec
4
4
  module Runner
5
- # Facade to run specs without having to fork a new ruby process (using `spec ...`)
6
5
  class CommandLine
7
- # Runs specs. +argv+ is the commandline args as per the spec commandline API, +err+
8
- # and +out+ are the streams output will be written to. +exit+ tells whether or
9
- # not a system exit should be called after the specs are run and
10
- # +warn_if_no_files+ tells whether or not a warning (the help message)
11
- # should be printed to +err+ in case no files are specified.
12
- def self.run(argv, err, out, exit=true, warn_if_no_files=true)
13
- old_behaviour_runner = defined?($behaviour_runner) ? $behaviour_runner : nil
14
- $behaviour_runner = OptionParser.new.create_behaviour_runner(argv, err, out, warn_if_no_files)
15
- return if $behaviour_runner.nil? # This is the case if we use --drb
16
-
17
- $behaviour_runner.run(argv, exit)
18
- $behaviour_runner = old_behaviour_runner
6
+ def self.run(tmp_options=Spec::Runner.options)
7
+ orig_options = Spec::Runner.options
8
+ Spec::Runner.use tmp_options
9
+ tmp_options.run_examples
10
+ ensure
11
+ Spec::Runner.use orig_options
19
12
  end
20
13
  end
21
14
  end
22
- end
15
+ end
@@ -0,0 +1,202 @@
1
+ module Spec
2
+ module Runner
3
+ class Configuration
4
+ include Spec::Example::ArgsAndOptions
5
+
6
+ # Chooses what mock framework to use. Example:
7
+ #
8
+ # Spec::Runner.configure do |config|
9
+ # config.mock_with :rspec, :mocha, :flexmock, or :rr
10
+ # end
11
+ #
12
+ # To use any other mock framework, you'll have to provide your own
13
+ # adapter. This is simply a module that responds to the following
14
+ # methods:
15
+ #
16
+ # setup_mocks_for_rspec
17
+ # verify_mocks_for_rspec
18
+ # teardown_mocks_for_rspec.
19
+ #
20
+ # These are your hooks into the lifecycle of a given example. RSpec will
21
+ # call setup_mocks_for_rspec before running anything else in each
22
+ # Example. After executing the #after methods, RSpec will then call
23
+ # verify_mocks_for_rspec and teardown_mocks_for_rspec (this is
24
+ # guaranteed to run even if there are failures in
25
+ # verify_mocks_for_rspec).
26
+ #
27
+ # Once you've defined this module, you can pass that to mock_with:
28
+ #
29
+ # Spec::Runner.configure do |config|
30
+ # config.mock_with MyMockFrameworkAdapter
31
+ # end
32
+ #
33
+ def mock_with(mock_framework)
34
+ @mock_framework = case mock_framework
35
+ when Symbol
36
+ mock_framework_path(mock_framework.to_s)
37
+ else
38
+ mock_framework
39
+ end
40
+ end
41
+
42
+ def mock_framework # :nodoc:
43
+ @mock_framework ||= mock_framework_path("rspec")
44
+ end
45
+
46
+ # :call-seq:
47
+ # include(Some::Helpers)
48
+ # include(Some::Helpers, More::Helpers)
49
+ # include(My::Helpers, :type => :key)
50
+ #
51
+ # Declares modules to be included in multiple example groups
52
+ # (<tt>describe</tt> blocks). With no <tt>:type</tt>, the modules listed
53
+ # will be included in all example groups.
54
+ #
55
+ # Use <tt>:type</tt> to restrict
56
+ # the inclusion to a subset of example groups. The value assigned to
57
+ # <tt>:type</tt> should be a key that maps to a class that is either a
58
+ # subclass of Spec::Example::ExampleGroup or extends
59
+ # Spec::Example::ExampleGroupMethods and includes
60
+ # Spec::Example::ExampleMethods.
61
+ #
62
+ # For example, the rspec-rails gem/plugin extends Test::Unit::TestCase
63
+ # with Spec::Example::ExampleGroupMethods and includes
64
+ # Spec::Example::ExampleMethods in it. So if you have a module of helper
65
+ # methods for controller examples, you could do this:
66
+ #
67
+ # config.include(ControllerExampleHelpers, :type => :controller)
68
+ #
69
+ # Only example groups that have that type will get the modules included:
70
+ #
71
+ # describe Account, :type => :model do
72
+ # # Will *not* include ControllerExampleHelpers
73
+ # end
74
+ #
75
+ # describe AccountsController, :type => :controller do
76
+ # # *Will* include ControllerExampleHelpers
77
+ # end
78
+ #
79
+ def include(*modules_and_options)
80
+ include_or_extend(:include, *modules_and_options)
81
+ end
82
+
83
+ # :call-seq:
84
+ # extend(Some::Helpers)
85
+ # extend(Some::Helpers, More::Helpers)
86
+ # extend(My::Helpers, :type => :key)
87
+ #
88
+ # Works just like #include, but extends the example groups
89
+ # with the modules rather than including them.
90
+ def extend(*modules_and_options)
91
+ include_or_extend(:extend, *modules_and_options)
92
+ end
93
+
94
+ # Appends a global <tt>before</tt> block to all example groups.
95
+ # <tt>scope</tt> can be any of <tt>:each</tt> (default), <tt>:all</tt>, or
96
+ # <tt>:suite</tt>. When <tt>:each</tt>, the block is executed before each
97
+ # example. When <tt>:all</tt>, the block is executed once per example
98
+ # group, before any of its examples are run. When <tt>:suite</tt> the
99
+ # block is run once before the entire suite is run.
100
+ def append_before(scope = :each, options={}, &proc)
101
+ add_callback(:append_before, scope, options, &proc)
102
+ end
103
+ alias_method :before, :append_before
104
+
105
+ # Prepends a global <tt>before</tt> block to all example groups.
106
+ #
107
+ # See <tt>append_before</tt> for scoping semantics.
108
+ def prepend_before(scope = :each, options={}, &proc)
109
+ add_callback(:prepend_before, scope, options, &proc)
110
+ end
111
+
112
+ # Prepends a global <tt>after</tt> block to all example groups.
113
+ #
114
+ # See <tt>append_before</tt> for scoping semantics.
115
+ def prepend_after(scope = :each, options={}, &proc)
116
+ add_callback(:prepend_after, scope, options, &proc)
117
+ end
118
+ alias_method :after, :prepend_after
119
+
120
+ # Appends a global <tt>after</tt> block to all example groups.
121
+ #
122
+ # See <tt>append_before</tt> for scoping semantics.
123
+ def append_after(scope = :each, options={}, &proc)
124
+ add_callback(:append_after, scope, options, &proc)
125
+ end
126
+
127
+ # DEPRECATED - use Spec::Matchers::DSL instead
128
+ #
129
+ # Defines global predicate matchers. Example:
130
+ #
131
+ # config.predicate_matchers[:swim] = :can_swim?
132
+ #
133
+ # This makes it possible to say:
134
+ #
135
+ # person.should swim # passes if person.can_swim? returns true
136
+ #
137
+ def predicate_matchers
138
+ @predicate_matchers ||= Spec::HashWithDeprecationNotice.new("predicate_matchers", "the new Matcher DSL")
139
+ end
140
+
141
+ # Adds patterns to the list of patterns ignored in the backtrace when a
142
+ # failure is output by rspec. Example:
143
+ #
144
+ # config.ignore_backtrace_patterns /spork/, /shoulda/, "/some/weird/path/"
145
+ #
146
+ # When quiet backtraces are turned on (default), this will exclude any
147
+ # lines that match any of the Regexps and Strings passed.
148
+ #
149
+ def ignore_backtrace_patterns(*patterns)
150
+ @ignored_backtrace_patterns ||= []
151
+ @ignored_backtrace_patterns += patterns
152
+ end
153
+
154
+ def ignored_backtrace_patterns # :nodoc:
155
+ @ignored_backtrace_patterns ||= []
156
+ end
157
+
158
+ def suppress_deprecation_warnings!
159
+ @suppress_deprecation_warnings = true
160
+ end
161
+
162
+ def suppress_deprecation_warnings?
163
+ @suppress_deprecation_warnings ||= false
164
+ end
165
+
166
+ private
167
+
168
+ def include_or_extend(action, *args)
169
+ modules, options = args_and_options(*args)
170
+ [get_type_from_options(options)].flatten.each do |required_example_group|
171
+ required_example_group = required_example_group.to_sym if required_example_group
172
+ modules.each do |mod|
173
+ Spec::Example::ExampleGroupFactory[required_example_group].__send__(action, mod)
174
+ end
175
+ end
176
+ end
177
+
178
+ def add_callback(sym, *args, &proc)
179
+ scope, options = scope_and_options(*args)
180
+ example_group = Spec::Example::ExampleGroupFactory[get_type_from_options(options)]
181
+ example_group.__send__(sym, scope, &proc)
182
+ end
183
+
184
+ def get_type_from_options(options)
185
+ options[:type] || options[:behaviour_type]
186
+ end
187
+
188
+ def mock_framework_path(framework_name)
189
+ "spec/adapters/mock_frameworks/#{framework_name}"
190
+ end
191
+
192
+ def scope_and_options(*args) # :nodoc:
193
+ args, options = args_and_options(*args)
194
+ return scope_from(*args), options
195
+ end
196
+
197
+ def scope_from(*args) # :nodoc:
198
+ args[0] || :each
199
+ end
200
+ end
201
+ end
202
+ end
@@ -0,0 +1,93 @@
1
+ require 'spec/runner/differs/load-diff-lcs'
2
+ require 'pp'
3
+
4
+ module Spec
5
+ module Expectations
6
+ module Differs
7
+ unless defined?(Spec::Expectations::Differs::Default)
8
+ class Default
9
+ def initialize(options)
10
+ @options = options
11
+ end
12
+
13
+ # This is snagged from diff/lcs/ldiff.rb (which is a commandline tool)
14
+ def diff_as_string(data_new, data_old)
15
+ data_old = data_old.split(/\n/).map! { |e| e.chomp }
16
+ data_new = data_new.split(/\n/).map! { |e| e.chomp }
17
+ output = ""
18
+ diffs = Diff::LCS.diff(data_old, data_new)
19
+ return output if diffs.empty?
20
+ oldhunk = hunk = nil
21
+ file_length_difference = 0
22
+ diffs.each do |piece|
23
+ begin
24
+ hunk = Diff::LCS::Hunk.new(data_old, data_new, piece, context_lines,
25
+ file_length_difference)
26
+ file_length_difference = hunk.file_length_difference
27
+ next unless oldhunk
28
+ # Hunks may overlap, which is why we need to be careful when our
29
+ # diff includes lines of context. Otherwise, we might print
30
+ # redundant lines.
31
+ if (context_lines > 0) and hunk.overlaps?(oldhunk)
32
+ hunk.unshift(oldhunk)
33
+ else
34
+ output << oldhunk.diff(format)
35
+ end
36
+ ensure
37
+ oldhunk = hunk
38
+ output << "\n"
39
+ end
40
+ end
41
+ #Handle the last remaining hunk
42
+ output << oldhunk.diff(format) << "\n"
43
+ end
44
+
45
+ def diff_as_object(target,expected)
46
+ diff_as_string(PP.pp(target,""), PP.pp(expected,""))
47
+ end
48
+
49
+ def diff_as_hash(target, expected)
50
+ contains_hash = false
51
+ contains_array = false
52
+
53
+ extra_expected_keys = expected.keys - target.keys
54
+ extra_target_keys = target.keys - expected.keys
55
+
56
+ o = "\n"
57
+
58
+ o << "Expected hash contains keys that target hash does not: " << extra_expected_keys.inspect << "\n" if !extra_expected_keys.empty?
59
+ o << "Target hash contains keys that expected hash does not: " << extra_target_keys.inspect << "\n" if !extra_target_keys.empty?
60
+
61
+ expected.delete_if do |key, value|
62
+ contains_hash = true if value.is_a?(Hash)
63
+ contains_array = true if value.is_a?(Array)
64
+ target[key] == value
65
+ end
66
+
67
+ expected.keys.sort { |a,b| a.to_s <=> b.to_s }.each do |key|
68
+ o << "Expected the key #{key.inspect} to be #{expected[key].inspect}, but was #{target[key].inspect}\n"
69
+ end
70
+
71
+ o << "\n"
72
+
73
+ if contains_hash || contains_array
74
+ o << diff_as_object(target, expected)
75
+ else
76
+ o
77
+ end
78
+ end
79
+
80
+ protected
81
+ def format
82
+ @options.diff_format
83
+ end
84
+
85
+ def context_lines
86
+ @options.context_lines
87
+ end
88
+ end
89
+
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,12 @@
1
+ begin
2
+ require 'diff/lcs'
3
+ rescue LoadError
4
+ begin
5
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
6
+ require 'diff/lcs'
7
+ rescue LoadError
8
+ raise "You must gem install diff-lcs to use diffing"
9
+ end
10
+ end
11
+
12
+ require 'diff/lcs/hunk'
@@ -4,18 +4,29 @@ module Spec
4
4
  module Runner
5
5
  # Facade to run specs by connecting to a DRB server
6
6
  class DrbCommandLine
7
+
8
+ def self.port(options)
9
+ (options.drb_port || ENV["RSPEC_DRB"] || 8989).to_i
10
+ end
11
+
7
12
  # Runs specs on a DRB server. Note that this API is similar to that of
8
13
  # CommandLine - making it possible for clients to use both interchangeably.
9
- def self.run(argv, stderr, stdout, exit=true, warn_if_no_files=true)
14
+ def self.run(options)
10
15
  begin
11
- DRb.start_service
12
- spec_server = DRbObject.new_with_uri("druby://localhost:8989")
13
- spec_server.run(argv, stderr, stdout)
16
+ begin; \
17
+ DRb.start_service("druby://localhost:0"); \
18
+ rescue SocketError, Errno::EADDRNOTAVAIL; \
19
+ DRb.start_service("druby://:0"); \
20
+ end
21
+ spec_server = DRbObject.new_with_uri("druby://127.0.0.1:#{port(options)}")
22
+ spec_server.run(options.argv, options.error_stream, options.output_stream)
23
+ true
14
24
  rescue DRb::DRbConnError
15
- stderr.puts "No server is running"
16
- exit 1 if exit
25
+ options.error_stream.puts "No server is running"
26
+ false
17
27
  end
18
28
  end
29
+
19
30
  end
20
31
  end
21
- end
32
+ end
@@ -0,0 +1,58 @@
1
+ module Spec
2
+ module Runner
3
+ class ExampleGroupRunner
4
+ def initialize(options)
5
+ @options = options
6
+ end
7
+
8
+ def load_files(files)
9
+ $KCODE = 'u' if RUBY_VERSION.to_f < 1.9
10
+ # It's important that loading files (or choosing not to) stays the
11
+ # responsibility of the ExampleGroupRunner. Some implementations (like)
12
+ # the one using DRb may choose *not* to load files, but instead tell
13
+ # someone else to do it over the wire.
14
+ files.each do |file|
15
+ load file
16
+ end
17
+ end
18
+
19
+ def run
20
+ prepare
21
+ success = true
22
+ example_groups.each do |example_group|
23
+ success = success & example_group.run(@options)
24
+ end
25
+ finish
26
+ success
27
+ end
28
+
29
+ protected
30
+
31
+ def prepare
32
+ reporter.start(number_of_examples)
33
+ example_groups.reverse! if reverse
34
+ end
35
+
36
+ def finish
37
+ reporter.end
38
+ reporter.dump
39
+ end
40
+
41
+ def reporter
42
+ @options.reporter
43
+ end
44
+
45
+ def reverse
46
+ @options.reverse
47
+ end
48
+
49
+ def example_groups
50
+ @options.example_groups
51
+ end
52
+
53
+ def number_of_examples
54
+ @options.number_of_examples
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,50 +1,9 @@
1
1
  module Kernel
2
- # Creates and registers an instance of a Spec::DSL::Behaviour (or a subclass).
3
- # The instantiated behaviour class depends on the directory of the file
4
- # calling this method. For example, Spec::Rails will use different
5
- # classes for specs living in <tt>spec/models</tt>, <tt>spec/helpers</tt>,
6
- # <tt>spec/views</tt> and <tt>spec/controllers</tt>.
7
- #
8
- # It is also possible to override autodiscovery of the behaviour class
9
- # with an options Hash as the last argument:
10
- #
11
- # describe "name", :behaviour_type => :something_special do ...
12
- #
13
- # The reason for using different behaviour classes is to have
14
- # different matcher methods available from within the <tt>describe</tt>
15
- # block.
16
- #
17
- # See Spec::DSL::BehaviourFactory#add_behaviour_class for details about
18
- # how to register special Spec::DSL::Behaviour implementations.
19
- #
20
- def describe(*args, &block)
21
- raise ArgumentError if args.empty?
22
- args << {} unless Hash === args.last
23
- args.last[:spec_path] = caller(0)[1]
24
- register_behaviour(Spec::DSL::BehaviourFactory.create(*args, &block))
25
- end
26
- alias :context :describe
27
-
28
- def respond_to(*names)
29
- Spec::Matchers::RespondTo.new(*names)
30
- end
31
-
32
- private
33
-
34
- def register_behaviour(behaviour)
35
- if behaviour.shared?
36
- Spec::DSL::Behaviour.add_shared_behaviour(behaviour)
37
- else
38
- behaviour_runner.add_behaviour(behaviour)
39
- end
40
- end
41
-
42
- def behaviour_runner
43
- # TODO: Figure out a better way to get this considered "covered" and keep this statement on multiple lines
44
- unless $behaviour_runner; \
45
- $behaviour_runner = ::Spec::Runner::OptionParser.new.create_behaviour_runner(ARGV.dup, STDERR, STDOUT, false); \
46
- at_exit { $behaviour_runner.run(nil, false) }; \
2
+ unless respond_to?(:debugger)
3
+ # Start a debugging session if ruby-debug is loaded with the -u/--debugger option
4
+ def debugger(steps=1)
5
+ # If not then just comment and proceed
6
+ $stderr.puts "debugger statement ignored, use -u or --debugger option on rspec to enable debugging"
47
7
  end
48
- $behaviour_runner
49
8
  end
50
9
  end