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,65 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+ require 'spec/runner/formatter/profile_formatter'
3
+
4
+ module Spec
5
+ module Runner
6
+ module Formatter
7
+ describe ProfileFormatter do
8
+ attr_reader :io, :formatter
9
+ before(:each) do
10
+ @io = StringIO.new
11
+ options = mock('options')
12
+ options.stub!(:colour).and_return(true)
13
+ @formatter = ProfileFormatter.new(options, io)
14
+ end
15
+
16
+ it "should print a heading" do
17
+ formatter.start(0)
18
+ io.string.should eql("Profiling enabled.\n")
19
+ end
20
+
21
+ it "should record the current time when starting a new example" do
22
+ now = Time.now
23
+ Time.stub!(:now).and_return(now)
24
+ formatter.example_started('should foo')
25
+ formatter.instance_variable_get("@time").should == now
26
+ end
27
+
28
+ it "should correctly record a passed example" do
29
+ now = Time.now
30
+ Time.stub!(:now).and_return(now)
31
+ parent_example_group = Class.new(ExampleGroup).describe('Parent')
32
+ child_example_group = Class.new(parent_example_group).describe('Child')
33
+
34
+ formatter.add_example_group(child_example_group)
35
+
36
+ formatter.example_started('when foo')
37
+ Time.stub!(:now).and_return(now+1)
38
+ formatter.example_passed(stub('foo', :description => 'i like ice cream'))
39
+
40
+ formatter.start_dump
41
+ io.string.should include('Parent Child')
42
+ end
43
+
44
+ it "should sort the results in descending order" do
45
+ formatter.instance_variable_set("@example_times", [['a', 'a', 0.1], ['b', 'b', 0.3], ['c', 'c', 0.2]])
46
+ formatter.start_dump
47
+ formatter.instance_variable_get("@example_times").should == [ ['b', 'b', 0.3], ['c', 'c', 0.2], ['a', 'a', 0.1]]
48
+ end
49
+
50
+ it "should print the top 10 results" do
51
+ example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup")
52
+ formatter.add_example_group(example_group)
53
+ formatter.instance_variable_set("@time", Time.now)
54
+
55
+ 15.times do
56
+ formatter.example_passed(stub('foo', :description => 'i like ice cream'))
57
+ end
58
+
59
+ io.should_receive(:print).exactly(10)
60
+ formatter.start_dump
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -1,4 +1,5 @@
1
1
  require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+ require 'spec/runner/formatter/progress_bar_formatter'
2
3
 
3
4
  module Spec
4
5
  module Runner
@@ -6,7 +7,10 @@ module Spec
6
7
  describe ProgressBarFormatter do
7
8
  before(:each) do
8
9
  @io = StringIO.new
9
- @formatter = ProgressBarFormatter.new(@io)
10
+ @options = mock('options')
11
+ @options.stub!(:dry_run).and_return(false)
12
+ @options.stub!(:colour).and_return(false)
13
+ @formatter = ProgressBarFormatter.new(@options, @io)
10
14
  end
11
15
 
12
16
  it "should produce line break on start dump" do
@@ -20,44 +24,41 @@ module Spec
20
24
  end
21
25
 
22
26
  it "should produce standard summary" do
23
- @formatter.example_pending("behaviour", "example", "message")
27
+ @formatter.example_pending("example_group", ExampleGroup.new("example"), "message")
24
28
  @io.rewind
25
29
  @formatter.dump_summary(3, 2, 1, 1)
26
30
  @io.string.should eql(%Q|
27
31
  Finished in 3 seconds
28
32
 
29
33
  2 examples, 1 failure, 1 pending
30
-
31
- Pending:
32
- behaviour example (message)
33
34
  |)
34
35
  end
35
36
 
36
37
  it "should push green dot for passing spec" do
37
38
  @io.should_receive(:tty?).and_return(true)
38
- @formatter.colour = true
39
+ @options.should_receive(:colour).and_return(true)
39
40
  @formatter.example_passed("spec")
40
41
  @io.string.should == "\e[32m.\e[0m"
41
42
  end
42
43
 
43
44
  it "should push red F for failure spec" do
44
45
  @io.should_receive(:tty?).and_return(true)
45
- @formatter.colour = true
46
+ @options.should_receive(:colour).and_return(true)
46
47
  @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new))
47
48
  @io.string.should eql("\e[31mF\e[0m")
48
49
  end
49
50
 
50
51
  it "should push magenta F for error spec" do
51
52
  @io.should_receive(:tty?).and_return(true)
52
- @formatter.colour = true
53
+ @options.should_receive(:colour).and_return(true)
53
54
  @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", RuntimeError.new))
