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,23 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Runner
5
+ describe ClassAndArgumentsParser, ".parse" do
6
+
7
+ it "should use a single : to separate class names from arguments" do
8
+ ClassAndArgumentsParser.parse('Foo').should == ['Foo', nil]
9
+ ClassAndArgumentsParser.parse('Foo:arg').should == ['Foo', 'arg']
10
+ ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg').should == ['Foo::Bar::Zap', 'arg']
11
+ ClassAndArgumentsParser.parse('Foo:arg1,arg2').should == ['Foo', 'arg1,arg2']
12
+ ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg1,arg2').should == ['Foo::Bar::Zap', 'arg1,arg2']
13
+ ClassAndArgumentsParser.parse('Foo::Bar::Zap:drb://foo,drb://bar').should == ['Foo::Bar::Zap', 'drb://foo,drb://bar']
14
+ end
15
+
16
+ it "should raise an error when passed an empty string" do
17
+ lambda do
18
+ ClassAndArgumentsParser.parse('')
19
+ end.should raise_error("Couldn't parse \"\"")
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,33 +1,146 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
2
 
3
- describe "CommandLine" do
4
- it "should run directory" do
5
- file = File.dirname(__FILE__) + '/../../../examples'
6
- err = StringIO.new
7
- out = StringIO.new
8
- Spec::Runner::CommandLine.run([file], err, out, false, true)
9
-
10
- out.rewind
11
- out.read.should =~ /78 examples, 0 failures, 3 pending/n
12
- end
3
+ module Spec
4
+ module Runner
5
+ describe CommandLine, ".run" do
6
+ it_should_behave_like "sandboxed rspec_options"
7
+ attr_reader :options, :err, :out
8
+ before do
9
+ @err = options.error_stream
10
+ @out = options.output_stream
11
+ end
13
12
 
14
- it "should run file" do
15
- file = File.dirname(__FILE__) + '/../../../failing_examples/predicate_example.rb'
16
- err = StringIO.new
17
- out = StringIO.new
18
- Spec::Runner::CommandLine.run([file], err, out, false, true)
19
-
20
- out.rewind
21
- out.read.should =~ /2 examples, 1 failure/n
22
- end
13
+ it "should run directory" do
14
+ file = File.dirname(__FILE__) + '/../../../examples/pure'
15
+ Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out))
16
+
17
+ @out.rewind
18
+ @out.read.should =~ /\d+ examples, 0 failures, 3 pending/n
19
+ end
20
+
21
+ it "should run file" do
22
+ file = File.dirname(__FILE__) + '/../../../failing_examples/predicate_example.rb'
23
+ Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out))
24
+
25
+ @out.rewind
26
+ @out.read.should =~ /2 examples, 1 failure/n
27
+ end
28
+
29
+ it "should raise when file does not exist" do
30
+ file = File.dirname(__FILE__) + '/doesntexist'
31
+
32
+ lambda {
33
+ Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out))
34
+ }.should raise_error
35
+ end
36
+
37
+ it "should return true when in --generate-options mode" do
38
+ Spec::Runner::CommandLine.run(
39
+ OptionParser.parse(['--generate-options', '/dev/null'], @err, @out)
40
+ ).should be_true
41
+ end
42
+
43
+ it "should dump even if Interrupt exception is occurred" do
44
+ example_group = Class.new(::Spec::Example::ExampleGroup) do
45
+ describe("example_group")
46
+ it "no error" do
47
+ end
48
+
49
+ it "should interrupt" do
50
+ raise Interrupt, "I'm interrupting"
51
+ end
52
+ end
53
+
54
+ options = ::Spec::Runner::Options.new(@err, @out)
55
+ ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
56
+ options.reporter.should_receive(:dump)
57
+ options.add_example_group(example_group)
58
+
59
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
60
+ end
61
+
62
+ it "should heckle when options have heckle_runner" do
63
+ example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do
64
+ it "no error" do
65
+ end
66
+ end
67
+ options = ::Spec::Runner::Options.new(@err, @out)
68
+ ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
69
+ options.add_example_group example_group
70
+
71
+ heckle_runner = mock("heckle_runner")
72
+ heckle_runner.should_receive(:heckle_with)
73
+ $rspec_mocks.__send__(:mocks).delete(heckle_runner)
74
+
75
+ options.heckle_runner = heckle_runner
76
+ options.add_example_group(example_group)
77
+
78
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
79
+ heckle_runner.rspec_verify
80
+ end
81
+
82
+ it "should run examples backwards if options.reverse is true" do
83
+ options = ::Spec::Runner::Options.new(@err, @out)
84
+ ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
85
+ options.reverse = true
86
+
87
+ b1 = Class.new(Spec::Example::ExampleGroup)
88
+ b2 = Class.new(Spec::Example::ExampleGroup)
89
+
90
+ b2.should_receive(:run).ordered
91
+ b1.should_receive(:run).ordered
92
+
93
+ options.add_example_group(b1)
94
+ options.add_example_group(b2)
95
+
96
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
97
+ end
98
+
99
+ it "should pass its ExampleGroup to the reporter" do
100
+ example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do
101
+ it "should" do
102
+ end
103
+ end
104
+ options = ::Spec::Runner::Options.new(@err, @out)
105
+ options.add_example_group(example_group)
106
+
107
+ ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
108
+ options.reporter.should_receive(:add_example_group).with(example_group)
109
+
110
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
111
+ end
112
+
113
+ it "runs only selected Examples when options.examples is set" do
114
+ options = ::Spec::Runner::Options.new(@err, @out)
115
+ ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
116
+
117
+ options.examples << "example_group should"
118
+ should_has_run = false
119
+ should_not_has_run = false
120
+ example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do
121
+ it "should" do
122
+ should_has_run = true
123
+ end
124
+ it "should not" do
125
+ should_not_has_run = true
126
+ end
127
+ end
128
+
129
+ options.reporter.should_receive(:add_example_group).with(example_group)
130
+
131
+ options.add_example_group example_group
132
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
23
133
 
