rspec 1.0.8 → 1.1.0

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 (301) hide show
  1. data/CHANGES +122 -2
  2. data/README +10 -9
  3. data/Rakefile +22 -49
  4. data/TODO +2 -0
  5. data/bin/spec +1 -1
  6. data/bin/spec_translator +8 -8
  7. data/examples/{auto_spec_description_example.rb → pure/autogenerated_docstrings_example.rb} +0 -0
  8. data/examples/{before_and_after_example.rb → pure/before_and_after_example.rb} +1 -0
  9. data/examples/{behave_as_example.rb → pure/behave_as_example.rb} +0 -0
  10. data/examples/{custom_expectation_matchers.rb → pure/custom_expectation_matchers.rb} +0 -0
  11. data/examples/{custom_formatter.rb → pure/custom_formatter.rb} +1 -0
  12. data/examples/{dynamic_spec.rb → pure/dynamic_spec.rb} +0 -0
  13. data/examples/{file_accessor.rb → pure/file_accessor.rb} +1 -0
  14. data/examples/{file_accessor_spec.rb → pure/file_accessor_spec.rb} +0 -0
  15. data/examples/{greeter_spec.rb → pure/greeter_spec.rb} +1 -0
  16. data/examples/{helper_method_example.rb → pure/helper_method_example.rb} +0 -0
  17. data/examples/{io_processor.rb → pure/io_processor.rb} +0 -0
  18. data/examples/{io_processor_spec.rb → pure/io_processor_spec.rb} +0 -0
  19. data/examples/{legacy_spec.rb → pure/legacy_spec.rb} +1 -0
  20. data/examples/{mocking_example.rb → pure/mocking_example.rb} +0 -0
  21. data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
  22. data/examples/pure/nested_classes_example.rb +36 -0
  23. data/examples/{partial_mock_example.rb → pure/partial_mock_example.rb} +0 -0
  24. data/examples/{pending_example.rb → pure/pending_example.rb} +0 -0
  25. data/examples/{predicate_example.rb → pure/predicate_example.rb} +0 -0
  26. data/examples/{priority.txt → pure/priority.txt} +0 -0
  27. data/examples/pure/shared_example_group_example.rb +66 -0
  28. data/examples/pure/shared_stack_examples.rb +38 -0
  29. data/examples/pure/spec_helper.rb +3 -0
  30. data/examples/{stack.rb → pure/stack.rb} +0 -0
  31. data/examples/{stack_spec.rb → pure/stack_spec.rb} +1 -35
  32. data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
  33. data/examples/{stubbing_example.rb → pure/stubbing_example.rb} +0 -0
  34. data/examples/stories/adder.rb +13 -0
  35. data/examples/stories/addition +34 -0
  36. data/examples/stories/addition.rb +9 -0
  37. data/examples/stories/calculator.rb +65 -0
  38. data/examples/stories/game-of-life/README.txt +21 -0
  39. data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
  40. data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
  41. data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
  42. data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
  43. data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
  44. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
  45. data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
  46. data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
  47. data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
  48. data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
  49. data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
  50. data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
  51. data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
  52. data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
  53. data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
  54. data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
  55. data/examples/stories/game-of-life/life.rb +3 -0
  56. data/examples/stories/game-of-life/life/game.rb +23 -0
  57. data/examples/stories/game-of-life/life/grid.rb +43 -0
  58. data/examples/stories/helper.rb +9 -0
  59. data/examples/stories/steps/addition_steps.rb +18 -0
  60. data/lib/autotest/rspec.rb +1 -2
  61. data/lib/spec.rb +30 -6
  62. data/lib/spec/example.rb +12 -0
  63. data/lib/spec/{dsl → example}/configuration.rb +48 -39
  64. data/lib/spec/{dsl → example}/errors.rb +2 -2
  65. data/lib/spec/example/example_group.rb +16 -0
  66. data/lib/spec/example/example_group_factory.rb +62 -0
  67. data/lib/spec/example/example_group_methods.rb +412 -0
  68. data/lib/spec/example/example_matcher.rb +42 -0
  69. data/lib/spec/example/example_methods.rb +101 -0
  70. data/lib/spec/example/module_reopening_fix.rb +21 -0
  71. data/lib/spec/example/pending.rb +18 -0
  72. data/lib/spec/example/shared_example_group.rb +58 -0
  73. data/lib/spec/expectations/differs/default.rb +15 -10
  74. data/lib/spec/expectations/errors.rb +7 -1
  75. data/lib/spec/expectations/extensions/object.rb +12 -7
  76. data/lib/spec/expectations/handler.rb +13 -4
  77. data/lib/spec/extensions.rb +2 -0
  78. data/lib/spec/extensions/class.rb +24 -0
  79. data/lib/spec/extensions/main.rb +54 -0
  80. data/lib/spec/extensions/object.rb +5 -1
  81. data/lib/spec/interop/test.rb +10 -0
  82. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  83. data/lib/spec/interop/test/unit/testcase.rb +61 -0
  84. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  85. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  86. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +60 -0
  87. data/lib/spec/matchers.rb +11 -15
  88. data/lib/spec/matchers/be.rb +23 -6
  89. data/lib/spec/matchers/change.rb +25 -1
  90. data/lib/spec/matchers/exist.rb +17 -0
  91. data/lib/spec/matchers/operator_matcher.rb +1 -0
  92. data/lib/spec/matchers/simple_matcher.rb +29 -0
  93. data/lib/spec/matchers/throw_symbol.rb +2 -0
  94. data/lib/spec/mocks.rb +5 -2
  95. data/lib/spec/mocks/argument_expectation.rb +1 -1
  96. data/lib/spec/mocks/message_expectation.rb +62 -44
  97. data/lib/spec/mocks/methods.rb +2 -2
  98. data/lib/spec/mocks/mock.rb +24 -3
  99. data/lib/spec/mocks/proxy.rb +26 -23
  100. data/lib/spec/mocks/space.rb +1 -1
  101. data/lib/spec/mocks/spec_methods.rb +20 -12
  102. data/lib/spec/rake/spectask.rb +19 -1
  103. data/lib/spec/rake/verify_rcov.rb +1 -1
  104. data/lib/spec/runner.rb +33 -10
  105. data/lib/spec/runner/backtrace_tweaker.rb +3 -3
  106. data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
  107. data/lib/spec/runner/command_line.rb +18 -12
  108. data/lib/spec/runner/drb_command_line.rb +4 -5
  109. data/lib/spec/runner/example_group_runner.rb +59 -0
  110. data/lib/spec/runner/formatter/base_formatter.rb +10 -8
  111. data/lib/spec/runner/formatter/base_text_formatter.rb +18 -18
  112. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +31 -0
  113. data/lib/spec/runner/formatter/failing_examples_formatter.rb +3 -5
  114. data/lib/spec/runner/formatter/html_formatter.rb +37 -27
  115. data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
  116. data/lib/spec/runner/formatter/progress_bar_formatter.rb +3 -4
  117. data/lib/spec/runner/formatter/specdoc_formatter.rb +27 -13
  118. data/lib/spec/runner/formatter/story/html_formatter.rb +124 -0
  119. data/lib/spec/runner/formatter/story/plain_text_formatter.rb +123 -0
  120. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  121. data/lib/spec/runner/heckle_runner.rb +9 -9
  122. data/lib/spec/runner/option_parser.rb +140 -138
  123. data/lib/spec/runner/options.rb +168 -90
  124. data/lib/spec/runner/reporter.rb +58 -40
  125. data/lib/spec/runner/spec_parser.rb +11 -8
  126. data/lib/spec/story.rb +10 -0
  127. data/lib/spec/story/extensions.rb +1 -0
  128. data/lib/spec/story/extensions/main.rb +86 -0
  129. data/lib/spec/story/given_scenario.rb +14 -0
  130. data/lib/spec/story/runner.rb +58 -0
  131. data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
  132. data/lib/spec/story/runner/scenario_collector.rb +18 -0
  133. data/lib/spec/story/runner/scenario_runner.rb +46 -0
  134. data/lib/spec/story/runner/story_mediator.rb +123 -0
  135. data/lib/spec/story/runner/story_parser.rb +227 -0
  136. data/lib/spec/story/runner/story_runner.rb +67 -0
  137. data/lib/spec/story/scenario.rb +14 -0
  138. data/lib/spec/story/step.rb +48 -0
  139. data/lib/spec/story/step_group.rb +89 -0
  140. data/lib/spec/story/step_mother.rb +37 -0
  141. data/lib/spec/story/story.rb +42 -0
  142. data/lib/spec/story/world.rb +124 -0
  143. data/lib/spec/version.rb +4 -5
  144. data/plugins/mock_frameworks/rspec.rb +1 -1
  145. data/spec/autotest/rspec_spec.rb +13 -7
  146. data/spec/autotest_helper.rb +4 -3
  147. data/spec/rspec_suite.rb +7 -0
  148. data/spec/ruby_forker.rb +13 -0
  149. data/spec/spec/example/configuration_spec.rb +290 -0
  150. data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
  151. data/spec/spec/example/example_group_factory_spec.rb +129 -0
  152. data/spec/spec/example/example_group_methods_spec.rb +465 -0
  153. data/spec/spec/example/example_group_spec.rb +711 -0
  154. data/spec/spec/{dsl → example}/example_matcher_spec.rb +23 -18
  155. data/spec/spec/example/example_methods_spec.rb +75 -0
  156. data/spec/spec/example/example_runner_spec.rb +194 -0
  157. data/spec/spec/example/example_spec.rb +53 -0
  158. data/spec/spec/example/nested_example_group_spec.rb +59 -0
  159. data/spec/spec/example/pending_module_spec.rb +31 -0
  160. data/spec/spec/{dsl → example}/predicate_matcher_spec.rb +1 -1
  161. data/spec/spec/example/shared_example_group_spec.rb +265 -0
  162. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  163. data/spec/spec/expectations/differs/default_spec.rb +5 -3
  164. data/spec/spec/expectations/extensions/object_spec.rb +63 -2
  165. data/spec/spec/extensions/main_spec.rb +50 -0
  166. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
  167. data/spec/spec/interop/test/unit/testcase_spec.rb +10 -0
  168. data/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb +20 -0
  169. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  170. data/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb +34 -0
  171. data/spec/spec/matchers/be_spec.rb +15 -0
  172. data/spec/spec/matchers/change_spec.rb +87 -0
  173. data/spec/spec/matchers/description_generation_spec.rb +31 -37
  174. data/spec/spec/matchers/exist_spec.rb +31 -22
  175. data/spec/spec/matchers/handler_spec.rb +42 -1
  176. data/spec/spec/matchers/have_spec.rb +1 -1
  177. data/spec/spec/matchers/mock_constraint_matchers_spec.rb +1 -1
  178. data/spec/spec/matchers/operator_matcher_spec.rb +1 -1
  179. data/spec/spec/matchers/simple_matcher_spec.rb +31 -0
  180. data/spec/spec/matchers/throw_symbol_spec.rb +4 -1
  181. data/spec/spec/mocks/bug_report_10263.rb +24 -0
  182. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  183. data/spec/spec/mocks/bug_report_8165_spec.rb +2 -2
  184. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +1 -0
  185. data/spec/spec/mocks/mock_spec.rb +200 -102
  186. data/spec/spec/mocks/multiple_return_value_spec.rb +1 -1
  187. data/spec/spec/mocks/options_hash_spec.rb +19 -7
  188. data/spec/spec/mocks/partial_mock_spec.rb +31 -9
  189. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +6 -0
  190. data/spec/spec/mocks/stub_spec.rb +120 -98
  191. data/spec/spec/package/bin_spec_spec.rb +7 -5
  192. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  193. data/spec/spec/runner/command_line_spec.rb +140 -27
  194. data/spec/spec/runner/drb_command_line_spec.rb +39 -31
  195. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +44 -0
  196. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +16 -11
  197. data/spec/spec/runner/formatter/html_formatter_spec.rb +60 -50
  198. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  199. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +29 -13
  200. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
  201. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
  202. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +103 -39
  203. data/spec/spec/runner/formatter/story/html_formatter_spec.rb +56 -0
  204. data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +289 -0
  205. data/spec/spec/runner/heckle_runner_spec.rb +29 -14
  206. data/spec/spec/runner/heckler_spec.rb +4 -5
  207. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +5 -5
  208. data/spec/spec/runner/option_parser_spec.rb +86 -58
  209. data/spec/spec/runner/options_spec.rb +239 -120
  210. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  211. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  212. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  213. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +6 -6
  214. data/spec/spec/runner/reporter_spec.rb +147 -163
  215. data/spec/spec/runner/spec_parser_spec.rb +31 -0
  216. data/spec/spec/runner_spec.rb +11 -0
  217. data/spec/spec/spec_classes.rb +12 -5
  218. data/spec/spec/story/builders.rb +46 -0
  219. data/spec/spec/story/extensions/main_spec.rb +161 -0
  220. data/spec/spec/story/extensions_spec.rb +14 -0
  221. data/spec/spec/story/given_scenario_spec.rb +27 -0
  222. data/spec/spec/story/runner/plain_text_story_runner_spec.rb +92 -0
  223. data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
  224. data/spec/spec/story/runner/scenario_runner_spec.rb +142 -0
  225. data/spec/spec/story/runner/story_mediator_spec.rb +133 -0
  226. data/spec/spec/story/runner/story_parser_spec.rb +384 -0
  227. data/spec/spec/story/runner/story_runner_spec.rb +219 -0
  228. data/spec/spec/story/runner_spec.rb +106 -0
  229. data/spec/spec/story/scenario_spec.rb +20 -0
  230. data/spec/spec/story/step_group_spec.rb +157 -0
  231. data/spec/spec/story/step_mother_spec.rb +72 -0
  232. data/spec/spec/story/step_spec.rb +147 -0
  233. data/spec/spec/story/story_helper.rb +2 -0
  234. data/spec/spec/story/story_spec.rb +86 -0
  235. data/spec/spec/story/world_spec.rb +416 -0
  236. data/spec/spec/translator_spec.rb +2 -1
  237. data/spec/spec_helper.rb +59 -2
  238. data/stories/all.rb +5 -0
  239. data/stories/example_groups/autogenerated_docstrings +26 -0
  240. data/stories/example_groups/example_group_with_should_methods +17 -0
  241. data/stories/example_groups/nested_groups +17 -0
  242. data/stories/example_groups/output +20 -0
  243. data/stories/example_groups/stories.rb +7 -0
  244. data/stories/helper.rb +6 -0
  245. data/stories/interop/examples_and_tests_together +30 -0
  246. data/stories/interop/stories.rb +7 -0
  247. data/stories/interop/test_case_with_should_methods +17 -0
  248. data/stories/pending_stories/README +3 -0
  249. data/stories/resources/helpers/cmdline.rb +9 -0
  250. data/stories/resources/helpers/story_helper.rb +16 -0
  251. data/stories/resources/matchers/smart_match.rb +37 -0
  252. data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
  253. data/stories/resources/spec/simple_spec.rb +8 -0
  254. data/stories/resources/steps/running_rspec.rb +50 -0
  255. data/stories/resources/test/spec_and_test_together.rb +57 -0
  256. data/stories/resources/test/test_case_with_should_methods.rb +30 -0
  257. metadata +232 -106
  258. data/EXAMPLES.rd +0 -111
  259. data/examples/multi_threaded_behaviour_runner.rb +0 -25
  260. data/examples/shared_behaviours_example.rb +0 -39
  261. data/examples/spec_helper.rb +0 -1
  262. data/examples/test_case_adapter_example.rb +0 -26
  263. data/examples/test_case_spec.rb +0 -65
  264. data/lib/spec/dsl.rb +0 -11
  265. data/lib/spec/dsl/behaviour.rb +0 -220
  266. data/lib/spec/dsl/behaviour_callbacks.rb +0 -82
  267. data/lib/spec/dsl/behaviour_eval.rb +0 -231
  268. data/lib/spec/dsl/behaviour_factory.rb +0 -42
  269. data/lib/spec/dsl/composite_proc_builder.rb +0 -33
  270. data/lib/spec/dsl/description.rb +0 -76
  271. data/lib/spec/dsl/example.rb +0 -135
  272. data/lib/spec/dsl/example_matcher.rb +0 -40
  273. data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
  274. data/lib/spec/runner/behaviour_runner.rb +0 -123
  275. data/lib/spec/runner/extensions/kernel.rb +0 -50
  276. data/lib/spec/runner/extensions/object.rb +0 -32
  277. data/lib/spec/runner/formatter.rb +0 -9
  278. data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -29
  279. data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
  280. data/lib/spec/test_case_adapter.rb +0 -10
  281. data/spec/spec/dsl/behaviour_eval_spec.rb +0 -79
  282. data/spec/spec/dsl/behaviour_factory_spec.rb +0 -48
  283. data/spec/spec/dsl/behaviour_spec.rb +0 -661
  284. data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -44
  285. data/spec/spec/dsl/configuration_spec.rb +0 -55
  286. data/spec/spec/dsl/description_spec.rb +0 -89
  287. data/spec/spec/dsl/example_class_spec.rb +0 -24
  288. data/spec/spec/dsl/example_instance_spec.rb +0 -160
  289. data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
  290. data/spec/spec/dsl/shared_behaviour_spec.rb +0 -252
  291. data/spec/spec/runner/behaviour_runner_spec.rb +0 -229
  292. data/spec/spec/runner/context_matching_spec.rb +0 -27
  293. data/spec/spec/runner/extensions/bug_report_10577_spec.rb +0 -35
  294. data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
  295. data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -40
  296. data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -20
  297. data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +0 -36
  298. data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +0 -19
  299. data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +0 -46
  300. data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +0 -21
  301. data/spec/spec/runner/object_ext_spec.rb +0 -11