54
55
  @io.string.should eql("\e[35mF\e[0m")
55
56
  end
56
57
 
57
58
  it "should push blue F for fixed pending spec" do
58
59
  @io.should_receive(:tty?).and_return(true)
59
- @formatter.colour = true
60
- @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::DSL::PendingFixedError.new))
60
+ @options.should_receive(:colour).and_return(true)
61
+ @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Example::PendingExampleFixedError.new))
61
62
  @io.string.should eql("\e[34mF\e[0m")
62
63
  end
63
64
 
@@ -83,17 +84,18 @@ EOE
83
84
  end
84
85
 
85
86
  it "should dump pending" do
86
- @formatter.example_pending("behaviour", "example", "message")
87
+ @formatter.example_pending("example_group", ExampleGroup.new("example"), "message")
87
88
  @formatter.dump_pending
88
- @io.string.should =~ /Pending\:\nbehaviour example \(message\)\n/
89
+ @io.string.should =~ /Pending\:\nexample_group example \(message\)\n/
89
90
  end
90
91
  end
91
92
 
92
93
  describe "ProgressBarFormatter outputting to custom out" do
93
94
  before(:each) do
94
95
  @out = mock("out")
96
+ @options = mock('options')
95
97
  @out.stub!(:puts)
96
- @formatter = ProgressBarFormatter.new(@out)
98
+ @formatter = ProgressBarFormatter.new(@options, @out)
97
99
  @formatter.class.send :public, :output_to_tty?
98
100
  end
99
101
 
@@ -106,6 +108,20 @@ EOE
106
108
  @formatter.output_to_tty?.should be_false
107
109
  end
108
110
  end
111
+
112
+ describe ProgressBarFormatter, "dry run" do
113
+ before(:each) do
114
+ @io = StringIO.new
115
+ options = mock('options')
116
+ options.stub!(:dry_run).and_return(true)
117
+ @formatter = ProgressBarFormatter.new(options, @io)
118
+ end
119
+
120
+ it "should not produce summary on dry run" do
121
+ @formatter.dump_summary(3, 2, 1, 0)
122
+ @io.string.should eql("")
123
+ end
124
+ end
109
125
  end
110
126
  end
111
127
  end
@@ -1,11 +1,18 @@
1
1
  require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+ require 'spec/runner/formatter/snippet_extractor'
2
3
 
3
- describe Spec::Runner::Formatter::SnippetExtractor do
4
- it "should fall back on a default message when it doesn't understand a line" do
5
- Spec::Runner::Formatter::SnippetExtractor.new.snippet_for("blech").should == ["# Couldn't get snippet for blech", 1]
6
- end
4
+ module Spec
5
+ module Runner
6
+ module Formatter
7
+ describe SnippetExtractor do
8
+ it "should fall back on a default message when it doesn't understand a line" do
9
+ SnippetExtractor.new.snippet_for("blech").should == ["# Couldn't get snippet for blech", 1]
10
+ end
7
11
 
8
- it "should fall back on a default message when it doesn't find the file" do
9
- Spec::Runner::Formatter::SnippetExtractor.new.lines_around("blech", 8).should == "# Couldn't get snippet for blech"
12
+ it "should fall back on a default message when it doesn't find the file" do
13
+ SnippetExtractor.new.lines_around("blech", 8).should == "# Couldn't get snippet for blech"
14
+ end
15
+ end
16
+ end
10
17
  end