24
- it "should raise when file does not exist" do
25
- file = File.dirname(__FILE__) + '/doesntexist'
26
- err = StringIO.new
27
- out = StringIO.new
134
+ should_has_run.should be_true
135
+ should_not_has_run.should be_false
136
+ end
28
137
 
29
- lambda {
30
- Spec::Runner::CommandLine.run([file], err, out, false, true)
31
- }.should raise_error
138
+ it "sets Spec.run to true" do
139
+ ::Spec.run = false
140
+ ::Spec.should_not be_run
141
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
142
+ ::Spec.should be_run
143
+ end
144
+ end
32
145
  end
33
- end
146
+ end
@@ -3,82 +3,90 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
3
3
  module Spec
4
4
  module Runner
5
5
  describe DrbCommandLine, "without running local server" do
6
-
7
6
  unless Config::CONFIG['ruby_install_name'] == 'jruby'
8
7
  it "should print error when there is no running local server" do
9
8
  err = StringIO.new
10
9
  out = StringIO.new
11
- DrbCommandLine.run(['--version'], err, out, false)
12
-
10
+ DrbCommandLine.run(OptionParser.parse(['--version'], err, out))
11
+
13
12
  err.rewind
14
13
  err.read.should =~ /No server is running/
15
14
  end
16
15
  end
17
16
  end
18
17
 
19
- describe DrbCommandLine, "with local server" do
18
+ class DrbCommandLineSpec < ::Spec::Example::ExampleGroup
19
+ describe DrbCommandLine, "with local server"
20
20
 
21
- unless Config::CONFIG['ruby_install_name'] == 'jruby'
21
+ class CommandLineForSpec
22
+ def self.run(argv, stderr, stdout)
23
+ exit Spec::Runner::CommandLine.run(OptionParser.parse(argv, stderr, stdout))
24
+ end
25
+ end
26
+
27
+ unless Config::CONFIG['ruby_install_name'] == 'jruby'
22
28
  before(:all) do
