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,7 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ describe "Running an Example" do
4
+ it "should not output twice" do
5
+ true.should be_true
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ dir = File.dirname(__FILE__)
2
+ require "#{dir}/../../spec_helper"
3
+
4
+ triggering_double_output = rspec_options
5
+ options = Spec::Runner::OptionParser.parse(
6
+ ["#{dir}/output_one_time_fixture.rb"], $stderr, $stdout
7
+ )
8
+ Spec::Runner::CommandLine.run(options)
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Runner
5
+ describe CommandLine do
6
+ it "should not output twice" do
7
+ dir = File.dirname(__FILE__)
8
+ Dir.chdir("#{dir}/../../..") do
9
+ output =`ruby #{dir}/output_one_time_fixture_runner.rb`
10
+ output.should include("1 example, 0 failures")
11
+ output.should_not include("0 examples, 0 failures")
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -10,13 +10,13 @@ module Spec
10
10
 
11
11
  it "should not barf on nil backtrace" do
12
12
  lambda do
13
- @tweaker.tweak_backtrace(@error, "spec name")
13
+ @tweaker.tweak_backtrace(@error)
14
14
  end.should_not raise_error
15
15
  end
16
16
 
17
17
  it "should remove anything from textmate ruby bundle" do
18
18
  @error.set_backtrace(["/Applications/TextMate.app/Contents/SharedSupport/Bundles/Ruby.tmbundle/Support/tmruby.rb:147"])
19
- @tweaker.tweak_backtrace(@error, "spec name")
19
+ @tweaker.tweak_backtrace(@error)
20
20
  @error.backtrace.should be_empty
21
21
  end
22
22
 
@@ -24,7 +24,7 @@ module Spec
24
24
  ["expectations", "mocks", "runner"].each do |child|
25
25
  element="/lib/spec/#{child}/anything.rb"
26
26
  @error.set_backtrace([element])
27
- @tweaker.tweak_backtrace(@error, "spec name")
27
+ @tweaker.tweak_backtrace(@error)
28
28
  unless (@error.backtrace.empty?)
29
29
  raise("Should have tweaked away '#{element}'")
30
30
  end
@@ -34,7 +34,7 @@ module Spec
34
34
  it "should remove mock_frameworks/rspec" do
35
35
  element = "mock_frameworks/rspec"
36
36
  @error.set_backtrace([element])
37
- @tweaker.tweak_backtrace(@error, "spec name")
37
+ @tweaker.tweak_backtrace(@error)
38
38
  unless (@error.backtrace.empty?)
39
39
  raise("Should have tweaked away '#{element}'")
40
40
  end
@@ -42,13 +42,13 @@ module Spec
42
42
 
43
43
  it "should remove bin spec" do
44
44
  @error.set_backtrace(["bin/spec:"])
45
- @tweaker.tweak_backtrace(@error, "spec name")
45
+ @tweaker.tweak_backtrace(@error)
46
46
  @error.backtrace.should be_empty
47
47
  end
48
48
 
49
49
  it "should clean up double slashes" do
50
50
  @error.set_backtrace(["/a//b/c//d.rb"])
51
- @tweaker.tweak_backtrace(@error, "spec name")
51
+ @tweaker.tweak_backtrace(@error)
52
52
  @error.backtrace.should include("/a/b/c/d.rb")
53
53
  end
54
54
  end
@@ -2,203 +2,187 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
2
 
3
3
  module Spec
4
4
  module Runner
5
-
6
- module ReporterSpecHelper
7
- def setup
8
- @io = StringIO.new
5
+ describe Reporter do
6
+ attr_reader :formatter_output, :options, :backtrace_tweaker, :formatter, :reporter, :example_group
7
+ before(:each) do
8
+ @formatter_output = StringIO.new
9
+ @options = Options.new(StringIO.new, StringIO.new)
9
10
  @backtrace_tweaker = stub("backtrace tweaker", :tweak_backtrace => nil)