11
- end
18
+ end
@@ -0,0 +1,103 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+ require 'hpricot' # Needed to compare generated with wanted HTML
3
+ require 'spec/runner/formatter/text_mate_formatter'
4
+
5
+ module Spec
6
+ module Runner
7
+ module Formatter
8
+ describe TextMateFormatter do
9
+ attr_reader :root, :suffix, :expected_file
10
+ before do
11
+ @root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
12
+ @suffix = jruby? ? '-jruby' : ''
13
+ @expected_file = File.dirname(__FILE__) + "/text_mate_formatted-#{::VERSION}#{suffix}.html"
14
+ end
15
+
16
+ def jruby?
17
+ PLATFORM == 'java'
18
+ end
19
+
20
+ def produces_html_identical_to_manually_designed_document(opt)
21
+ root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
22
+
23
+ Dir.chdir(root) do
24
+ args = [
25
+ 'failing_examples/mocking_example.rb',
26
+ 'failing_examples/diffing_spec.rb',
27
+ 'examples/pure/stubbing_example.rb',
28
+ 'examples/pure/pending_example.rb',
29
+ '--format',
30
+ 'textmate',
31
+ opt
32
+ ]
33
+ err = StringIO.new
34
+ out = StringIO.new
35
+ options = ::Spec::Runner::OptionParser.parse(args, err, out)
36
+ Spec::Runner::CommandLine.run(options)
37
+
38
+ yield(out.string)
39
+ end
40
+ end
41
+
42
+ # # Uncomment this spec temporarily in order to overwrite the expected with actual.
43
+ # # Use with care!!!
44
+ # describe TextMateFormatter, "functional spec file generator" do
45
+ # it "generates a new comparison file" do
46
+ # Dir.chdir(root) do
47
+ # args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb', 'examples/pure/pending_example.rb', '--format', 'textmate', '--diff']
48
+ # err = StringIO.new
49
+ # out = StringIO.new
50
+ # Spec::Runner::CommandLine.run(
51
+ # ::Spec::Runner::OptionParser.parse(args, err, out)
52
+ # )
53
+ #
54
+ # seconds = /\d+\.\d+ seconds/
55
+ # html = out.string.gsub seconds, 'x seconds'
56
+ #
57
+ # File.open(expected_file, 'w') {|io| io.write(html)}
58
+ # end
59
+ # end
60
+ # end
61
+
62
+ describe "functional spec using --diff" do
63
+ it "should produce HTML identical to the one we designed manually with --diff" do
64
+ produces_html_identical_to_manually_designed_document("--diff") do |html|
65
+ suffix = jruby? ? '-jruby' : ''
66
+ expected_file = File.dirname(__FILE__) + "/text_mate_formatted-#{::VERSION}#{suffix}.html"
67
+ unless File.file?(expected_file)
68
+ raise "There is no HTML file with expected content for this platform: #{expected_file}"
69
+ end
70
+ expected_html = File.read(expected_file)
71
+
72
+ seconds = /\d+\.\d+ seconds/
73
+ html.gsub! seconds, 'x seconds'
74
+ expected_html.gsub! seconds, 'x seconds'
75
+
76
+ doc = Hpricot(html)
77
+ backtraces = doc.search("div.backtrace/a")
78
+ doc.search("div.backtrace").remove
79
+
80
+ expected_doc = Hpricot(expected_html)
81
+ expected_doc.search("div.backtrace").remove
82
+
83
+ doc.inner_html.should == expected_doc.inner_html
84
+
85
+ backtraces.each do |backtrace_link|
86
+ backtrace_link[:href].should include("txmt://open?url=")
87
+ end
88
+ end
89
+ end
90
+
91
+ end
92
+
93
+ describe "functional spec using --dry-run" do
94
+ it "should produce HTML identical to the one we designed manually with --dry-run" do
95
+ produces_html_identical_to_manually_designed_document("--dry-run") do |html, expected_html|
96
+ html.should =~ /This was a dry-run/m
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -1,61 +1,125 @@
1
1
  require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+ require 'spec/runner/formatter/specdoc_formatter'
2
3
 
3
4
  module Spec
4
5
  module Runner
5
6
  module Formatter
6
- describe "SpecdocFormatter" do
7
+ describe SpecdocFormatter do
8
+ it_should_behave_like "sandboxed rspec_options"
9
+ attr_reader :io, :options, :formatter, :example_group
7
10
  before(:each) do
8
11
  @io = StringIO.new
9
- @formatter = SpecdocFormatter.new(@io)
12
+ options.stub!(:dry_run).and_return(false)
13
+ options.stub!(:colour).and_return(false)
14
+ @formatter = SpecdocFormatter.new(options, io)
15
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup")
10
16
  end
11
17
 
12
- it "should produce standard summary without pending when pending has a 0 count" do
13
- @formatter.dump_summary(3, 2, 1, 0)
14
- @io.string.should eql("\nFinished in 3 seconds\n\n2 examples, 1 failure\n")
15
- end
18
+ describe "where ExampleGroup has no superclasss with a description" do
19
+ before do
20
+ formatter.add_example_group(example_group)
21
+ end
16
22
 
17
- it "should produce standard summary" do
18
- @formatter.dump_summary(3, 2, 1, 4)
19
- @io.string.should eql("\nFinished in 3 seconds\n\n2 examples, 1 failure, 4 pending\n")
20
- end
23
+ it "should produce standard summary without pending when pending has a 0 count" do
24
+ formatter.dump_summary(3, 2, 1, 0)
25
+ io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure\n")
26
+ end
21
27
 
22
- it "should push context name" do
23
- @formatter.add_behaviour(Spec::DSL::Description.new("context"))
24
- @io.string.should eql("\ncontext\n")
25
- end
28
+ it "should produce standard summary" do
29
+ formatter.dump_summary(3, 2, 1, 4)
30
+ io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure, 4 pending\n")
31
+ end
26
32
 