23
- DRb.start_service("druby://localhost:8989", Spec::Runner::CommandLine)
24
- $drb_example_file_counter = 0
29
+ DRb.start_service("druby://localhost:8989", CommandLineForSpec)
30
+ @@drb_example_file_counter = 0
25
31
  end
26
-
32
+
27
33
  before(:each) do
28
34
  create_dummy_spec_file
29
- $drb_example_file_counter = $drb_example_file_counter + 1
35
+ @@drb_example_file_counter = @@drb_example_file_counter + 1
30
36
  end
31
-
37
+
32
38
  after(:each) do
33
39
  File.delete(@dummy_spec_filename)
34
40
  end
35
-
41
+
36
42
  after(:all) do
37
- DRb.stop_service
43
+ DRb.stop_service
38
44
  end
39
45
 
40
- it "should run against local server" do
46
+ xit "should run against local server" do
41
47
  out = run_spec_via_druby(['--version'])
42
48
  out.should =~ /RSpec/n
43
49
  end
44
-
45
- it "should output green colorized text when running with --colour option" do
50
+
51
+ xit "should output green colorized text when running with --colour option" do
46
52
  out = run_spec_via_druby(["--colour", @dummy_spec_filename])
47
53
  out.should =~ /\e\[32m/n
48
54
  end
49
-
50
- it "should output red colorized text when running with -c option" do
55
+
56
+ xit "should output red colorized text when running with -c option" do
51
57
  out = run_spec_via_druby(["-c", @dummy_spec_filename])
52
58
  out.should =~ /\e\[31m/n
53
59
  end
54
60
 
55
61
  def create_dummy_spec_file
56
- @dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) + "/_dummy_spec#{$drb_example_file_counter}.rb"
62
+ @dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) + "/_dummy_spec#{@@drb_example_file_counter}.rb"
57
63
  File.open(@dummy_spec_filename, 'w') do |f|
58
64
  f.write %{
59
- describe "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do
60
- it "should be output with green bar" do
61
- true.should be_true
62
- end
65
+ describe "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do
66
+ it "should be output with green bar" do
67
+ true.should be_true
68
+ end
63
69
 
64
- it "should be output with red bar" do
65
- violated("I want to see a red bar!")
66
- end
67
- end
68
- }
70
+ it "should be output with red bar" do
71
+ violated("I want to see a red bar!")
72
+ end
73
+ end
74
+ }
69
75
  end
70
76
  end
71
-
72
- def run_spec_via_druby(args)
77
+
78
+ def run_spec_via_druby(argv)
73
79
  err, out = StringIO.new, StringIO.new
74
80
  out.instance_eval do
75
81
  def tty?; true end
76
82
  end
77
- Spec::Runner::DrbCommandLine.run(args, err, out, false, true)
83
+ options = ::Spec::Runner::Options.new(err, out)
84
+ options.argv = argv
85
+ Spec::Runner::DrbCommandLine.run(options)
78
86
  out.rewind; out.read
79
87
  end
80
88
  end
81
-
89
+
82
90
  end
83
91
  end
84
92
  end
