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,135 @@
1
+ require File.dirname(__FILE__) + '/../../../../spec_helper.rb'
2
+ require 'spec/runner/formatter/story/html_formatter'
3
+
4
+ module Spec
5
+ module Runner
6
+ module Formatter
7
+ module Story
8
+ describe HtmlFormatter do
9
+ before :each do
10
+ @out = StringIO.new
11
+ @options = mock('options')
12
+ @reporter = HtmlFormatter.new(@options, @out)
13
+ end
14
+
15
+ it "should just be poked at" do
16
+ @reporter.run_started(1)
17
+ @reporter.story_started('story_title', 'narrative')
18
+
19
+ @reporter.scenario_started('story_title', 'succeeded_scenario_name')
20
+ @reporter.step_succeeded('given', 'succeded_step', 'one', 'two')
21
+ @reporter.scenario_succeeded('story_title', 'succeeded_scenario_name')
22
+
23
+ @reporter.scenario_started('story_title', 'pending_scenario_name')
24
+ @reporter.step_pending('when', 'pending_step', 'un', 'deux')
25
+ @reporter.scenario_pending('story_title', 'pending_scenario_name', 'not done')
26
+
27
+ @reporter.scenario_started('story_title', 'failed_scenario_name')
28
+ @reporter.step_failed('then', 'failed_step', 'en', 'to')
29
+ @reporter.scenario_failed('story_title', 'failed_scenario_name', NameError.new('sup'))
30
+
31
+ @reporter.scenario_started('story_title', 'scenario_with_given_scenario_name')
32
+ @reporter.found_scenario('given scenario', 'succeeded_scenario_name')
33
+
34
+ @reporter.story_ended('story_title', 'narrative')
35
+ @reporter.run_ended
36
+ end
37
+
38
+ it "should create spans for params" do
39
+ @reporter.step_succeeded('given', 'a $coloured $animal', 'brown', 'dog')
40
+ @reporter.scenario_ended
41
+ @reporter.story_ended('story_title', 'narrative')
42
+
43
+ @out.string.should include(" <li class=\"passed\">Given a <span class=\"param\">brown</span> <span class=\"param\">dog</span></li>\n")
44
+ end
45
+
46
+ it 'should create spanes for params in regexp steps' do
47
+ @reporter.step_succeeded :given, /a (pink|blue) (.*)/, 'brown', 'dog'
48
+ @reporter.scenario_ended
49
+ @reporter.story_ended('story_title', 'narrative')
50
+
51
+ @out.string.should include(" <li class=\"passed\">Given a <span class=\"param\">brown</span> <span class=\"param\">dog</span></li>\n")
52
+ end
53
+
54
+ it "should create a ul for collected_steps" do
55
+ @reporter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel'])
56
+ @out.string.should == (<<-EOF)
57
+ <ul id="stock_steps" style="display: none;">
58
+ <li>Given a $coloured $animal</li>
59
+ <li>Given a $n legged eel</li>
60
+ </ul>
61
+ EOF
62
+ end
63
+
64
+ it 'should document additional givens using And' do
65
+ # when
66
+ @reporter.step_succeeded :given, 'step 1'
67
+ @reporter.step_succeeded :given, 'step 2'
68
+ @reporter.scenario_ended
69
+ @reporter.story_ended '', ''
70
+
71
+ # then
72
+ @out.string.should include("Given step 1")
73
+ @out.string.should include("And step 2")
74
+ end
75
+
76
+ it 'should document additional events using And' do
77
+ # when
78
+ @reporter.step_succeeded :when, 'step 1'
79
+ @reporter.step_succeeded :when, 'step 2'
80
+ @reporter.scenario_ended
81
+ @reporter.story_ended '', ''
82
+
83
+ # then
84
+ @out.string.should include("When step 1")
85
+ @out.string.should include("And step 2")
86
+ end
87
+
88
+ it 'should document additional outcomes using And' do
89
+ # when
90
+ @reporter.step_succeeded :then, 'step 1'
91
+ @reporter.step_succeeded :then, 'step 2'
92
+ @reporter.scenario_ended
93
+ @reporter.story_ended '', ''
94
+
95
+ # then
96
+ @out.string.should include("Then step 1")
97
+ @out.string.should include("And step 2")
98
+ end
99
+
100
+ it 'should document a GivenScenario followed by a Given using And' do
101
+ # when
102
+ @reporter.step_succeeded :'given scenario', 'a scenario'
103
+ @reporter.step_succeeded :given, 'a context'
104
+ @reporter.scenario_ended
105
+ @reporter.story_ended '', ''
106
+
107
+ # then
108
+ @out.string.should include("Given scenario a scenario")
109
+ @out.string.should include("And a context")
110
+ end
111
+
112
+ it "should create a failed story if one of its scenarios fails" do
113
+ @reporter.story_started('story_title', 'narrative')
114
+ @reporter.scenario_started('story_title', 'succeeded_scenario_name')
115
+ @reporter.step_failed('then', 'failed_step', 'en', 'to')
116
+ @reporter.scenario_failed('story_title', 'failed_scenario_name', NameError.new('sup'))
117
+ @reporter.story_ended('story_title', 'narrative')
118
+
119
+ @out.string.should include(" <dl class=\"story failed\">\n <dt>Story: story_title</dt>\n")
120
+ end
121
+
122
+ it "should create a failed scenario if one of its steps fails" do
123
+ @reporter.scenario_started('story_title', 'failed_scenario_name')
124
+ @reporter.step_failed('then', 'failed_step', 'en', 'to')
125
+ @reporter.scenario_failed('story_title', 'failed_scenario_name', NameError.new('sup'))
126
+ @reporter.story_ended('story_title', 'narrative')
127
+
128
+ @out.string.should include("<dl class=\"failed\">\n <dt>Scenario: failed_scenario_name</dt>\n")
129
+ end
130
+
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,600 @@
1
+ require File.dirname(__FILE__) + '/../../../../spec_helper.rb'
2
+ require 'spec/runner/formatter/story/plain_text_formatter'
3
+
4
+ module Spec
5
+ module Runner
6
+ module Formatter
7
+ module Story
8
+ describe PlainTextFormatter do
9
+ before :each do
10
+ # given
11
+ @out = StringIO.new
12
+ @tweaker = mock('tweaker')
13
+ @tweaker.stub!(:tweak_backtrace)
14
+ @options = mock('options')
15
+ @options.stub!(:colour).and_return(false)
16
+ @options.stub!(:backtrace_tweaker).and_return(@tweaker)
17
+ @formatter = PlainTextFormatter.new(@options, @out)
18
+ end
19
+
20
+ it 'should summarize the number of scenarios when the run ends' do
21
+ # when
22
+ @formatter.run_started(3)
23
+ @formatter.scenario_started(nil, nil)
24
+ @formatter.scenario_succeeded('story', 'scenario1')
25
+ @formatter.scenario_started(nil, nil)
26
+ @formatter.scenario_succeeded('story', 'scenario2')
27
+ @formatter.scenario_started(nil, nil)
28
+ @formatter.scenario_succeeded('story', 'scenario3')
29
+ @formatter.run_ended
30
+
31
+ # then
32
+ @out.string.should include('3 scenarios')
33
+ end
34
+
35
+ it 'should summarize the number of successful scenarios when the run ends' do
36
+ # when
37
+ @formatter.run_started(3)
38
+ @formatter.scenario_started(nil, nil)
39
+ @formatter.scenario_succeeded('story', 'scenario1')
40
+ @formatter.scenario_started(nil, nil)
41
+ @formatter.scenario_succeeded('story', 'scenario2')
42
+ @formatter.scenario_started(nil, nil)
43
+ @formatter.scenario_succeeded('story', 'scenario3')
44
+ @formatter.run_ended
45
+
46
+ # then
47
+ @out.string.should include('3 scenarios: 3 succeeded')
48
+ end
49
+
50
+ it 'should summarize the number of failed scenarios when the run ends' do
51
+ # when
52
+ @formatter.run_started(3)
53
+ @formatter.scenario_started(nil, nil)
54
+ @formatter.scenario_succeeded('story', 'scenario1')
55
+ @formatter.scenario_started(nil, nil)
56
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
57
+ @formatter.scenario_started(nil, nil)
58
+ @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
59
+ @formatter.run_ended
60
+
61
+ # then
62
+ @out.string.should include("3 scenarios: 1 succeeded, 2 failed")
63
+ end
64
+
65
+ it 'should end cleanly (no characters on the last line) with successes' do
66
+ # when
67
+ @formatter.run_started(1)
68
+ @formatter.scenario_started(nil, nil)
69
+ @formatter.scenario_succeeded('story', 'scenario')
70
+ @formatter.run_ended
71
+
72
+ # then
73
+ @out.string.should =~ /\n\z/
74
+ end
75
+
76
+ it 'should end cleanly (no characters on the last line) with failures' do
77
+ # when
78
+ @formatter.run_started(1)
79
+ @formatter.scenario_started(nil, nil)
80
+ @formatter.scenario_failed('story', 'scenario', exception_from { raise RuntimeError, 'oops' })
81
+ @formatter.run_ended
82
+
83
+ # then
84
+ @out.string.should =~ /\n\z/
85
+ end
86
+
87
+ it 'should end cleanly (no characters on the last line) with pending steps' do
88
+ # when
89
+ @formatter.run_started(1)
90
+ @formatter.scenario_started(nil, nil)
91
+ @formatter.step_pending(:then, 'do pend')
92
+ @formatter.scenario_pending('story', 'scenario', exception_from { raise RuntimeError, 'oops' })
93
+ @formatter.run_ended
94
+
95
+ # then
96
+ @out.string.should =~ /\n\z/
97
+ end
98
+
99
+ it 'should summarize the number of pending scenarios when the run ends' do
100
+ # when
101
+ @formatter.run_started(3)
102
+ @formatter.scenario_started(nil, nil)
103
+ @formatter.scenario_succeeded('story', 'scenario1')
104
+ @formatter.scenario_started(nil, nil)
105
+ @formatter.scenario_pending('story', 'scenario2', 'message')
106
+ @formatter.scenario_started(nil, nil)
107
+ @formatter.scenario_pending('story', 'scenario3', 'message')
108
+ @formatter.run_ended
109
+
110
+ # then
111
+ @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending")
112
+ end
113
+
114
+ it "should only count the first failure in one scenario" do
115
+ # when
116
+ @formatter.run_started(3)
117
+ @formatter.scenario_started(nil, nil)
118
+ @formatter.scenario_succeeded('story', 'scenario1')
119
+ @formatter.scenario_started(nil, nil)
120
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
121
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' })
122
+ @formatter.scenario_started(nil, nil)
123
+ @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
124
+ @formatter.run_ended
125
+
126
+ # then
127
+ @out.string.should include("3 scenarios: 1 succeeded, 2 failed")
128
+ end
129
+
130
+ it "should only count the first pending in one scenario" do
131
+ # when
132
+ @formatter.run_started(3)
133
+ @formatter.scenario_started(nil, nil)
134
+ @formatter.scenario_succeeded('story', 'scenario1')
135
+ @formatter.scenario_started(nil, nil)
136
+ @formatter.scenario_pending('story', 'scenario2', 'because ...')
137
+ @formatter.scenario_pending('story', 'scenario2', 'because ...')
138
+ @formatter.scenario_started(nil, nil)
139
+ @formatter.scenario_pending('story', 'scenario3', 'because ...')
140
+ @formatter.run_ended
141
+
142
+ # then
143
+ @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending")
144
+ end
145
+
146
+ it "should only count a failure before the first pending in one scenario" do
147
+ # when
148
+ @formatter.run_started(3)
149
+ @formatter.scenario_started(nil, nil)
150
+ @formatter.scenario_succeeded('story', 'scenario1')
151
+ @formatter.scenario_started(nil, nil)
152
+ @formatter.scenario_pending('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
153
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' })
154
+ @formatter.scenario_started(nil, nil)
155
+ @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
156
+ @formatter.run_ended
157
+
158
+ # then
159
+ @out.string.should include("3 scenarios: 1 succeeded, 1 failed, 1 pending")
160
+ end
161
+
162
+ it 'should show test summary in red if there were failed scenarios' do
163
+ # when
164
+ @out.stub!(:tty?).and_return(true)
165
+ @options.stub!(:colour).and_return(true)
166
+
167
+ @formatter.scenario_started(nil, nil)
168
+ @formatter.scenario_failed('story', 'scenario', exception_from { raise RuntimeError, 'oops' })
169
+ @formatter.run_ended
170
+
171
+ # then
172
+ @out.string.should include("\e[31m scenarios: 0 succeeded, 1 failed, 0 pending\e[0m")
173
+ end
174
+
175
+ it 'should show test summary in yellow if there are pending scenarios' do
176
+ # when
177
+ @out.stub!(:tty?).and_return(true)
178
+ @options.stub!(:colour).and_return(true)
179
+
180
+ @formatter.scenario_started(nil, nil)
181
+ @formatter.scenario_pending('story', 'scenario', '')
182
+ @formatter.run_ended
183
+
184
+ # then
185
+ @out.string.should include("\e[32m scenarios: 0 succeeded, 0 failed, 1 pending\e[0m")
186
+ end
187
+
188
+ it 'should show test summary in green if all scenarios pass' do
189
+ # when
190
+ @out.stub!(:tty?).and_return(true)
191
+ @options.stub!(:colour).and_return(true)
192
+
193
+ @formatter.scenario_started(nil, nil)
194
+ @formatter.scenario_succeeded('story', 'scenario')
195
+ @formatter.run_ended
196
+
197
+ # then
198
+ @out.string.should include("\e[32m scenarios: 1 succeeded, 0 failed, 0 pending\e[0m")
199
+ end
200
+
201
+ it 'should produce details of the first failure each failed scenario when the run ends' do
202
+ # when
203
+ @formatter.run_started(3)
204
+ @formatter.scenario_started(nil, nil)
205
+ @formatter.scenario_succeeded('story', 'scenario1')
206
+ @formatter.scenario_started(nil, nil)
207
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2' })
208
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2 - this one should not appear' })
209
+ @formatter.scenario_started(nil, nil)
210
+ @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops3' })
211
+ @formatter.run_ended
212
+
213
+ # then
214
+ @out.string.should include("FAILURES:\n")
215
+ @out.string.should include("1) story (scenario2) FAILED")
216
+ @out.string.should include("RuntimeError: oops2")
217
+ @out.string.should_not include("RuntimeError: oops2 - this one should not appear")
218
+ @out.string.should include("2) story (scenario3) FAILED")
219
+ @out.string.should include("RuntimeError: oops3")
220
+ end
221
+
222
+ it 'should produce details of the failures in red when the run ends' do
223
+ # when
224
+ @out.stub!(:tty?).and_return(true)
225
+ @options.stub!(:colour).and_return(true)
226
+ @formatter.scenario_started(nil, nil)
227
+ @formatter.scenario_failed('story', 'scenario1', exception_from { raise RuntimeError, 'oops1' })
228
+ @formatter.run_ended
229
+
230
+ # then
231
+ @out.string.should =~ /\e\[31m[\n\s]*story \(scenario1\) FAILED\e\[0m/m
232
+ @out.string.should =~ /\e\[31m[\n\s]*RuntimeError: oops1\e\[0m/m
233
+ end
234
+
235
+ it 'should produce details of each pending step when the run ends' do
236
+ # when
237
+ @formatter.run_started(2)
238
+ @formatter.story_started('story 1', 'narrative')
239
+ @formatter.scenario_started('story 1', 'scenario 1')
240
+ @formatter.step_pending(:given, 'todo 1', [])
241
+ @formatter.story_started('story 2', 'narrative')
242
+ @formatter.scenario_started('story 2', 'scenario 2')
243
+ @formatter.step_pending(:given, 'todo 2', [])
244
+ @formatter.run_ended
245
+
246
+ # then
247
+ @out.string.should include("Pending Steps:\n")
248
+ @out.string.should include("1) story 1 (scenario 1): todo 1")
249
+ @out.string.should include("2) story 2 (scenario 2): todo 2")
250
+ end
251
+
252
+ it 'should document a story title and narrative' do
253
+ # when
254
+ @formatter.story_started 'story', 'narrative'
255
+ @formatter.story_ended 'story', 'narrative'
256
+
257
+ # then
258
+ @out.string.should include("Story: story\n\n narrative")
259
+ end
260
+
261
+ it 'should document a scenario name' do
262
+ # when
263
+ @formatter.scenario_started 'story', 'scenario'
264
+ @formatter.scenario_ended
265
+ @formatter.story_ended '', ''
266
+
267
+ # then
268
+ @out.string.should include("\n\n Scenario: scenario")
269
+ end
270
+
271
+ it 'should document a step by sentence-casing its name' do
272
+ # when
273
+ @formatter.step_succeeded :given, 'a context'
274
+ @formatter.step_succeeded :when, 'an event'
275
+ @formatter.step_succeeded :then, 'an outcome'
276
+ @formatter.scenario_ended
277
+ @formatter.story_ended '', ''
278
+
279
+ # then
280
+ @out.string.should include("\n\n Given a context\n\n When an event\n\n Then an outcome")
281
+ end
282
+
283
+ it 'should document additional givens using And' do
284
+ # when
285
+ @formatter.step_succeeded :given, 'step 1'
286
+ @formatter.step_succeeded :given, 'step 2'
287
+ @formatter.step_succeeded :given, 'step 3'
288
+ @formatter.scenario_ended
289
+ @formatter.story_ended '', ''
290
+
291
+ # then
292
+ @out.string.should include(" Given step 1\n And step 2\n And step 3")
293
+ end
294
+
295
+ it 'should document additional events using And' do
296
+ # when
297
+ @formatter.step_succeeded :when, 'step 1'
298
+ @formatter.step_succeeded :when, 'step 2'
299
+ @formatter.step_succeeded :when, 'step 3'
300
+ @formatter.scenario_ended
301
+ @formatter.story_ended '', ''
302
+
303
+ # then
304
+ @out.string.should include(" When step 1\n And step 2\n And step 3")
305
+ end
306
+
307
+ it 'should document additional outcomes using And' do
308
+ # when
309
+ @formatter.step_succeeded :then, 'step 1'
310
+ @formatter.step_succeeded :then, 'step 2'
311
+ @formatter.step_succeeded :then, 'step 3'
312
+ @formatter.scenario_ended
313
+ @formatter.story_ended '', ''
314
+
315
+ # then
316
+ @out.string.should include(" Then step 1\n And step 2\n And step 3")
317
+ end
318
+
319
+ it 'should document a GivenScenario followed by a Given using And' do
320
+ # when
321
+ @formatter.step_succeeded :'given scenario', 'a scenario'
322
+ @formatter.step_succeeded :given, 'a context'
323
+ @formatter.scenario_ended
324
+ @formatter.story_ended '', ''
325
+
326
+ # then
327
+ @out.string.should include(" Given scenario a scenario\n And a context")
328
+ end
329
+
330
+ it 'should document steps with replaced params' do
331
+ @formatter.step_succeeded :given, 'a $coloured dog with $n legs', 'pink', 21
332
+ @formatter.scenario_ended
333
+ @formatter.story_ended '', ''
334
+ @out.string.should include(" Given a pink dog with 21 legs")
335
+ end
336
+
337
+ it 'should document steps that include dollar signs ($)' do
338
+ @formatter.step_succeeded :given, 'kicks that cost $$amount', 50
339
+ @formatter.scenario_ended
340
+ @formatter.story_ended '', ''
341
+ @out.string.should include("Given kicks that cost $50")
342
+ end
343
+
344
+ it 'should document regexp steps with replaced params' do
345
+ @formatter.step_succeeded :given, /a (pink|blue) dog with (.*) legs/, 'pink', 21
346
+ @formatter.scenario_ended
347
+ @formatter.story_ended '', ''
348
+ @out.string.should include(" Given a pink dog with 21 legs")
349
+ end
350
+
351
+ it 'should document regex steps that include dollar signs ($)' do
352
+ @formatter.step_succeeded :given, /kicks that cost \$(\d+)/, 50
353
+ @formatter.scenario_ended
354
+ @formatter.story_ended '', ''
355
+ @out.string.should include("Given kicks that cost $50")
356
+ end
357
+
358
+ it "should append PENDING for the first pending step" do
359
+ @formatter.scenario_started('','')
360
+ @formatter.scenario_ended
361
+ @formatter.story_ended '', ''
362
+ @formatter.step_pending(:given, 'a context')
363
+ @formatter.scenario_ended
364
+ @formatter.story_ended '', ''
365
+
366
+ @out.string.should include('Given a context (PENDING)')
367
+ end
368
+
369
+ it "should append PENDING for pending after already pending" do
370
+ @formatter.scenario_started('','')
371
+ @formatter.step_pending(:given, 'a context')
372
+ @formatter.step_pending(:when, 'I say hey')
373
+ @formatter.scenario_ended
374
+ @formatter.story_ended '', ''
375
+
376
+ @out.string.should include('When I say hey (PENDING)')
377
+ end
378
+
379
+ it "should append FAILED for the first failiure" do
380
+ @formatter.scenario_started('','')
381
+ @formatter.step_failed(:given, 'a context')
382
+ @formatter.scenario_ended
383
+ @formatter.story_ended '', ''
384
+
385
+ @out.string.should include('Given a context (FAILED)')
386
+ end
387
+
388
+ it "should append SKIPPED for the second failiure" do
389
+ @formatter.scenario_started('','')
390
+ @formatter.step_failed(:given, 'a context')
391
+ @formatter.step_failed(:when, 'I say hey')
392
+ @formatter.scenario_ended
393
+ @formatter.story_ended '', ''
394
+
395
+ @out.string.should include('When I say hey (SKIPPED)')
396
+ end
397
+
398
+ it "should append SKIPPED for a failure after PENDING" do
399
+ @formatter.scenario_started('','')
400
+ @formatter.step_pending(:given, 'a context')
401
+ @formatter.step_failed(:when, 'I say hey')
402
+ @formatter.scenario_ended
403
+ @formatter.story_ended '', ''
404
+
405
+ @out.string.should include('When I say hey (SKIPPED)')
406
+ end
407
+
408
+ it "should print steps which succeeded in green" do
409
+ @out.stub!(:tty?).and_return(true)
410
+ @options.stub!(:colour).and_return(true)
411
+
412
+ @formatter.scenario_started('','')
413
+ @formatter.step_succeeded(:given, 'a context')
414
+ @formatter.scenario_ended
415
+ @formatter.story_ended '', ''
416
+
417
+ @out.string.should =~ /\e\[32m[\n\s]+Given a context\e\[0m/m
418
+ end
419
+
420
+ it "should print failed steps in red" do
421
+ @out.stub!(:tty?).and_return(true)
422
+ @options.stub!(:colour).and_return(true)
423
+
424
+ @formatter.scenario_started('','')
425
+ @formatter.step_failed(:given, 'a context')
426
+ @formatter.scenario_ended
427
+ @formatter.story_ended '', ''
428
+
429
+ @out.string.should =~ /\e\[31m[\n\s]+Given a context\e\[0m/m
430
+ end
431
+
432
+ it "should print ' (FAILED)' in red" do
433
+ @out.stub!(:tty?).and_return(true)
434
+ @options.stub!(:colour).and_return(true)
435
+
436
+ @formatter.scenario_started('','')
437
+ @formatter.step_failed(:given, 'a context')
438
+ @formatter.scenario_ended
439
+ @formatter.story_ended '', ''
440
+
441
+ @out.string.should =~ /\e\[31m \(FAILED\)\e\[0m/
442
+ end
443
+
444
+ it "should print pending steps in yellow" do
445
+ @out.stub!(:tty?).and_return(true)
446
+ @options.stub!(:colour).and_return(true)
447
+
448
+ @formatter.scenario_started('','')
449
+ @formatter.step_pending(:given, 'a context')
450
+ @formatter.scenario_ended
451
+ @formatter.story_ended '', ''
452
+
453
+ @out.string.should =~ /\e\[33m[\n\s]+Given a context\e\[0m/m
454
+ end
455
+
456
+ it "should print ' (PENDING)' in yellow" do
457
+ @out.stub!(:tty?).and_return(true)
458
+ @options.stub!(:colour).and_return(true)
459
+
460
+ @formatter.scenario_started('','')
461
+ @formatter.step_pending(:given, 'a context')
462
+ @formatter.scenario_ended
463
+ @formatter.story_ended '', ''
464
+
465
+ @out.string.should =~ /\e\[33m \(PENDING\)\e\[0m/
466
+ end
467
+
468
+ it "should print a scenario in red if any of its steps fail" do
469
+ @out.stub!(:tty?).and_return(true)
470
+ @options.stub!(:colour).and_return(true)
471
+
472
+ @formatter.scenario_started('title','narrative')
473
+ @formatter.step_failed(:given, 'a context')
474
+ @formatter.scenario_failed('story', 'scenario1', exception_from { raise RuntimeError, 'oops1' })
475
+ @formatter.story_ended('title','narrative')
476
+ @out.string.should include("\e[31m\n\n Scenario: narrative\e[0m")
477
+ end
478
+
479
+ it "should print a scenario in yellow if its steps are pending" do
480
+ @out.stub!(:tty?).and_return(true)
481
+ @options.stub!(:colour).and_return(true)
482
+
483
+ @formatter.scenario_started('title','narrative')
484
+ @formatter.step_pending(:given, 'a context')
485
+ @formatter.scenario_ended
486
+ @formatter.story_ended('','')
487
+ @out.string.should include("\e[33m\n\n Scenario: narrative\e[0m")
488
+ end
489
+
490
+ it "should print a story in red if any of its scenarios fail" do
491
+ @out.stub!(:tty?).and_return(true)
492
+ @options.stub!(:colour).and_return(true)
493
+
494
+ @formatter.story_started('story', 'narrative')
495
+ @formatter.scenario_started('','')
496
+ @formatter.step_failed(:given, 'a context')
497
+ @formatter.scenario_failed('story', 'scenario1', exception_from { raise RuntimeError, 'oops1' })
498
+ @formatter.story_ended('story', 'narrative')
499
+ @out.string.should include("\e[31mStory: story\n\n narrative\e[0m")
500
+ end
501
+
502
+ it "should print a story in green if all its scenarios succeed" do
503
+ @out.stub!(:tty?).and_return(true)
504
+ @options.stub!(:colour).and_return(true)
505
+
506
+ @formatter.story_started('story', 'narrative')
507
+ @formatter.scenario_started('','')
508
+ @formatter.step_succeeded(:given, 'a context')
509
+ @formatter.scenario_succeeded('story', 'scenario1')
510
+ @formatter.story_ended('story', 'narrative')
511
+ @out.string.should include("\e[32mStory: story\n\n narrative\e[0m")
512
+ end
513
+
514
+ it "should print a story in yellow if all its scenarios are pending" do
515
+ @out.stub!(:tty?).and_return(true)
516
+ @options.stub!(:colour).and_return(true)
517
+
518
+ @formatter.story_started('story', 'narrative')
519
+ @formatter.scenario_started('','')
520
+ @formatter.step_pending(:given, 'a context')
521
+ @formatter.scenario_pending('story', 'scenario1','pending')
522
+ @formatter.story_ended('story', 'narrative')
523
+ @out.string.should include("\e[33mStory: story\n\n narrative\e[0m")
524
+ end
525
+
526
+ it "should print skipped steps in yellow if the scenario is already pending" do
527
+ @out.stub!(:tty?).and_return(true)
528
+ @options.stub!(:colour).and_return(true)
529
+
530
+ @formatter.scenario_started('','')
531
+ @formatter.step_pending(:given, 'a context')
532
+ @formatter.step_failed(:when, 'I say hey')
533
+ @formatter.scenario_ended
534
+ @formatter.story_ended '', ''
535
+
536
+ @out.string.should =~ /\e\[33m[\n\s]+When I say hey\e\[0m/m
537
+ end
538
+
539
+ it "should print ' (SKIPPED)' in yellow if the scenario is already pending" do
540
+ @out.stub!(:tty?).and_return(true)
541
+ @options.stub!(:colour).and_return(true)
542
+
543
+ @formatter.scenario_started('','')
544
+ @formatter.step_pending(:given, 'a context')
545
+ @formatter.step_failed(:when, 'I say hey')
546
+ @formatter.scenario_ended
547
+ @formatter.story_ended '', ''
548
+
549
+ @out.string.should =~ /\e\[33m \(SKIPPED\)\e\[0m/
550
+ end
551
+
552
+ it "should print skipped steps in red if the scenario has already failed" do
553
+ @out.stub!(:tty?).and_return(true)
554
+ @options.stub!(:colour).and_return(true)
555
+
556
+ @formatter.scenario_started('','')
557
+ @formatter.step_failed(:given, 'a context')
558
+ @formatter.step_failed(:when, 'I say hey')
559
+ @formatter.scenario_ended
560
+ @formatter.story_ended '', ''
561
+
562
+ @out.string.should =~ /\e\[31m[\n\s]+When I say hey\e\[0m/m
563
+ end
564
+
565
+ it "should print ' (SKIPPED)' in red if the scenario has already failed" do
566
+ @out.stub!(:tty?).and_return(true)
567
+ @options.stub!(:colour).and_return(true)
568
+
569
+ @formatter.scenario_started('','')
570
+ @formatter.step_failed(:given, 'a context')
571
+ @formatter.step_failed(:when, 'I say hey')
572
+ @formatter.scenario_failed('story', 'scenario1', exception_from { raise RuntimeError, 'oops1' })
573
+ @formatter.story_ended('','')
574
+
575
+ @out.string.should =~ /\e\[31m \(SKIPPED\)\e\[0m/m
576
+ end
577
+
578
+ it 'should print some white space after each story' do
579
+ # when
580
+ @formatter.story_ended 'title', 'narrative'
581
+
582
+ # then
583
+ @out.string.should include("\n\n")
584
+ end
585
+
586
+ it "should print nothing for collected_steps" do
587
+ @formatter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel'])
588
+ @out.string.should == ("")
589
+ end
590
+
591
+ it "should ignore messages it doesn't care about" do
592
+ lambda {
593
+ @formatter.this_method_does_not_exist
594
+ }.should_not raise_error
595
+ end
596
+ end
597
+ end
598
+ end
599
+ end
600
+ end