27
- it "should push failing spec name and failure number" do
28
- @formatter.example_failed(DSL::Example.new("spec"), 98, Reporter::Failure.new("c s", RuntimeError.new))
29
- @io.string.should eql("- spec (ERROR - 98)\n")
30
- end
33
+ it "should push ExampleGroup name" do
34
+ io.string.should eql("\nExampleGroup\n")
35
+ end
31
36
 
32
- it "should push nothing on start" do
33
- @formatter.start(5)
34
- @io.string.should eql("")
35
- end
37
+ it "when having an error, should push failing spec name and failure number" do
38
+ formatter.example_failed(
39
+ example_group.it("spec"),
40
+ 98,
41
+ Reporter::Failure.new("c s", RuntimeError.new)
42
+ )
43
+ io.string.should have_example_group_output("- spec (ERROR - 98)\n")
44
+ end
36
45
 
37
- it "should push nothing on start dump" do
38
- @formatter.start_dump
39
- @io.string.should eql("")
40
- end
46
+ it "when having an expectation failure, should push failing spec name and failure number" do
47
+ formatter.example_failed(
48
+ example_group.it("spec"),
49
+ 98,
50
+ Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
51
+ )
52
+ io.string.should have_example_group_output("- spec (FAILED - 98)\n")
53
+ end
41
54
 
42
- it "should push passing spec name" do
43
- @formatter.example_passed(DSL::Example.new("spec"))
44
- @io.string.should eql("- spec\n")
45
- end
55
+ it "should push nothing on start" do
56
+ formatter.start(5)
57
+ io.string.should have_example_group_output("")
58
+ end
46
59
 
47
- it "should push pending example name and message" do
48
- @formatter.example_pending('behaviour', 'example','reason')
49
- @io.string.should eql("- example (PENDING: reason)\n")
50
- end
60
+ it "should push nothing on start dump" do
61
+ formatter.start_dump
62
+ io.string.should have_example_group_output("")
63
+ end
51
64
 
52
- it "should dump pending" do
53
- @formatter.example_pending('behaviour', 'example','reason')
54
- @io.rewind
55
- @formatter.dump_pending
56
- @io.string.should =~ /Pending\:\nbehaviour example \(reason\)\n/
65
+ it "should push passing spec name" do
66
+ formatter.example_passed(example_group.it("spec"))
67
+ io.string.should have_example_group_output("- spec\n")
68
+ end
69
+
70
+ it "should push pending example name and message" do
71
+ formatter.example_pending('example_group', ExampleGroup.new("example"), 'reason')
72
+ io.string.should have_example_group_output("- example (PENDING: reason)\n")
73
+ end
74
+
75
+ it "should dump pending" do
76
+ formatter.example_pending('example_group', ExampleGroup.new("example"), 'reason')
77
+ io.rewind
78
+ formatter.dump_pending
79
+ io.string.should =~ /Pending\:\nexample_group example \(reason\)\n/
80
+ end
81
+
82
+ def have_example_group_output(expected_output)
83
+ expected = "\nExampleGroup\n#{expected_output}"
84
+ ::Spec::Matchers::SimpleMatcher.new(expected) do |actual|
85
+ actual == expected
86
+ end
87
+ end
57
88
  end
58
89
 
90
+ describe "where ExampleGroup has two superclasses with a description" do
91
+ attr_reader :child_example_group, :grand_child_example_group
92
+ before do
93
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
94
+ @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
95
+ formatter.add_example_group(grand_child_example_group)
96
+ end
97
+
98
+ specify "when having an error, should push failing spec name and failure number" do
99
+ formatter.example_failed(
100
+ example_group.it("spec"),
101
+ 98,
102
+ Reporter::Failure.new("c s", RuntimeError.new)
103
+ )
104
+ io.string.should have_nested_example_group_output("- spec (ERROR - 98)\n")
105
+ end
106
+
107
+ specify "when having an expectation failure, should push failing spec name and failure number" do
108
+ formatter.example_failed(
109
+ example_group.it("spec"),
110
+ 98,
111
+ Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
112
+ )
113
+ io.string.should have_nested_example_group_output("- spec (FAILED - 98)\n")
114
+ end
115
+
116
+ def have_nested_example_group_output(expected_output)
117
+ expected_full_output = "\nExampleGroup Child ExampleGroup GrandChild ExampleGroup\n#{expected_output}"
118
+ ::Spec::Matchers::SimpleMatcher.new(expected_full_output) do |actual|
119
+ actual == expected_full_output
120
+ end
121
+ end
122
+ end
59
123
  end
60
124
  end
61
125
  end