@@ -0,0 +1,56 @@
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
+ @out.string.should == " <li class=\"passed\">Given a <span class=\"param\">brown</span> <span class=\"param\">dog</span></li>\n"
41
+ end
42
+
43
+ it "should create a ul for collected_steps" do
44
+ @reporter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel'])
45
+ @out.string.should == (<<-EOF)
46
+ <ul id="stock_steps" style="display: none;">
47
+ <li>Given a $coloured $animal</li>
48
+ <li>Given a $n legged eel</li>
49
+ </ul>
50
+ EOF
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,289 @@
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
+ @options = mock('options')
13
+ @options.stub!(:colour).and_return(false)
14
+ @formatter = PlainTextFormatter.new(@options, @out)
15
+ end
16
+
17
+ it 'should summarize the number of scenarios when the run ends' do
18
+ # when
19
+ @formatter.run_started(3)
20
+ @formatter.scenario_started(nil, nil)
21
+ @formatter.scenario_succeeded('story', 'scenario1')
22
+ @formatter.scenario_started(nil, nil)
23
+ @formatter.scenario_succeeded('story', 'scenario2')
24
+ @formatter.scenario_started(nil, nil)
25
+ @formatter.scenario_succeeded('story', 'scenario3')
26
+ @formatter.run_ended
27
+
28
+ # then
29
+ @out.string.should include('3 scenarios')
30
+ end
31
+
32
+ it 'should summarize the number of successful scenarios when the run ends' do
33
+ # when
34
+ @formatter.run_started(3)
35
+ @formatter.scenario_started(nil, nil)
36
+ @formatter.scenario_succeeded('story', 'scenario1')
37
+ @formatter.scenario_started(nil, nil)
38
+ @formatter.scenario_succeeded('story', 'scenario2')
39
+ @formatter.scenario_started(nil, nil)
40
+ @formatter.scenario_succeeded('story', 'scenario3')
41
+ @formatter.run_ended
42
+
43
+ # then
44
+ @out.string.should include('3 scenarios: 3 succeeded')
45
+ end
46
+
47
+ it 'should summarize the number of failed scenarios when the run ends' do
48
+ # when
49
+ @formatter.run_started(3)
50
+ @formatter.scenario_started(nil, nil)
51
+ @formatter.scenario_succeeded('story', 'scenario1')
52
+ @formatter.scenario_started(nil, nil)
53
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
54
+ @formatter.scenario_started(nil, nil)
55
+ @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
56
+ @formatter.run_ended
57
+
58
+ # then
59
+ @out.string.should include("3 scenarios: 1 succeeded, 2 failed")
60
+ end
61
+
62
+ it 'should summarize the number of pending scenarios when the run ends' do
63
+ # when
64
+ @formatter.run_started(3)
65
+ @formatter.scenario_started(nil, nil)
66
+ @formatter.scenario_succeeded('story', 'scenario1')
67
+ @formatter.scenario_started(nil, nil)
68
+ @formatter.scenario_pending('story', 'scenario2', 'message')
69
+ @formatter.scenario_started(nil, nil)
70
+ @formatter.scenario_pending('story', 'scenario3', 'message')
71
+ @formatter.run_ended
72
+
73
+ # then
74
+ @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending")
75
+ end
76
+
77
+ it "should only count the first failure in one scenario" do
78
+ # when
79
+ @formatter.run_started(3)
80
+ @formatter.scenario_started(nil, nil)
81
+ @formatter.scenario_succeeded('story', 'scenario1')
82
+ @formatter.scenario_started(nil, nil)
83
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
84
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' })
85
+ @formatter.scenario_started(nil, nil)
86
+ @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
87
+ @formatter.run_ended
88
+
89
+ # then
90
+ @out.string.should include("3 scenarios: 1 succeeded, 2 failed")
91
+ end
92
+
93
+ it "should only count the first pending in one scenario" do
94
+ # when
95
+ @formatter.run_started(3)
96
+ @formatter.scenario_started(nil, nil)
97
+ @formatter.scenario_succeeded('story', 'scenario1')
98
+ @formatter.scenario_started(nil, nil)
99
+ @formatter.scenario_pending('story', 'scenario2', 'because ...')
100
+ @formatter.scenario_pending('story', 'scenario2', 'because ...')
101
+ @formatter.scenario_started(nil, nil)
102
+ @formatter.scenario_pending('story', 'scenario3', 'because ...')
103
+ @formatter.run_ended
104
+
105
+ # then
106
+ @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending")
107
+ end
108
+
109
+ it "should only count a failure before the first pending in one scenario" do
110
+ # when
111
+ @formatter.run_started(3)
112
+ @formatter.scenario_started(nil, nil)
113
+ @formatter.scenario_succeeded('story', 'scenario1')
114
+ @formatter.scenario_started(nil, nil)
115
+ @formatter.scenario_pending('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
116
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' })
117
+ @formatter.scenario_started(nil, nil)
118
+ @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
119
+ @formatter.run_ended
120
+
121
+ # then
122
+ @out.string.should include("3 scenarios: 1 succeeded, 1 failed, 1 pending")
123
+ end
124
+
125
+ it 'should produce details of the first failure each failed scenario when the run ends' do
126
+ # when
127
+ @formatter.run_started(3)
128
+ @formatter.scenario_started(nil, nil)
129
+ @formatter.scenario_succeeded('story', 'scenario1')
130
+ @formatter.scenario_started(nil, nil)
131
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2' })
132
+ @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2 - this one should not appear' })
133
+ @formatter.scenario_started(nil, nil)
134
+ @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops3' })
135
+ @formatter.run_ended
136
+
137
+ # then
138
+ @out.string.should include("FAILURES:\n")
139
+ @out.string.should include("1) story (scenario2) FAILED")
140
+ @out.string.should include("RuntimeError: oops2")
141
+ @out.string.should_not include("RuntimeError: oops2 - this one should not appear")
142
+ @out.string.should include("2) story (scenario3) FAILED")
143
+ @out.string.should include("RuntimeError: oops3")
144
+ end
145
+
146
+ it 'should produce details of each pending step when the run ends' do
147
+ # when
148
+ @formatter.run_started(2)
149
+ @formatter.scenario_pending('story', 'scenario2', 'todo2')
150
+ @formatter.scenario_pending('story', 'scenario3', 'todo3')
151
+ @formatter.run_ended
152
+
153
+ # then
154
+ @out.string.should include("Pending Steps:\n")
155
+ @out.string.should include("1) story (scenario2): todo2")
156
+ @out.string.should include("2) story (scenario3): todo3")
157
+ end
158
+
159
+ it 'should document a story title and narrative' do
160
+ # when
161
+ @formatter.story_started 'story', 'narrative'
162
+
163
+ # then
164
+ @out.string.should include("Story: story\n\n narrative")
165
+ end
166
+
167
+ it 'should document a scenario name' do
168
+ # when
169
+ @formatter.scenario_started 'story', 'scenario'
170
+
171
+ # then
172
+ @out.string.should include("\n\n Scenario: scenario")
173
+ end
174
+
175
+ it 'should document a step by sentence-casing its name' do
176
+ # when
177
+ @formatter.step_succeeded :given, 'a context'
178
+ @formatter.step_succeeded :when, 'an event'
179
+ @formatter.step_succeeded :then, 'an outcome'
180
+
181
+ # then
182
+ @out.string.should include("\n\n Given a context\n\n When an event\n\n Then an outcome")
183
+ end
184
+
185
+ it 'should document additional givens using And' do
186
+ # when
187
+ @formatter.step_succeeded :given, 'step 1'
188
+ @formatter.step_succeeded :given, 'step 2'
189
+ @formatter.step_succeeded :given, 'step 3'
190
+
191
+ # then
192
+ @out.string.should include(" Given step 1\n And step 2\n And step 3")
193
+ end
194
+
195
+ it 'should document additional events using And' do
196
+ # when
197
+ @formatter.step_succeeded :when, 'step 1'
198
+ @formatter.step_succeeded :when, 'step 2'
199
+ @formatter.step_succeeded :when, 'step 3'
200
+
201
+ # then
202
+ @out.string.should include(" When step 1\n And step 2\n And step 3")
203
+ end
204
+
205
+ it 'should document additional outcomes using And' do
206
+ # when
207
+ @formatter.step_succeeded :then, 'step 1'
208
+ @formatter.step_succeeded :then, 'step 2'
209
+ @formatter.step_succeeded :then, 'step 3'
210
+
211
+ # then
212
+ @out.string.should include(" Then step 1\n And step 2\n And step 3")
213
+ end
214
+
215
+ it 'should document a GivenScenario followed by a Given using And' do
216
+ # when
217
+ @formatter.step_succeeded :'given scenario', 'a scenario'
218
+ @formatter.step_succeeded :given, 'a context'
219
+
220
+ # then
221
+ @out.string.should include(" Given scenario a scenario\n And a context")
222
+ end
223
+
224
+ it 'should document steps with replaced params' do
225
+ @formatter.step_succeeded :given, 'a $coloured dog with $n legs', 'pink', 21
226
+ @out.string.should include(" Given a pink dog with 21 legs")
227
+ end
228
+
229
+ it "should append PENDING for the first pending step" do
230
+ @formatter.scenario_started('','')
231
+ @formatter.step_pending(:given, 'a context')
232
+
233
+ @out.string.should include('Given a context (PENDING)')
234
+ end
235
+
236
+ it "should append PENDING for pending after already pending" do
237
+ @formatter.scenario_started('','')
238
+ @formatter.step_pending(:given, 'a context')
239
+ @formatter.step_pending(:when, 'I say hey')
240
+
241
+ @out.string.should include('When I say hey (PENDING)')
242
+ end
243
+
244
+ it "should append FAILED for the first failiure" do
245
+ @formatter.scenario_started('','')
246
+ @formatter.step_failed(:given, 'a context')
247
+
248
+ @out.string.should include('Given a context (FAILED)')
249
+ end
250
+
251
+ it "should append SKIPPED for the second failiure" do
252
+ @formatter.scenario_started('','')
253
+ @formatter.step_failed(:given, 'a context')
254
+ @formatter.step_failed(:when, 'I say hey')
255
+
256
+ @out.string.should include('When I say hey (SKIPPED)')
257
+ end
258
+
259
+ it "should append SKIPPED for the a failiure after PENDING" do
260
+ @formatter.scenario_started('','')
261
+ @formatter.step_pending(:given, 'a context')
262
+ @formatter.step_failed(:when, 'I say hey')
263
+
264
+ @out.string.should include('When I say hey (SKIPPED)')
265
+ end
266
+
267
+ it 'should print some white space after each story' do
268
+ # when
269
+ @formatter.story_ended 'title', 'narrative'
270
+
271
+ # then
272
+ @out.string.should include("\n\n")
273
+ end
274
+
275
+ it "should print nothing for collected_steps" do
276
+ @formatter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel'])
277
+ @out.string.should == ("")
278
+ end
279
+
280
+ it "should ignore messages it doesn't care about" do
281
+ lambda {
282
+ @formatter.this_method_does_not_exist
283
+ }.should_not raise_error
284
+ end
285
+ end
286
+ end
287
+ end
288
+ end
289
+ end
@@ -17,47 +17,62 @@ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
17
17
  describe "HeckleRunner" do
18
18
  before(:each) do
19
19
  @heckle = mock("heckle", :null_object => true)
20
- @behaviour_runner = mock("behaviour_runner")
21
20
  @heckle_class = mock("heckle_class")
22
21
  end
23
22
 
24
23
  it "should heckle all methods in all classes in a module" do
25
- @heckle_class.should_receive(:new).with("Foo::Bar", "one", behaviour_runner).and_return(@heckle)
26
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle)
27
- @heckle_class.should_receive(:new).with("Foo::Zap", "three", behaviour_runner).and_return(@heckle)
28
- @heckle_class.should_receive(:new).with("Foo::Zap", "four", behaviour_runner).and_return(@heckle)
24
+ @heckle_class.should_receive(:new).with("Foo::Bar", "one", rspec_options).and_return(@heckle)
25
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle)
26
+ @heckle_class.should_receive(:new).with("Foo::Zap", "three", rspec_options).and_return(@heckle)
27
+ @heckle_class.should_receive(:new).with("Foo::Zap", "four", rspec_options).and_return(@heckle)
29
28
 