10
- @formatter = mock("formatter")
11
- @reporter = Reporter.new([@formatter], @backtrace_tweaker)
11
+ options.backtrace_tweaker = backtrace_tweaker
12
+ @formatter = ::Spec::Runner::Formatter::BaseTextFormatter.new(options, formatter_output)
13
+ options.formatters << formatter
14
+ @reporter = Reporter.new(options)
15
+ @example_group = create_example_group("example_group")
16
+ reporter.add_example_group example_group
12
17
  end
13
18
 
14
19
  def failure
15
20
  Mocks::DuckTypeArgConstraint.new(:header, :exception)
16
21
  end
17
-
18
- def description(s)
19
- Spec::DSL::Description.new(s)
22
+
23
+ def create_example_group(description_text)
24
+ example_group = Class.new(Spec::Example::ExampleGroup)
25
+ example_group.describe description_text
26
+ example_group
20
27
  end
21
- end
22
-
23
- describe Reporter do
24
- include ReporterSpecHelper
25
- before(:each) {setup}
26
-
27
- it "should tell formatter when behaviour is added" do
28
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
29
- @reporter.add_behaviour(description("behaviour"))
28
+
29
+ it "should assign itself as the reporter to options" do
30
+ options.reporter.should equal(@reporter)
31
+ end
32
+
33
+ it "should tell formatter when example_group is added" do
34
+ formatter.should_receive(:add_example_group).with(example_group)
35
+ reporter.add_example_group(example_group)
30
36
  end
31
37
 
32
- it "should handle multiple behaviours with same name" do
33
- @formatter.should_receive(:add_behaviour).exactly(3).times
34
- @formatter.should_receive(:example_started).exactly(3).times
35
- @formatter.should_receive(:example_passed).exactly(3).times
36
- @formatter.should_receive(:start_dump)
37
- @formatter.should_receive(:close).with(no_args)
38
- @formatter.should_receive(:dump_summary).with(anything(), 3, 0, 0)
39
- @reporter.add_behaviour(description("behaviour"))
40
- @reporter.example_started("spec 1")
41
- @reporter.example_finished("spec 1")
42
- @reporter.add_behaviour(description("behaviour"))
43
- @reporter.example_started("spec 2")
44
- @reporter.example_finished("spec 2")
45
- @reporter.add_behaviour(description("behaviour"))
46
- @reporter.example_started("spec 3")
47
- @reporter.example_finished("spec 3")
48
- @reporter.dump
38
+ it "should handle multiple example_groups with same name" do
39
+ formatter.should_receive(:add_example_group).exactly(3).times
40
+ formatter.should_receive(:example_started).exactly(3).times
41
+ formatter.should_receive(:example_passed).exactly(3).times
42
+ formatter.should_receive(:start_dump)
43
+ formatter.should_receive(:dump_pending)
44
+ formatter.should_receive(:close).with(no_args)
45
+ formatter.should_receive(:dump_summary).with(anything(), 3, 0, 0)
46
+ reporter.add_example_group(create_example_group("example_group"))
47
+ reporter.example_started("spec 1")
48
+ reporter.example_finished("spec 1")
49
+ reporter.add_example_group(create_example_group("example_group"))
50
+ reporter.example_started("spec 2")
51
+ reporter.example_finished("spec 2")
52
+ reporter.add_example_group(create_example_group("example_group"))
53
+ reporter.example_started("spec 3")
54
+ reporter.example_finished("spec 3")
55
+ reporter.dump
49
56
  end
50
57
 
51
58
  it "should handle multiple examples with the same name" do
52
59
  error=RuntimeError.new
