dchelimsky-rspec 1.1.10

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 (404) hide show
  1. data/History.txt +1192 -0
  2. data/License.txt +22 -0
  3. data/Manifest.txt +403 -0
  4. data/README.txt +39 -0
  5. data/Rakefile +90 -0
  6. data/TODO.txt +10 -0
  7. data/bin/autospec +4 -0
  8. data/bin/spec +4 -0
  9. data/examples/pure/autogenerated_docstrings_example.rb +19 -0
  10. data/examples/pure/before_and_after_example.rb +40 -0
  11. data/examples/pure/behave_as_example.rb +45 -0
  12. data/examples/pure/custom_expectation_matchers.rb +54 -0
  13. data/examples/pure/custom_formatter.rb +12 -0
  14. data/examples/pure/dynamic_spec.rb +9 -0
  15. data/examples/pure/file_accessor.rb +19 -0
  16. data/examples/pure/file_accessor_spec.rb +38 -0
  17. data/examples/pure/greeter_spec.rb +31 -0
  18. data/examples/pure/helper_method_example.rb +14 -0
  19. data/examples/pure/io_processor.rb +8 -0
  20. data/examples/pure/io_processor_spec.rb +21 -0
  21. data/examples/pure/legacy_spec.rb +11 -0
  22. data/examples/pure/mocking_example.rb +27 -0
  23. data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
  24. data/examples/pure/nested_classes_example.rb +36 -0
  25. data/examples/pure/partial_mock_example.rb +29 -0
  26. data/examples/pure/pending_example.rb +20 -0
  27. data/examples/pure/predicate_example.rb +27 -0
  28. data/examples/pure/priority.txt +1 -0
  29. data/examples/pure/shared_example_group_example.rb +81 -0
  30. data/examples/pure/shared_stack_examples.rb +38 -0
  31. data/examples/pure/spec_helper.rb +3 -0
  32. data/examples/pure/stack.rb +36 -0
  33. data/examples/pure/stack_spec.rb +63 -0
  34. data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
  35. data/examples/pure/stubbing_example.rb +69 -0
  36. data/examples/pure/yielding_example.rb +33 -0
  37. data/examples/stories/adder.rb +13 -0
  38. data/examples/stories/addition +34 -0
  39. data/examples/stories/addition.rb +9 -0
  40. data/examples/stories/calculator.rb +65 -0
  41. data/examples/stories/game-of-life/.loadpath +5 -0
  42. data/examples/stories/game-of-life/README.txt +21 -0
  43. data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
  44. data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
  45. data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
  46. data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
  47. data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
  48. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
  49. data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
  50. data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
  51. data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
  52. data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
  53. data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
  54. data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
  55. data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
  56. data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
  57. data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
  58. data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
  59. data/examples/stories/game-of-life/life/game.rb +23 -0
  60. data/examples/stories/game-of-life/life/grid.rb +43 -0
  61. data/examples/stories/game-of-life/life.rb +3 -0
  62. data/examples/stories/helper.rb +9 -0
  63. data/examples/stories/steps/addition_steps.rb +18 -0
  64. data/failing_examples/README.txt +7 -0
  65. data/failing_examples/diffing_spec.rb +36 -0
  66. data/failing_examples/failing_autogenerated_docstrings_example.rb +19 -0
  67. data/failing_examples/failure_in_setup.rb +10 -0
  68. data/failing_examples/failure_in_teardown.rb +10 -0
  69. data/failing_examples/mocking_example.rb +40 -0
  70. data/failing_examples/mocking_with_flexmock.rb +26 -0
  71. data/failing_examples/mocking_with_mocha.rb +25 -0
  72. data/failing_examples/mocking_with_rr.rb +27 -0
  73. data/failing_examples/partial_mock_example.rb +20 -0
  74. data/failing_examples/predicate_example.rb +29 -0
  75. data/failing_examples/raising_example.rb +47 -0
  76. data/failing_examples/spec_helper.rb +3 -0
  77. data/failing_examples/syntax_error_example.rb +7 -0
  78. data/failing_examples/team_spec.rb +44 -0
  79. data/failing_examples/timeout_behaviour.rb +7 -0
  80. data/init.rb +9 -0
  81. data/lib/autotest/discover.rb +3 -0
  82. data/lib/autotest/rspec.rb +46 -0
  83. data/lib/spec/adapters/ruby_engine/mri.rb +8 -0
  84. data/lib/spec/adapters/ruby_engine/rubinius.rb +8 -0
  85. data/lib/spec/adapters/ruby_engine.rb +26 -0
  86. data/lib/spec/adapters.rb +1 -0
  87. data/lib/spec/example/before_and_after_hooks.rb +93 -0
  88. data/lib/spec/example/configuration.rb +167 -0
  89. data/lib/spec/example/errors.rb +30 -0
  90. data/lib/spec/example/example_group.rb +25 -0
  91. data/lib/spec/example/example_group_factory.rb +81 -0
  92. data/lib/spec/example/example_group_methods.rb +368 -0
  93. data/lib/spec/example/example_matcher.rb +44 -0
  94. data/lib/spec/example/example_methods.rb +105 -0
  95. data/lib/spec/example/module_reopening_fix.rb +21 -0
  96. data/lib/spec/example/pending.rb +18 -0
  97. data/lib/spec/example/shared_example_group.rb +52 -0
  98. data/lib/spec/example.rb +12 -0
  99. data/lib/spec/expectations/differs/default.rb +66 -0
  100. data/lib/spec/expectations/errors.rb +12 -0
  101. data/lib/spec/expectations/extensions/object.rb +63 -0
  102. data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  103. data/lib/spec/expectations/extensions.rb +2 -0
  104. data/lib/spec/expectations/handler.rb +52 -0
  105. data/lib/spec/expectations.rb +56 -0
  106. data/lib/spec/extensions/class.rb +24 -0
  107. data/lib/spec/extensions/main.rb +87 -0
  108. data/lib/spec/extensions/metaclass.rb +7 -0
  109. data/lib/spec/extensions/object.rb +6 -0
  110. data/lib/spec/extensions.rb +4 -0
  111. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  112. data/lib/spec/interop/test/unit/testcase.rb +71 -0
  113. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  114. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  115. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
  116. data/lib/spec/interop/test.rb +12 -0
  117. data/lib/spec/matchers/be.rb +221 -0
  118. data/lib/spec/matchers/be_close.rb +37 -0
  119. data/lib/spec/matchers/change.rb +148 -0
  120. data/lib/spec/matchers/eql.rb +43 -0
  121. data/lib/spec/matchers/equal.rb +43 -0
  122. data/lib/spec/matchers/exist.rb +22 -0
  123. data/lib/spec/matchers/has.rb +34 -0
  124. data/lib/spec/matchers/have.rb +150 -0
  125. data/lib/spec/matchers/include.rb +77 -0
  126. data/lib/spec/matchers/match.rb +41 -0
  127. data/lib/spec/matchers/operator_matcher.rb +79 -0
  128. data/lib/spec/matchers/raise_error.rb +132 -0
  129. data/lib/spec/matchers/respond_to.rb +46 -0
  130. data/lib/spec/matchers/satisfy.rb +47 -0
  131. data/lib/spec/matchers/simple_matcher.rb +132 -0
  132. data/lib/spec/matchers/throw_symbol.rb +74 -0
  133. data/lib/spec/matchers.rb +162 -0
  134. data/lib/spec/mocks/argument_constraints.rb +165 -0
  135. data/lib/spec/mocks/argument_expectation.rb +49 -0
  136. data/lib/spec/mocks/error_generator.rb +84 -0
  137. data/lib/spec/mocks/errors.rb +10 -0
  138. data/lib/spec/mocks/extensions/object.rb +3 -0
  139. data/lib/spec/mocks/extensions.rb +1 -0
  140. data/lib/spec/mocks/framework.rb +15 -0
  141. data/lib/spec/mocks/message_expectation.rb +331 -0
  142. data/lib/spec/mocks/methods.rb +51 -0
  143. data/lib/spec/mocks/mock.rb +56 -0
  144. data/lib/spec/mocks/order_group.rb +29 -0
  145. data/lib/spec/mocks/proxy.rb +224 -0
  146. data/lib/spec/mocks/space.rb +28 -0
  147. data/lib/spec/mocks/spec_methods.rb +46 -0
  148. data/lib/spec/mocks.rb +200 -0
  149. data/lib/spec/rake/spectask.rb +227 -0
  150. data/lib/spec/rake/verify_rcov.rb +52 -0
  151. data/lib/spec/runner/backtrace_tweaker.rb +56 -0
  152. data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
  153. data/lib/spec/runner/command_line.rb +17 -0
  154. data/lib/spec/runner/drb_command_line.rb +20 -0
  155. data/lib/spec/runner/example_group_runner.rb +59 -0
  156. data/lib/spec/runner/formatter/base_formatter.rb +79 -0
  157. data/lib/spec/runner/formatter/base_text_formatter.rb +126 -0
  158. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +27 -0
  159. data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
  160. data/lib/spec/runner/formatter/html_formatter.rb +337 -0
  161. data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
  162. data/lib/spec/runner/formatter/profile_formatter.rb +51 -0
  163. data/lib/spec/runner/formatter/progress_bar_formatter.rb +34 -0
  164. data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
  165. data/lib/spec/runner/formatter/specdoc_formatter.rb +39 -0
  166. data/lib/spec/runner/formatter/story/html_formatter.rb +174 -0
  167. data/lib/spec/runner/formatter/story/plain_text_formatter.rb +194 -0
  168. data/lib/spec/runner/formatter/story/progress_bar_formatter.rb +42 -0
  169. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  170. data/lib/spec/runner/heckle_runner.rb +72 -0
  171. data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
  172. data/lib/spec/runner/option_parser.rb +205 -0
  173. data/lib/spec/runner/options.rb +320 -0
  174. data/lib/spec/runner/reporter.rb +167 -0
  175. data/lib/spec/runner/spec_parser.rb +71 -0
  176. data/lib/spec/runner.rb +213 -0
  177. data/lib/spec/story/extensions/main.rb +86 -0
  178. data/lib/spec/story/extensions/regexp.rb +9 -0
  179. data/lib/spec/story/extensions/string.rb +9 -0
  180. data/lib/spec/story/extensions.rb +3 -0
  181. data/lib/spec/story/given_scenario.rb +14 -0
  182. data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
  183. data/lib/spec/story/runner/scenario_collector.rb +18 -0
  184. data/lib/spec/story/runner/scenario_runner.rb +54 -0
  185. data/lib/spec/story/runner/story_mediator.rb +137 -0
  186. data/lib/spec/story/runner/story_parser.rb +247 -0
  187. data/lib/spec/story/runner/story_runner.rb +70 -0
  188. data/lib/spec/story/runner.rb +59 -0
  189. data/lib/spec/story/scenario.rb +14 -0
  190. data/lib/spec/story/step.rb +70 -0
  191. data/lib/spec/story/step_group.rb +89 -0
  192. data/lib/spec/story/step_mother.rb +38 -0
  193. data/lib/spec/story/story.rb +39 -0
  194. data/lib/spec/story/world.rb +128 -0
  195. data/lib/spec/story.rb +10 -0
  196. data/lib/spec/version.rb +13 -0
  197. data/lib/spec.rb +32 -0
  198. data/plugins/mock_frameworks/flexmock.rb +23 -0
  199. data/plugins/mock_frameworks/mocha.rb +19 -0
  200. data/plugins/mock_frameworks/rr.rb +21 -0
  201. data/plugins/mock_frameworks/rspec.rb +20 -0
  202. data/rake_tasks/examples.rake +7 -0
  203. data/rake_tasks/examples_with_rcov.rake +9 -0
  204. data/rake_tasks/failing_examples_with_html.rake +9 -0
  205. data/rake_tasks/verify_rcov.rake +7 -0
  206. data/rspec.gemspec +42 -0
  207. data/spec/README.jruby +15 -0
  208. data/spec/autotest/autotest_helper.rb +6 -0
  209. data/spec/autotest/autotest_matchers.rb +47 -0
  210. data/spec/autotest/discover_spec.rb +19 -0
  211. data/spec/autotest/rspec_spec.rb +150 -0
  212. data/spec/rspec_suite.rb +6 -0
  213. data/spec/ruby_forker.rb +13 -0
  214. data/spec/spec/adapters/ruby_engine_spec.rb +16 -0
  215. data/spec/spec/example/configuration_spec.rb +296 -0
  216. data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
  217. data/spec/spec/example/example_group_factory_spec.rb +165 -0
  218. data/spec/spec/example/example_group_methods_spec.rb +584 -0
  219. data/spec/spec/example/example_group_spec.rb +683 -0
  220. data/spec/spec/example/example_matcher_spec.rb +96 -0
  221. data/spec/spec/example/example_methods_spec.rb +169 -0
  222. data/spec/spec/example/example_runner_spec.rb +194 -0
  223. data/spec/spec/example/nested_example_group_spec.rb +71 -0
  224. data/spec/spec/example/pending_module_spec.rb +145 -0
  225. data/spec/spec/example/predicate_matcher_spec.rb +21 -0
  226. data/spec/spec/example/shared_example_group_spec.rb +281 -0
  227. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  228. data/spec/spec/expectations/differs/default_spec.rb +127 -0
  229. data/spec/spec/expectations/extensions/object_spec.rb +95 -0
  230. data/spec/spec/expectations/fail_with_spec.rb +71 -0
  231. data/spec/spec/extensions/main_spec.rb +71 -0
  232. data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
  233. data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
  234. data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
  235. data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
  236. data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
  237. data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
  238. data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
  239. data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
  240. data/spec/spec/interop/test/unit/spec_spec.rb +52 -0
  241. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
  242. data/spec/spec/interop/test/unit/testcase_spec.rb +49 -0
  243. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  244. data/spec/spec/matchers/be_close_spec.rb +39 -0
  245. data/spec/spec/matchers/be_spec.rb +248 -0
  246. data/spec/spec/matchers/change_spec.rb +329 -0
  247. data/spec/spec/matchers/description_generation_spec.rb +153 -0
  248. data/spec/spec/matchers/eql_spec.rb +28 -0
  249. data/spec/spec/matchers/equal_spec.rb +28 -0
  250. data/spec/spec/matchers/exist_spec.rb +57 -0
  251. data/spec/spec/matchers/handler_spec.rb +150 -0
  252. data/spec/spec/matchers/has_spec.rb +63 -0
  253. data/spec/spec/matchers/have_spec.rb +394 -0
  254. data/spec/spec/matchers/include_spec.rb +64 -0
  255. data/spec/spec/matchers/match_spec.rb +37 -0
  256. data/spec/spec/matchers/matcher_methods_spec.rb +78 -0
  257. data/spec/spec/matchers/mock_constraint_matchers_spec.rb +24 -0
  258. data/spec/spec/matchers/operator_matcher_spec.rb +191 -0
  259. data/spec/spec/matchers/raise_error_spec.rb +315 -0
  260. data/spec/spec/matchers/respond_to_spec.rb +54 -0
  261. data/spec/spec/matchers/satisfy_spec.rb +36 -0
  262. data/spec/spec/matchers/simple_matcher_spec.rb +93 -0
  263. data/spec/spec/matchers/throw_symbol_spec.rb +54 -0
  264. data/spec/spec/mocks/any_number_of_times_spec.rb +36 -0
  265. data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
  266. data/spec/spec/mocks/at_least_spec.rb +97 -0
  267. data/spec/spec/mocks/at_most_spec.rb +93 -0
  268. data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
  269. data/spec/spec/mocks/bug_report_10263_spec.rb +24 -0
  270. data/spec/spec/mocks/bug_report_11545_spec.rb +33 -0
  271. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  272. data/spec/spec/mocks/bug_report_496.rb +17 -0
  273. data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
  274. data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
  275. data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
  276. data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
  277. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +95 -0
  278. data/spec/spec/mocks/hash_including_matcher_spec.rb +53 -0
  279. data/spec/spec/mocks/mock_ordering_spec.rb +84 -0
  280. data/spec/spec/mocks/mock_space_spec.rb +54 -0
  281. data/spec/spec/mocks/mock_spec.rb +555 -0
  282. data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
  283. data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
  284. data/spec/spec/mocks/null_object_mock_spec.rb +54 -0
  285. data/spec/spec/mocks/once_counts_spec.rb +53 -0
  286. data/spec/spec/mocks/options_hash_spec.rb +35 -0
  287. data/spec/spec/mocks/partial_mock_spec.rb +149 -0
  288. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
  289. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +130 -0
  290. data/spec/spec/mocks/precise_counts_spec.rb +52 -0
  291. data/spec/spec/mocks/record_messages_spec.rb +26 -0
  292. data/spec/spec/mocks/stub_spec.rb +188 -0
  293. data/spec/spec/mocks/twice_counts_spec.rb +67 -0
  294. data/spec/spec/package/bin_spec_spec.rb +22 -0
  295. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  296. data/spec/spec/runner/command_line_spec.rb +141 -0
  297. data/spec/spec/runner/drb_command_line_spec.rb +97 -0
  298. data/spec/spec/runner/empty_file.txt +0 -0
  299. data/spec/spec/runner/examples.txt +2 -0
  300. data/spec/spec/runner/failed.txt +3 -0
  301. data/spec/spec/runner/formatter/base_formatter_spec.rb +112 -0
  302. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
  303. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +33 -0
  304. data/spec/spec/runner/formatter/html_formatted-1.8.4.html +365 -0
  305. data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
  306. data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
  307. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
  308. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +370 -0
  309. data/spec/spec/runner/formatter/html_formatter_spec.rb +61 -0
  310. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +318 -0
  311. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  312. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +155 -0
  313. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
  314. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
  315. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
  316. data/spec/spec/runner/formatter/story/html_formatter_spec.rb +135 -0
  317. data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +600 -0
  318. data/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb +82 -0
  319. data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
  320. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +370 -0
  321. data/spec/spec/runner/heckle_runner_spec.rb +78 -0
  322. data/spec/spec/runner/heckler_spec.rb +13 -0
  323. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
  324. data/spec/spec/runner/option_parser_spec.rb +421 -0
  325. data/spec/spec/runner/options_spec.rb +450 -0
  326. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  327. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  328. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  329. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +62 -0
  330. data/spec/spec/runner/reporter_spec.rb +238 -0
  331. data/spec/spec/runner/resources/a_bar.rb +0 -0
  332. data/spec/spec/runner/resources/a_foo.rb +0 -0
  333. data/spec/spec/runner/resources/a_spec.rb +1 -0
  334. data/spec/spec/runner/spec.opts +2 -0
  335. data/spec/spec/runner/spec_drb.opts +1 -0
  336. data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
  337. data/spec/spec/runner/spec_parser_spec.rb +85 -0
  338. data/spec/spec/runner/spec_spaced.opts +2 -0
  339. data/spec/spec/runner_spec.rb +11 -0
  340. data/spec/spec/spec_classes.rb +133 -0
  341. data/spec/spec/story/builders.rb +46 -0
  342. data/spec/spec/story/extensions/main_spec.rb +161 -0
  343. data/spec/spec/story/extensions_spec.rb +14 -0
  344. data/spec/spec/story/given_scenario_spec.rb +27 -0
  345. data/spec/spec/story/runner/plain_text_story_runner_spec.rb +90 -0
  346. data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
  347. data/spec/spec/story/runner/scenario_runner_spec.rb +214 -0
  348. data/spec/spec/story/runner/story_mediator_spec.rb +143 -0
  349. data/spec/spec/story/runner/story_parser_spec.rb +401 -0
  350. data/spec/spec/story/runner/story_runner_spec.rb +294 -0
  351. data/spec/spec/story/runner_spec.rb +93 -0
  352. data/spec/spec/story/scenario_spec.rb +18 -0
  353. data/spec/spec/story/step_group_spec.rb +157 -0
  354. data/spec/spec/story/step_mother_spec.rb +84 -0
  355. data/spec/spec/story/step_spec.rb +272 -0
  356. data/spec/spec/story/story_helper.rb +2 -0
  357. data/spec/spec/story/story_spec.rb +84 -0
  358. data/spec/spec/story/world_spec.rb +423 -0
  359. data/spec/spec.opts +6 -0
  360. data/spec/spec_helper.rb +77 -0
  361. data/stories/all.rb +5 -0
  362. data/stories/configuration/before_blocks.story +21 -0
  363. data/stories/configuration/stories.rb +7 -0
  364. data/stories/example_groups/autogenerated_docstrings +45 -0
  365. data/stories/example_groups/example_group_with_should_methods +17 -0
  366. data/stories/example_groups/nested_groups +17 -0
  367. data/stories/example_groups/output +25 -0
  368. data/stories/example_groups/stories.rb +7 -0
  369. data/stories/helper.rb +6 -0
  370. data/stories/interop/examples_and_tests_together +30 -0
  371. data/stories/interop/stories.rb +7 -0
  372. data/stories/interop/test_case_with_should_methods +17 -0
  373. data/stories/mock_framework_integration/stories.rb +7 -0
  374. data/stories/mock_framework_integration/use_flexmock.story +9 -0
  375. data/stories/pending_stories/README +3 -0
  376. data/stories/resources/helpers/cmdline.rb +9 -0
  377. data/stories/resources/helpers/story_helper.rb +16 -0
  378. data/stories/resources/matchers/smart_match.rb +37 -0
  379. data/stories/resources/spec/before_blocks_example.rb +32 -0
  380. data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
  381. data/stories/resources/spec/simple_spec.rb +8 -0
  382. data/stories/resources/spec/spec_with_flexmock.rb +18 -0
  383. data/stories/resources/steps/running_rspec.rb +50 -0
  384. data/stories/resources/stories/failing_story.rb +15 -0
  385. data/stories/resources/test/spec_and_test_together.rb +57 -0
  386. data/stories/resources/test/test_case_with_should_methods.rb +30 -0
  387. data/stories/stories/multiline_steps.story +23 -0
  388. data/stories/stories/steps/multiline_steps.rb +13 -0
  389. data/stories/stories/stories.rb +6 -0
  390. data/story_server/prototype/javascripts/builder.js +136 -0
  391. data/story_server/prototype/javascripts/controls.js +972 -0
  392. data/story_server/prototype/javascripts/dragdrop.js +976 -0
  393. data/story_server/prototype/javascripts/effects.js +1117 -0
  394. data/story_server/prototype/javascripts/prototype.js +4140 -0
  395. data/story_server/prototype/javascripts/rspec.js +149 -0
  396. data/story_server/prototype/javascripts/scriptaculous.js +58 -0
  397. data/story_server/prototype/javascripts/slider.js +276 -0
  398. data/story_server/prototype/javascripts/sound.js +55 -0
  399. data/story_server/prototype/javascripts/unittest.js +568 -0
  400. data/story_server/prototype/lib/server.rb +24 -0
  401. data/story_server/prototype/stories.html +176 -0
  402. data/story_server/prototype/stylesheets/rspec.css +136 -0
  403. data/story_server/prototype/stylesheets/test.css +90 -0
  404. metadata +495 -0