30
29
  heckle_runner = Spec::Runner::HeckleRunner.new("Foo", @heckle_class)
31
- heckle_runner.heckle_with(behaviour_runner)
30
+ heckle_runner.heckle_with
32
31
  end
33
32
 
34
33
  it "should heckle all methods in a class" do
35
- @heckle_class.should_receive(:new).with("Foo::Bar", "one", behaviour_runner).and_return(@heckle)
36
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle)
34
+ @heckle_class.should_receive(:new).with("Foo::Bar", "one", rspec_options).and_return(@heckle)
35
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle)
37
36
 
38
37
  heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar", @heckle_class)
39
- heckle_runner.heckle_with(behaviour_runner)
38
+ heckle_runner.heckle_with
40
39
  end
41
40
 
42
41
  it "should fail heckling when the class is not found" do
43
42
  lambda do
44
43
  heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bob", @heckle_class)
45
- heckle_runner.heckle_with(behaviour_runner)
44
+ heckle_runner.heckle_with
46
45
  end.should raise_error(StandardError, "Heckling failed - \"Foo::Bob\" is not a known class or module")
47
46
  end
48
47
 
49
48
  it "should heckle specific method in a class (with #)" do
50
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle)
49
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle)
51
50
 
52
51
  heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar#two", @heckle_class)