53
- @formatter.should_receive(:add_behaviour).exactly(2).times
54
- @formatter.should_receive(:example_passed).with("example").exactly(2).times
55
- @formatter.should_receive(:example_failed).with("example", 1, failure)
56
- @formatter.should_receive(:example_failed).with("example", 2, failure)
57
- @formatter.should_receive(:dump_failure).exactly(2).times
58
- @formatter.should_receive(:start_dump)
59
- @formatter.should_receive(:close).with(no_args)
60
- @formatter.should_receive(:dump_summary).with(anything(), 4, 2, 0)
61
- @backtrace_tweaker.should_receive(:tweak_backtrace).twice
62
- @reporter.add_behaviour(description("behaviour"))
63
- @reporter.example_finished("example")
64
- @reporter.example_finished("example", error)
65
- @reporter.add_behaviour(description("behaviour"))
66
- @reporter.example_finished("example")
67
- @reporter.example_finished("example", error)
68
- @reporter.dump
60
+ passing = ExampleGroup.new("example")
61
+ failing = ExampleGroup.new("example")
62
+
63
+ formatter.should_receive(:add_example_group).exactly(2).times
64
+ formatter.should_receive(:example_passed).with(passing).exactly(2).times
65
+ formatter.should_receive(:example_failed).with(failing, 1, failure)
66
+ formatter.should_receive(:example_failed).with(failing, 2, failure)
67
+ formatter.should_receive(:dump_failure).exactly(2).times
68
+ formatter.should_receive(:start_dump)
69
+ formatter.should_receive(:dump_pending)
70
+ formatter.should_receive(:close).with(no_args)
71
+ formatter.should_receive(:dump_summary).with(anything(), 4, 2, 0)
72
+ backtrace_tweaker.should_receive(:tweak_backtrace).twice
73
+
74
+ reporter.add_example_group(create_example_group("example_group"))
75
+ reporter.example_finished(passing)
76
+ reporter.example_finished(failing, error)
77
+
78
+ reporter.add_example_group(create_example_group("example_group"))
79
+ reporter.example_finished(passing)
80
+ reporter.example_finished(failing, error)
81
+ reporter.dump
69
82
  end
70
83
 
71
84
  it "should push stats to formatter even with no data" do
72
- @formatter.should_receive(:start_dump)
73
- @formatter.should_receive(:dump_summary).with(anything(), 0, 0, 0)
74
- @formatter.should_receive(:close).with(no_args)
75
- @reporter.dump
85
+ formatter.should_receive(:start_dump)
86
+ formatter.should_receive(:dump_pending)
87
+ formatter.should_receive(:dump_summary).with(anything(), 0, 0, 0)
88
+ formatter.should_receive(:close).with(no_args)
89
+ reporter.dump
76
90
  end
77
-
91
+
78
92
  it "should push time to formatter" do
79
- @formatter.should_receive(:start).with(5)
80
- @formatter.should_receive(:start_dump)
81
- @formatter.should_receive(:close).with(no_args)
82
- @formatter.should_receive(:dump_summary) do |time, a, b|
93
+ formatter.should_receive(:start).with(5)
94
+ formatter.should_receive(:start_dump)
95
+ formatter.should_receive(:dump_pending)
96
+ formatter.should_receive(:close).with(no_args)
97
+ formatter.should_receive(:dump_summary) do |time, a, b|
83
98
  time.to_s.should match(/[0-9].[0-9|e|-]+/)
84
99
  end
85
- @reporter.start(5)
86
- @reporter.end
87
- @reporter.dump
88
- end
89
- end
90
-
91
- describe Reporter, "reporting one passing example" do
92
- include ReporterSpecHelper
93
- before(:each) {setup}
94
-
95
- it "should tell formatter example passed" do
96
- @formatter.should_receive(:example_passed)
97
- @reporter.example_finished("example")
98
- end
99
-
100
- it "should not delegate to backtrace tweaker" do
101
- @formatter.should_receive(:example_passed)
102
- @backtrace_tweaker.should_not_receive(:tweak_backtrace)
103
- @reporter.example_finished("example")
100
+ reporter.start(5)
101
+ reporter.end
102
+ reporter.dump
104
103
  end
105
104
 
106
- it "should account for passing example in stats" do
107
- @formatter.should_receive(:example_passed)
108
- @formatter.should_receive(:start_dump)
109
- @formatter.should_receive(:dump_summary).with(anything(), 1, 0, 0)
110
- @formatter.should_receive(:close).with(no_args)
111
- @reporter.example_finished("example")
112
- @reporter.dump
113
- end
114
- end
105
+ describe Reporter, "reporting one passing example" do
106
+ it "should tell formatter example passed" do
107
+ formatter.should_receive(:example_passed)
108
+ reporter.example_finished("example")
109
+ end
115
110
 