@@ -0,0 +1,78 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
3
+ require 'spec/runner/heckle_runner'
4
+
5
+ module Foo
6
+ class Bar
7
+ def one; end
8
+ def two; end
9
+ end
10
+
11
+ class Zap
12
+ def three; end
13
+ def four; end
14
+ end
15
+ end
16
+
17
+ describe "HeckleRunner" do
18
+ before(:each) do
19
+ @heckle = mock("heckle", :null_object => true)
20
+ @heckle_class = mock("heckle_class")
21
+ end
22
+
23
+ it "should heckle all methods in all classes in a module" do
24
+ @heckle_class.should_receive(:new).with("Foo::Bar", "one", Spec::Runner.options).and_return(@heckle)
25
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
26
+ @heckle_class.should_receive(:new).with("Foo::Zap", "three", Spec::Runner.options).and_return(@heckle)
27
+ @heckle_class.should_receive(:new).with("Foo::Zap", "four", Spec::Runner.options).and_return(@heckle)
28
+
29
+ heckle_runner = Spec::Runner::HeckleRunner.new("Foo", @heckle_class)
30
+ heckle_runner.heckle_with
31
+ end
32
+
33
+ it "should heckle all methods in a class" do
34
+ @heckle_class.should_receive(:new).with("Foo::Bar", "one", Spec::Runner.options).and_return(@heckle)
35
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
36
+
37
+ heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar", @heckle_class)
38
+ heckle_runner.heckle_with
39
+ end
40
+
41
+ it "should fail heckling when the class is not found" do
42
+ lambda do
43
+ heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bob", @heckle_class)
44
+ heckle_runner.heckle_with
45
+ end.should raise_error(StandardError, "Heckling failed - \"Foo::Bob\" is not a known class or module")
46
+ end
47
+
48
+ it "should heckle specific method in a class (with #)" do
49
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
50
+
51
+ heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar#two", @heckle_class)
52
+ heckle_runner.heckle_with
53
+ end
54
+
55
+ it "should heckle specific method in a class (with .)" do
56
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
57
+
58
+ heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar.two", @heckle_class)
59
+ heckle_runner.heckle_with
60
+ end
61
+ end
62
+
63
+ describe "Heckler" do
64
+ it "should say yes to tests_pass? if specs pass" do
65
+ options = mock("options", :null_object => true)
66
+ options.should_receive(:run_examples).and_return(true)
67
+ heckler = Spec::Runner::Heckler.new("Foo", nil, options)
68
+ heckler.tests_pass?.should be_true
69
+ end
70
+
71
+ it "should say no to tests_pass? if specs fail" do
72
+ options = mock("options", :null_object => true)
73
+ options.should_receive(:run_examples).and_return(false)
74
+ heckler = Spec::Runner::Heckler.new("Foo", nil, options)
75
+ heckler.tests_pass?.should be_false
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
3
+ require 'spec/runner/heckle_runner'
4
+
5
+ describe "Heckler" do
6
+ it "should run examples on tests_pass?" do
7
+ options = Spec::Runner::Options.new(StringIO.new, StringIO.new)
8
+ options.should_receive(:run_examples).with().and_return(&options.method(:run_examples))
9
+ heckler = Spec::Runner::Heckler.new('Array', 'push', options)
10
+ heckler.tests_pass?
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,45 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Runner
5
+ describe "NoisyBacktraceTweaker" do
6
+ before(:each) do
7
+ @error = RuntimeError.new
8
+ @tweaker = NoisyBacktraceTweaker.new
9
+ end
10
+
11
+ it "should leave anything in lib spec dir" do
12
+ ["expectations", "mocks", "runner", "stubs"].each do |child|
13
+ @error.set_backtrace(["/lib/spec/#{child}/anything.rb"])
14
+ @tweaker.tweak_backtrace(@error)
15
+ @error.backtrace.should_not be_empty
16
+ end
17
+ end
18
+
19
+ it "should leave anything in spec dir" do
20
+ @error.set_backtrace(["/lib/spec/expectations/anything.rb"])
21
+ @tweaker.tweak_backtrace(@error)
22
+ @error.backtrace.should_not be_empty
23
+ end
24
+
25
+ it "should leave bin spec" do
26
+ @error.set_backtrace(["bin/spec:"])
27
+ @tweaker.tweak_backtrace(@error)
28
+ @error.backtrace.should_not be_empty
29
+ end
30
+
31
+ it "should not barf on nil backtrace" do
32
+ lambda do
33
+ @tweaker.tweak_backtrace(@error)
34
+ end.should_not raise_error
35
+ end
36
+
37
+ it "should clean up double slashes" do
38
+ @error.set_backtrace(["/a//b/c//d.rb"])
39
+ @tweaker.tweak_backtrace(@error)
40
+ @error.backtrace.should include("/a/b/c/d.rb")
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,421 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+ require 'fileutils'
3
+
4
+ module Custom
5
+ class ExampleGroupRunner
6
+ attr_reader :options, :arg
7
+ def initialize(options, arg)
8
+ @options, @arg = options, arg
9
+ end
10
+
11
+ def load_files(files)
12
+ end
13
+
14
+ def run
15
+ end
16
+ end
17
+ end
18
+
19
+ describe "OptionParser" do
20
+ before(:each) do
21
+ @out = StringIO.new
22
+ @err = StringIO.new
23
+ @parser = Spec::Runner::OptionParser.new(@err, @out)
24
+ end
25
+
26
+ def parse(args)
27
+ @parser.parse(args)
28
+ @parser.options
29
+ end
30
+
31
+ it "should leave the submitted argv alone" do
32
+ args = ["--pattern", "foo"]
33
+ @parser.order!(args)
34
+ args.should == ["--pattern", "foo"]
35
+ end
36
+
37
+ it "should accept files to include" do
38
+ options = parse(["--pattern", "foo"])
39
+ options.filename_pattern.should == "foo"
40
+ end
41
+
42
+ it "should accept dry run option" do
43
+ options = parse(["--dry-run"])
44
+ options.dry_run.should be_true
45
+ end
46
+
47
+ it "should eval and use custom formatter when none of the builtins" do
48
+ options = parse(["--format", "Custom::Formatter"])
49
+ options.formatters[0].class.should be(Custom::Formatter)
50
+ end
51
+
52
+ it "should support formatters with relative and absolute paths, even on windows" do
53
+ options = parse([
54
+ "--format", "Custom::Formatter:C:\\foo\\bar",
55
+ "--format", "Custom::Formatter:foo/bar",
56
+ "--format", "Custom::Formatter:foo\\bar",
57
+ "--format", "Custom::Formatter:/foo/bar"
58
+ ])
59
+ options.formatters[0].where.should eql("C:\\foo\\bar")
60
+ options.formatters[1].where.should eql("foo/bar")
61
+ options.formatters[2].where.should eql("foo\\bar")
62
+ options.formatters[3].where.should eql("/foo/bar")
63
+ end
64
+
65
+ it "should not be verbose by default" do
66
+ options = parse([])
67
+ options.verbose.should be_nil
68
+ end
69
+
70
+ it "should not use colour by default" do
71
+ options = parse([])
72
+ options.colour.should == false
73
+ end
74
+
75
+ it "should print help to stdout if no args and spec_comand?" do
76
+ Spec.stub!(:spec_command?).and_return(true)
77
+ options = parse([])
78
+ @out.rewind
79
+ @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m)
80
+ end
81
+
82
+ it "should not print help to stdout if no args and NOT spec_command?" do
83
+ Spec.stub!(:spec_command?).and_return(false)
84
+ options = parse([])
85
+ @out.rewind
86
+ @out.read.should == ""
87
+ end
88
+
89
+ it "should print help to stdout" do
90
+ options = parse(["--help"])
91
+ @out.rewind
92
+ @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m)
93
+ end
94
+
95
+ it "should print instructions about how to require missing formatter" do
96
+ lambda do
97
+ options = parse(["--format", "Custom::MissingFormatter"])
98
+ options.formatters
99
+ end.should raise_error(NameError)
100
+ @err.string.should match(/Couldn't find formatter class Custom::MissingFormatter/n)
101
+ end
102
+
103
+ it "should print version to stdout" do
104
+ options = parse(["--version"])
105
+ @out.rewind
106
+ @out.read.should match(/rspec \d+\.\d+\.\d+/n)
107
+ end
108
+
109
+ it "should require file when require specified" do
110
+ lambda do
111
+ parse(["--require", "whatever"])
112
+ end.should raise_error(LoadError)
113
+ end
114
+
115
+ it "should support c option" do
116
+ options = parse(["-c"])
117
+ options.colour.should be_true
118
+ end
119
+
120
+ it "should support queens colour option" do
121
+ options = parse(["--colour"])
122
+ options.colour.should be_true
123
+ end
124
+
125
+ it "should support us color option" do
126
+ options = parse(["--color"])
127
+ options.colour.should be_true
128
+ end
129
+
130
+ it "should support single example with -e option" do
131
+ options = parse(["-e", "something or other"])
132
+ options.examples.should eql(["something or other"])
133
+ end
134
+
135
+ it "should support single example with -s option (will be removed when autotest supports -e)" do
136
+ options = parse(["-s", "something or other"])
137
+ options.examples.should eql(["something or other"])
138
+ end
139
+
140
+ it "should support single example with --example option" do
141
+ options = parse(["--example", "something or other"])
142
+ options.examples.should eql(["something or other"])
143
+ end
144
+
145
+ it "should read several example names from file if --example is given an existing file name" do
146
+ options = parse(["--example", File.dirname(__FILE__) + '/examples.txt'])
147
+ options.examples.should eql([
148
+ "Sir, if you were my husband, I would poison your drink.",
149
+ "Madam, if you were my wife, I would drink it."])
150
+ end
151
+
152
+ it "should read no examples if given an empty file" do
153
+ options = parse(["--example", File.dirname(__FILE__) + '/empty_file.txt'])
154
+ options.examples.should eql([])
155
+ end
156
+
157
+ it "should use html formatter when format is h" do
158
+ options = parse(["--format", "h"])
159
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
160
+ end
161
+
162
+ it "should use html story formatter when format is h" do
163
+ options = parse(["--format", "h"])
164
+ options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter)
165
+ end
166
+
167
+ it "should use html formatter when format is html" do
168
+ options = parse(["--format", "html"])
169
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
170
+ end
171
+
172
+ it "should use html story formatter when format is html" do
173
+ options = parse(["--format", "html"])
174
+ options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter)
175
+ end
176
+
177
+ it "should use html formatter with explicit output when format is html:test.html" do
178
+ FileUtils.rm 'test.html' if File.exist?('test.html')
179
+ options = parse(["--format", "html:test.html"])
180
+ options.formatters # creates the file
181
+ File.should be_exist('test.html')
182
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
183
+ options.formatters[0].close
184
+ FileUtils.rm 'test.html'
185
+ end
186
+
187
+ it "should use noisy backtrace tweaker with b option" do
188
+ options = parse(["-b"])
189
+ options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker)
190
+ end
191
+
192
+ it "should use noisy backtrace tweaker with backtrace option" do
193
+ options = parse(["--backtrace"])
194
+ options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker)
195
+ end
196
+
197
+ it "should use quiet backtrace tweaker by default" do
198
+ options = parse([])
199
+ options.backtrace_tweaker.should be_instance_of(Spec::Runner::QuietBacktraceTweaker)
200
+ end
201
+
202
+ it "should use progress bar formatter by default" do
203
+ options = parse([])
204
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter)
205
+ end
206
+
207
+ it "should use specdoc formatter when format is s" do
208
+ options = parse(["--format", "s"])
209
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter)
210
+ end
211
+
212
+ it "should use specdoc formatter when format is specdoc" do
213
+ options = parse(["--format", "specdoc"])
214
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter)
215
+ end
216
+
217
+ it "should use nested text formatter when format is s" do
218
+ options = parse(["--format", "n"])
219
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
220
+ end
221
+
222
+ it "should use nested text formatter when format is nested" do
223
+ options = parse(["--format", "nested"])
224
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
225
+ end
226
+
227
+ it "should support diff option when format is not specified" do
228
+ options = parse(["--diff"])
229
+ options.diff_format.should == :unified
230
+ end
231
+
232
+ it "should use unified diff format option when format is unified" do
233
+ options = parse(["--diff", "unified"])
234
+ options.diff_format.should == :unified
235
+ options.differ_class.should equal(Spec::Expectations::Differs::Default)
236
+ end
237
+
238
+ it "should use context diff format option when format is context" do
239
+ options = parse(["--diff", "context"])
240
+ options.diff_format.should == :context
241
+ options.differ_class.should == Spec::Expectations::Differs::Default
242
+ end
243
+
244
+ it "should use custom diff format option when format is a custom format" do
245
+ Spec::Expectations.differ.should_not be_instance_of(Custom::Differ)
246
+
247
+ options = parse(["--diff", "Custom::Differ"])
248
+ options.parse_diff "Custom::Differ"
249
+ options.diff_format.should == :custom
250
+ options.differ_class.should == Custom::Differ
251
+ Spec::Expectations.differ.should be_instance_of(Custom::Differ)
252
+ end
253
+
254
+ it "should print instructions about how to fix missing differ" do
255
+ lambda { parse(["--diff", "Custom::MissingFormatter"]) }.should raise_error(NameError)
256
+ @err.string.should match(/Couldn't find differ class Custom::MissingFormatter/n)
257
+ end
258
+
259
+ describe "when attempting a focussed spec" do
260
+ attr_reader :file, :dir
261
+ before(:each) do
262
+ @original_rspec_options = Spec::Runner.options
263
+ @file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb"
264
+ @dir = File.dirname(file)
265
+ end
266
+
267
+ after(:each) do
268
+ Spec::Runner.use @original_rspec_options
269
+ end
270
+
271
+ def parse(args)
272
+ options = super
273
+ Spec::Runner.use options
274
+ options.filename_pattern = "*_fixture.rb"
275
+ options
276
+ end
277
+
278
+ it "should support --line to identify spec" do
279
+ options = parse([file, "--line", "13"])
280
+ options.line_number.should == 13
281
+ options.examples.should be_empty
282
+ options.run_examples
283
+ options.examples.should eql(["d"])
284
+ end
285
+
286
+ it "should fail with error message if file is dir along with --line" do
287
+ options = parse([dir, "--line", "169"])
288
+ options.line_number.should == 169
289
+ options.run_examples
290
+ @err.string.should match(/You must specify one file, not a directory when using the --line option/n)
291
+ end
292
+
293
+ it "should fail with error message if file does not exist along with --line" do
294
+ options = parse(["some file", "--line", "169"])
295
+ proc do
296
+ options.run_examples
297
+ end.should raise_error
298
+ end
299
+
300
+ it "should fail with error message if more than one files are specified along with --line" do
301
+ options = parse([file, file, "--line", "169"])
302
+ options.run_examples
303
+ @err.string.should match(/Only one file can be specified when using the --line option/n)
304
+ end
305
+
306
+ it "should fail with error message if --example and --line are used simultaneously" do
307
+ options = parse([file, "--example", "some example", "--line", "169"])
308
+ options.run_examples
309
+ @err.string.should match(/You cannot use both --line and --example/n)
310
+ end
311
+ end
312
+
313
+ if [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
314
+ it "should barf when --heckle is specified (and platform is windows)" do
315
+ lambda do
316
+ options = parse(["--heckle", "Spec"])
317
+ end.should raise_error(StandardError, "Heckle not supported on Windows")
318
+ end
319
+ else
320
+ it "should heckle when --heckle is specified (and platform is not windows)" do
321
+ options = parse(["--heckle", "Spec"])
322
+ options.heckle_runner.should be_instance_of(Spec::Runner::HeckleRunner)
323
+ end
324
+ end
325
+
326
+ it "should read options from file when --options is specified" do
327
+ options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
328
+ options.diff_format.should_not be_nil
329
+ options.colour.should be_true
330
+ end
331
+
332
+ it "should default the formatter to ProgressBarFormatter when using options file" do
333
+ options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
334
+ options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::ProgressBarFormatter)
335
+ end
336
+
337
+ it "should run parse drb after parsing options" do
338
+ @parser.stub!(:parse_drb)
339
+ @parser.should_receive(:parse_drb).with(["--drb"]).and_return(true)
340
+ options = parse(["--options", File.dirname(__FILE__) + "/spec_drb.opts"])
341
+ end
342
+
343
+ it "should read spaced and multi-line options from file when --options is specified" do
344
+ options = parse(["--options", File.dirname(__FILE__) + "/spec_spaced.opts"])
345
+ options.diff_format.should_not be_nil
346
+ options.colour.should be_true
347
+ options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::SpecdocFormatter)
348
+ end
349
+
350
+ it "should save config to file when --generate-options is specified" do
351
+ FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts')
352
+ options = parse(["--colour", "--generate-options", "test.spec.opts", "--diff"])
353
+ IO.read('test.spec.opts').should == "--colour\n--diff\n"
354
+ FileUtils.rm 'test.spec.opts'
355
+ end
356
+
357
+ it "should save config to file when -G is specified" do
358
+ FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts')
359
+ options = parse(["--colour", "-G", "test.spec.opts", "--diff"])
360
+ IO.read('test.spec.opts').should == "--colour\n--diff\n"
361
+ FileUtils.rm 'test.spec.opts'
362
+ end
363
+
364
+ it "when --drb is specified, calls DrbCommandLine all of the other ARGV arguments" do
365
+ options = Spec::Runner::OptionParser.parse([
366
+ "some/spec.rb", "--diff", "--colour"
367
+ ], @err, @out)
368
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return do |options|
369
+ options.argv.should == ["some/spec.rb", "--diff", "--colour"]
370
+ end
371
+ parse(["some/spec.rb", "--diff", "--drb", "--colour"])
372
+ end
373
+
374
+ it "should reverse spec order when --reverse is specified" do
375
+ options = parse(["some/spec.rb", "--reverse"])
376
+ end
377
+
378
+ it "should set an mtime comparator when --loadby mtime" do
379
+ options = parse(["--loadby", 'mtime'])
380
+ runner = Spec::Runner::ExampleGroupRunner.new(options)
381
+ Spec::Runner::ExampleGroupRunner.should_receive(:new).
382
+ with(options).
383
+ and_return(runner)
384
+ runner.should_receive(:load_files).with(["most_recent_spec.rb", "command_line_spec.rb"])
385
+
386
+ Dir.chdir(File.dirname(__FILE__)) do
387
+ options.files << 'command_line_spec.rb'
388
+ options.files << 'most_recent_spec.rb'
389
+ FileUtils.touch "most_recent_spec.rb"
390
+ options.run_examples
391
+ FileUtils.rm "most_recent_spec.rb"
392
+ end
393
+ end
394
+
395
+ it "should use the standard runner by default" do
396
+ runner = ::Spec::Runner::ExampleGroupRunner.new(@parser.options)
397
+ ::Spec::Runner::ExampleGroupRunner.should_receive(:new).
398
+ with(@parser.options).
399
+ and_return(runner)
400
+ options = parse([])
401
+ options.run_examples
402
+ end
403
+
404
+ it "should use a custom runner when given" do
405
+ runner = Custom::ExampleGroupRunner.new(@parser.options, nil)
406
+ Custom::ExampleGroupRunner.should_receive(:new).
407
+ with(@parser.options, nil).
408
+ and_return(runner)
409
+ options = parse(["--runner", "Custom::ExampleGroupRunner"])
410
+ options.run_examples
411
+ end
412
+
413
+ it "should use a custom runner with extra options" do
414
+ runner = Custom::ExampleGroupRunner.new(@parser.options, 'something')
415
+ Custom::ExampleGroupRunner.should_receive(:new).
416
+ with(@parser.options, 'something').
417
+ and_return(runner)
418
+ options = parse(["--runner", "Custom::ExampleGroupRunner:something"])
419
+ options.run_examples
420
+ end
421
+ end