53
- heckle_runner.heckle_with(behaviour_runner)
52
+ heckle_runner.heckle_with
54
53
  end
55
54
 
56
55
  it "should heckle specific method in a class (with .)" do
57
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle)
56
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle)
58
57
 
59
58
  heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar.two", @heckle_class)
60
- heckle_runner.heckle_with(behaviour_runner)
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
61
76
  end
62
77
  end
63
78
  end
@@ -3,11 +3,10 @@ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
3
3
  require 'spec/runner/heckle_runner'
4
4
 
5
5
  describe "Heckler" do
6
- it "should run behaviour_runner on tests_pass?" do
7
- behaviour_runner = mock("behaviour_runner")
8
- behaviour_runner.should_receive(:run).with([], false)
9
- heckler = Spec::Runner::Heckler.new('Array', 'push', behaviour_runner)
10
-
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)
11
10
  heckler.tests_pass?
12
11
  end
13
12
  end
@@ -11,32 +11,32 @@ module Spec
11
11
  it "should leave anything in lib spec dir" do
12
12
  ["expectations", "mocks", "runner", "stubs"].each do |child|
13
13
  @error.set_backtrace(["/lib/spec/#{child}/anything.rb"])
14
- @tweaker.tweak_backtrace(@error, "spec name")
14
+ @tweaker.tweak_backtrace(@error)
15
15
  @error.backtrace.should_not be_empty