116
- describe Reporter, "reporting one failing example" do
117
- include ReporterSpecHelper
118
- before(:each) {setup}
111
+ it "should not delegate to backtrace tweaker" do
112
+ formatter.should_receive(:example_passed)
113
+ backtrace_tweaker.should_not_receive(:tweak_backtrace)
114
+ reporter.example_finished("example")
115
+ end
119
116
 
120
- it "should tell formatter that example failed" do
121
- @formatter.should_receive(:example_failed)
122
- @reporter.example_finished("example", RuntimeError.new)
123
- end
124
-
125
- it "should delegate to backtrace tweaker" do
126
- @formatter.should_receive(:example_failed)
127
- @backtrace_tweaker.should_receive(:tweak_backtrace)
128
- @reporter.example_finished("spec", RuntimeError.new)
117
+ it "should account for passing example in stats" do
118
+ formatter.should_receive(:example_passed)
119
+ formatter.should_receive(:start_dump)
120
+ formatter.should_receive(:dump_pending)
121
+ formatter.should_receive(:dump_summary).with(anything(), 1, 0, 0)
122
+ formatter.should_receive(:close).with(no_args)
123
+ reporter.example_finished("example")
124
+ reporter.dump
125
+ end
129
126
  end
130
127
 
131
- it "should account for failing example in stats" do
132
- @formatter.should_receive(:add_behaviour)
133
- @formatter.should_receive(:example_failed).with("example", 1, failure)
134
- @formatter.should_receive(:start_dump)
135
- @formatter.should_receive(:dump_failure).with(1, anything())
136
- @formatter.should_receive(:dump_summary).with(anything(), 1, 1, 0)
137
- @formatter.should_receive(:close).with(no_args)
138
- @reporter.add_behaviour(description("behaviour"))
139
- @reporter.example_finished("example", RuntimeError.new)
140
- @reporter.dump
141
- end
142
-
143
- end
144
-
145
- describe Reporter, "reporting one pending example (Not Yet Implemented)" do
146
- include ReporterSpecHelper
147
- before(:each) {setup}
148
-
149
- it "should tell formatter example is pending" do
150
- @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "Not Yet Implemented")
151
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
152
- @reporter.add_behaviour(description('behaviour'))
153
- @reporter.example_finished("example", nil, nil, true)
154
- end
128
+ describe Reporter, "reporting one failing example" do
129
+ it "should tell formatter that example failed" do
130
+ formatter.should_receive(:example_failed)
131
+ reporter.example_finished(example_group, RuntimeError.new)
132
+ end
155
133
 
156
- it "should account for pending example in stats" do
157
- @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "Not Yet Implemented")
158
- @formatter.should_receive(:start_dump)
159
- @formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1)
160
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
161
- @formatter.should_receive(:close).with(no_args)
162
- @reporter.add_behaviour(description('behaviour'))
163
- @reporter.example_finished("example", nil, nil, true)
164
- @reporter.dump
165
- end
166
- end
134
+ it "should delegate to backtrace tweaker" do
135
+ formatter.should_receive(:example_failed)
136
+ backtrace_tweaker.should_receive(:tweak_backtrace)
137
+ reporter.example_finished(ExampleGroup.new("example"), RuntimeError.new)
138
+ end
167
139
 
168
- describe Reporter, "reporting one pending example (ExamplePendingError)" do
169
- include ReporterSpecHelper
170
- before(:each) {setup}
140
+ it "should account for failing example in stats" do
141
+ example = ExampleGroup.new("example")
142
+ formatter.should_receive(:example_failed).with(example, 1, failure)
143
+ formatter.should_receive(:start_dump)
144
+ formatter.should_receive(:dump_pending)
145
+ formatter.should_receive(:dump_failure).with(1, anything())
146
+ formatter.should_receive(:dump_summary).with(anything(), 1, 1, 0)
147
+ formatter.should_receive(:close).with(no_args)
148
+ reporter.example_finished(example, RuntimeError.new)
149
+ reporter.dump
150
+ end
171
151
 
172
- it "should tell formatter example is pending" do
173
- @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "reason")
174
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
175
- @reporter.add_behaviour(description('behaviour'))
176
- @reporter.example_finished("example", Spec::DSL::ExamplePendingError.new("reason"), nil, false)
177
152
  end