@@ -0,0 +1,44 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+ require 'spec/runner/formatter/failing_example_groups_formatter'
3
+
4
+ module Spec
5
+ module Runner
6
+ module Formatter
7
+ describe FailingExampleGroupsFormatter do
8
+ attr_reader :example_group, :formatter, :io
9
+
10
+ before(:each) do
11
+ @io = StringIO.new
12
+ options = mock('options')
13
+ @formatter = FailingExampleGroupsFormatter.new(options, io)
14
+ @example_group = Class.new(::Spec::Example::ExampleGroup)
15
+ end
16
+
17
+ it "should add example name for each failure" do
18
+ formatter.add_example_group(Class.new(ExampleGroup).describe("b 1"))
19
+ formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new))
20
+ formatter.add_example_group(Class.new(ExampleGroup).describe("b 2"))
21
+ formatter.example_failed("e 2", nil, Reporter::Failure.new(nil, RuntimeError.new))
22
+ formatter.example_failed("e 3", nil, Reporter::Failure.new(nil, RuntimeError.new))
23
+ io.string.should == "b 1\nb 2\n"
24
+ end
25
+
26
+ it "should delimit ExampleGroup superclass descriptions with :" do
27
+ parent_example_group = Class.new(example_group).describe("Parent")
28
+ child_example_group = Class.new(parent_example_group).describe("#child_method")
29
+ grand_child_example_group = Class.new(child_example_group).describe("GrandChild")
30
+
31
+ formatter.add_example_group(grand_child_example_group)
32
+ formatter.example_failed("failure", nil, Reporter::Failure.new(nil, RuntimeError.new))
33
+ io.string.should == "Parent#child_method GrandChild\n"
34
+ end
35
+
36
+ it "should remove druby url, which is used by Spec::Distributed" do
37
+ @formatter.add_example_group(Class.new(ExampleGroup).describe("something something (druby://99.99.99.99:99)"))
38
+ @formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new))
39
+ io.string.should == "something something\n"
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,24 +1,29 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper.rb'
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+ require 'spec/runner/formatter/failing_examples_formatter'
2
3
 
3
4
  module Spec
4
5
  module Runner
5
6
  module Formatter
6
- describe "FailingExamplesFormatter" do
7
+ describe FailingExamplesFormatter do
7
8
  before(:each) do
8
9
  @io = StringIO.new
9
- @formatter = FailingExamplesFormatter.new(@io)
10
+ options = mock('options')
11
+ @formatter = FailingExamplesFormatter.new(options, @io)
10
12
  end
11
13
 
12
14
  it "should add example name for each failure" do
13
- @formatter.add_behaviour("b 1")
14
- @formatter.example_failed(DSL::Example.new("e 1"), nil, Reporter::Failure.new(nil, RuntimeError.new))
15
- @formatter.add_behaviour("b 2")
16
- @formatter.example_failed(DSL::Example.new("e 2"), nil, Reporter::Failure.new(nil, RuntimeError.new))
17
- @formatter.example_failed(DSL::Example.new("e 3"), nil, Reporter::Failure.new(nil, RuntimeError.new))
15
+ example_group_1 = Class.new(ExampleGroup).describe("A")
16
+ example_group_2 = Class.new(example_group_1).describe("B")
17
+
18
+ @formatter.add_example_group(example_group_1)
19
+ @formatter.example_failed(example_group_1.it("a1"){}, nil, Reporter::Failure.new(nil, RuntimeError.new))
20
+ @formatter.add_example_group(example_group_2)
21
+ @formatter.example_failed(example_group_2.it("b2"){}, nil, Reporter::Failure.new(nil, RuntimeError.new))
22
+ @formatter.example_failed(example_group_2.it("b3"){}, nil, Reporter::Failure.new(nil, RuntimeError.new))
18
23
  @io.string.should eql(<<-EOF
19
- b 1 e 1
20
- b 2 e 2
21
- b 2 e 3
24
+ A a1
25
+ A B b2
26
+ A B b3
22
27
  EOF
23
28
  )
24
29
  end