16
16
  end
17
17
  end
18
18
 
19
19
  it "should leave anything in spec dir" do
20
20
  @error.set_backtrace(["/lib/spec/expectations/anything.rb"])
21
- @tweaker.tweak_backtrace(@error, "spec name")
21
+ @tweaker.tweak_backtrace(@error)
22
22
  @error.backtrace.should_not be_empty
23
23
  end
24
24
 
25
25
  it "should leave bin spec" do
26
26
  @error.set_backtrace(["bin/spec:"])
27
- @tweaker.tweak_backtrace(@error, "spec name")
27
+ @tweaker.tweak_backtrace(@error)
28
28
  @error.backtrace.should_not be_empty
29
29
  end
30
30
 
31
31
  it "should not barf on nil backtrace" do
32
32
  lambda do
33
- @tweaker.tweak_backtrace(@error, "spec name")
33
+ @tweaker.tweak_backtrace(@error)
34
34
  end.should_not raise_error
35
35
  end
36
36
 
37
37
  it "should clean up double slashes" do
38
38
  @error.set_backtrace(["/a//b/c//d.rb"])
39
- @tweaker.tweak_backtrace(@error, "spec name")
39
+ @tweaker.tweak_backtrace(@error)
40
40
  @error.backtrace.should include("/a/b/c/d.rb")
41
41
  end
42
42