178
153
 
179
- it "should account for pending example in stats" do
180
- @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "reason")
181
- @formatter.should_receive(:start_dump)
182
- @formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1)
183
- @formatter.should_receive(:close).with(no_args)
184
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
185
- @reporter.add_behaviour(description('behaviour'))
186
- @reporter.example_finished("example", Spec::DSL::ExamplePendingError.new("reason"), nil, false)
187
- @reporter.dump
188
- end
189
- end
154
+ describe Reporter, "reporting one pending example (ExamplePendingError)" do
155
+ it "should tell formatter example is pending" do
156
+ example = ExampleGroup.new("example")
157
+ formatter.should_receive(:example_pending).with(example_group.description, example, "reason")
158
+ formatter.should_receive(:add_example_group).with(example_group)
159
+ reporter.add_example_group(example_group)
160
+ reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason"))
161
+ end
190
162
 
191
- describe Reporter, "reporting one pending example (PendingFixedError)" do
192
- include ReporterSpecHelper
193
- before(:each) {setup}
163
+ it "should account for pending example in stats" do
164
+ example = ExampleGroup.new("example")
165
+ formatter.should_receive(:example_pending).with(example_group.description, example, "reason")
166
+ formatter.should_receive(:start_dump)
167
+ formatter.should_receive(:dump_pending)
168
+ formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1)
169
+ formatter.should_receive(:close).with(no_args)
170
+ formatter.should_receive(:add_example_group).with(example_group)
171
+ reporter.add_example_group(example_group)
172
+ reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason"))
173
+ reporter.dump
174
+ end
175
+ end
194
176
 
195
- it "should tell formatter pending example is fixed" do
196
- @formatter.should_receive(:example_failed) do |name, counter, failure|
197
- failure.header.should == "'behaviour example' FIXED"
177
+ describe Reporter, "reporting one pending example (PendingExampleFixedError)" do
178
+ it "should tell formatter pending example is fixed" do
179
+ formatter.should_receive(:example_failed) do |name, counter, failure|
180
+ failure.header.should == "'example_group example' FIXED"
181
+ end
182
+ formatter.should_receive(:add_example_group).with(example_group)
183
+ reporter.add_example_group(example_group)
184
+ reporter.example_finished(ExampleGroup.new("example"), Spec::Example::PendingExampleFixedError.new("reason"))
198
185
  end
199
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
200
- @reporter.add_behaviour(description('behaviour'))
201
- @reporter.example_finished("example", Spec::DSL::PendingFixedError.new("reason"), nil, false)
202
186
  end
203
187
  end
204
188
  end
@@ -37,6 +37,21 @@ describe SpecParserSubject, "described" do
37
37
 
38
38
  end
39
39
 
40
+ describe SpecParserSubject, "described", :something => :something_else do
41
+
42
+ it "7" do
43
+ end
44
+
45
+ end
46
+
47
+ describe "described", :something => :something_else do
48
+
49
+ it "8" do
50
+ end
51
+
52
+ end
53
+
54
+
40
55
  describe "SpecParser" do
41
56
  before(:each) do
42
57
  @p = Spec::Runner::SpecParser.new
@@ -89,5 +104,21 @@ describe "SpecParser" do
89
104
  it "should find context and description and example for type" do
90
105
  @p.spec_name_for(File.open(__FILE__), 36).should == "SpecParserSubject described 6"
91
106
  end
107
+
108
+ it "should find context and description for type with modifications" do
109
+ @p.spec_name_for(File.open(__FILE__), 40).should == "SpecParserSubject described"
110
+ end
111
+
112
+ it "should find context and described and example for type with modifications" do
113
+ @p.spec_name_for(File.open(__FILE__), 43).should == "SpecParserSubject described 7"
114
+ end
115
+
116
+ it "should find example group" do
117
+ @p.spec_name_for(File.open(__FILE__), 47).should == "described"
118
+ end
119
+
120
+ it "should find example" do
121
+ @p.spec_name_for(File.open(__FILE__), 50).should == "described 8"
122
+ end
92
123
 
93
124
  end