@@ -1,56 +1,66 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
-
3
- describe "HtmlFormatter" do
4
- ['--diff', '--dry-run'].each do |opt|
5
- it "should produce HTML identical to the one we designed manually with #{opt}" do
6
- root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
7
- suffix = PLATFORM == 'java' ? '-jruby' : ''
8
- expected_file = File.dirname(__FILE__) + "/html_formatted-#{VERSION}#{suffix}.html"
9
- raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file)
10
- expected_html = File.read(expected_file)
11
- raise "There should be no absolute paths in html_formatted.html!!" if (expected_html =~ /\/Users/n || expected_html =~ /\/home/n)
12
-
13
- Dir.chdir(root) do
14
- args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/stubbing_example.rb', 'examples/pending_example.rb', '--format', 'html', opt]
15
- err = StringIO.new
16
- out = StringIO.new
17
- Spec::Runner::CommandLine.run(
18
- args,
19
- err,
20
- out,
21
- false
22
- )
23
-
24
- seconds = /\d+\.\d+ seconds/
25
- html = out.string.gsub seconds, 'x seconds'
26
- expected_html.gsub! seconds, 'x seconds'
27
-
28
- if opt == '--diff'
29
- # Uncomment this line temporarily in order to overwrite the expected with actual.
30
- # Use with care!!!
31
- # File.open(expected_file, 'w') {|io| io.write(html)}
32
-
33
- doc = Hpricot(html)
34
- backtraces = doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
35
- doc.search("div.backtrace").remove
36
-
37
- expected_doc = Hpricot(expected_html)
38
- expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
39
- expected_doc.search("div.backtrace").remove
40
-
41
- doc.inner_html.should == expected_doc.inner_html
42
-
43
- expected_backtraces.each_with_index do |expected_line, i|
44
- expected_path, expected_line_number, expected_suffix = expected_line.split(':')
45
- actual_path, actual_line_number, actual_suffix = backtraces[i].split(':')
46
- File.expand_path(actual_path).should == File.expand_path(expected_path)
47
- actual_line_number.should == expected_line_number
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+ require 'hpricot' # Needed to compare generated with wanted HTML
3
+ require 'spec/runner/formatter/html_formatter'
4
+
5
+ module Spec
6
+ module Runner
7
+ module Formatter
8
+ describe HtmlFormatter do
9
+ ['--diff', '--dry-run'].each do |opt|
10
+ def jruby?
11
+ PLATFORM == 'java'
12
+ end
13
+
14
+ it "should produce HTML identical to the one we designed manually with #{opt}" do
15
+ root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
16
+ suffix = jruby? ? '-jruby' : ''
17
+ expected_file = File.dirname(__FILE__) + "/html_formatted-#{::VERSION}#{suffix}.html"
18
+ raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file)
19
+ expected_html = File.read(expected_file)
20
+ unless jruby?
21
+ raise "There should be no absolute paths in html_formatted.html!!" if (expected_html =~ /\/Users/n || expected_html =~ /\/home/n)
22
+ end
23
+
24
+ Dir.chdir(root) do
25
+ args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb', 'examples/pure/pending_example.rb', '--format', 'html', opt]
26
+ err = StringIO.new
27
+ out = StringIO.new
28
+ CommandLine.run(
29
+ OptionParser.parse(args, err, out)
30
+ )
31
+
32
+ seconds = /\d+\.\d+ seconds/
33
+ html = out.string.gsub seconds, 'x seconds'
34
+ expected_html.gsub! seconds, 'x seconds'
35
+
36
+ if opt == '--diff'
37
+ # Uncomment this line temporarily in order to overwrite the expected with actual.
38
+ # Use with care!!!
39
+ # File.open(expected_file, 'w') {|io| io.write(html)}
40
+
41
+ doc = Hpricot(html)
42
+ backtraces = doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
43
+ doc.search("div.backtrace").remove
44
+
45
+ expected_doc = Hpricot(expected_html)
46
+ expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
47
+ expected_doc.search("div.backtrace").remove
48
+
49
+ doc.inner_html.should == expected_doc.inner_html
50
+
51
+ expected_backtraces.each_with_index do |expected_line, i|
52
+ expected_path, expected_line_number, expected_suffix = expected_line.split(':')
53
+ actual_path, actual_line_number, actual_suffix = backtraces[i].split(':')
54
+ File.expand_path(actual_path).should == File.expand_path(expected_path)
55
+ actual_line_number.should == expected_line_number
56
+ end
57
+ else
58
+ html.should =~ /This was a dry-run/m
59
+ end
60
+ end
48
61
  end
49
- else
50
- html.should =~ /This was a dry-run/m
51
62
  end
52
63
  end
53
64
  end
54
65
  end
55
-
56
66
  end