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
@@ -1,135 +0,0 @@
1
- require 'timeout'
2
-
3
- module Spec
4
- module DSL
5
- class Example
6
- # The global sequence number of this example
7
- attr_accessor :number
8
-
9
- def initialize(description, options={}, &example_block)
10
- @from = caller(0)[3]
11
- @options = options
12
- @example_block = example_block
13
- @description = description
14
- @description_generated_proc = lambda { |desc| @generated_description = desc }
15
- end
16
-
17
- def run(reporter, before_each_block, after_each_block, dry_run, execution_context, timeout=nil)
18
- @dry_run = dry_run
19
- reporter.example_started(self)
20
- return reporter.example_finished(self) if dry_run
21
-
22
- errors = []
23
- location = nil
24
- Timeout.timeout(timeout) do
25
- before_each_ok = before_example(execution_context, errors, &before_each_block)
26
- example_ok = run_example(execution_context, errors) if before_each_ok
27
- after_each_ok = after_example(execution_context, errors, &after_each_block)
28
- location = failure_location(before_each_ok, example_ok, after_each_ok)
29
- end
30
-
31
- ExampleShouldRaiseHandler.new(@from, @options).handle(errors)
32
- reporter.example_finished(self, errors.first, location, @example_block.nil?) if reporter
33
- end
34
-
35
- def matches?(matcher, specified_examples)
36
- matcher.example_desc = description
37
- matcher.matches?(specified_examples)
38
- end
39
-
40
- def description
41
- @description == :__generate_description ? generated_description : @description
42
- end
43
-
44
- def to_s
45
- description
46
- end
47
-
48
- private
49
-
50
- def generated_description
51
- return @generated_description if @generated_description
52
- if @dry_run
53
- "NO NAME (Because of --dry-run)"
54
- else
55
- if @failed
56
- "NO NAME (Because of Error raised in matcher)"
57
- else
58
- "NO NAME (Because there were no expectations)"
59
- end
60
- end
61
- end
62
-
63
- def before_example(execution_context, errors, &behaviour_before_block)
64
- setup_mocks(execution_context)
65
- Spec::Matchers.description_generated(@description_generated_proc)
66
-
67
- builder = CompositeProcBuilder.new
68
- before_proc = builder.proc(&append_errors(errors))
69
- execution_context.instance_eval(&before_proc)
70
-
71
- execution_context.instance_eval(&behaviour_before_block) if behaviour_before_block
72
- return errors.empty?
73
- rescue Exception => e
74
- @failed = true
75
- errors << e
76
- return false
77
- end
78
-
79
- def run_example(execution_context, errors)
80
- begin
81
- execution_context.instance_eval(&@example_block) if @example_block
82
- return true
83
- rescue Exception => e
84
- @failed = true
85
- errors << e
86
- return false
87
- end
88
- end
89
-
90
- def after_example(execution_context, errors, &behaviour_after_each)
91
- execution_context.instance_eval(&behaviour_after_each) if behaviour_after_each
92
-
93
- begin
94
- verify_mocks(execution_context)
95
- ensure
96
- teardown_mocks(execution_context)
97
- end
98
-
99
- Spec::Matchers.unregister_description_generated(@description_generated_proc)
100
-
101
- builder = CompositeProcBuilder.new
102
- after_proc = builder.proc(&append_errors(errors))
103
- execution_context.instance_eval(&after_proc)
104
-
105
- return errors.empty?
106
- rescue Exception => e
107
- @failed = true
108
- errors << e
109
- return false
110
- end
111
-
112
- def setup_mocks(execution_context)
113
- execution_context.setup_mocks_for_rspec if execution_context.respond_to?(:setup_mocks_for_rspec)
114
- end
115
-
116
- def verify_mocks(execution_context)
117
- execution_context.verify_mocks_for_rspec if execution_context.respond_to?(:verify_mocks_for_rspec)
118
- end
119
-
120
- def teardown_mocks(execution_context)
121
- execution_context.teardown_mocks_for_rspec if execution_context.respond_to?(:teardown_mocks_for_rspec)
122
- end
123
-
124
- def append_errors(errors)
125
- proc {|error| errors << error}
126
- end
127
-
128
- def failure_location(before_each_ok, example_ok, after_each_ok)
129
- return 'before(:each)' unless before_each_ok
130
- return description unless example_ok
131
- return 'after(:each)' unless after_each_ok
132
- end
133
- end
134
- end
135
- end
@@ -1,40 +0,0 @@
1
- module Spec
2
- module DSL
3
- class ExampleMatcher
4
-
5
- attr_writer :example_desc
6
- def initialize(behaviour_desc, example_desc=nil)
7
- @behaviour_desc = behaviour_desc
8
- @example_desc = example_desc
9
- end
10
-
11
- def matches?(specified_examples)
12
- specified_examples.each do |specified_example|
13
- return true if matches_literal_example?(specified_example) || matches_example_not_considering_modules?(specified_example)
14
- end
15
- false
16
- end
17
-
18
- private
19
- def matches_literal_example?(specified_example)
20
- specified_example =~ /(^#{context_regexp} #{example_regexp}$|^#{context_regexp}$|^#{example_regexp}$)/
21
- end
22
-
23
- def matches_example_not_considering_modules?(specified_example)
24
- specified_example =~ /(^#{context_regexp_not_considering_modules} #{example_regexp}$|^#{context_regexp_not_considering_modules}$|^#{example_regexp}$)/
25
- end
26
-
27
- def context_regexp
28
- Regexp.escape(@behaviour_desc)
29
- end
30
-
31
- def context_regexp_not_considering_modules
32
- Regexp.escape(@behaviour_desc.split('::').last)
33
- end
34
-
35
- def example_regexp
36
- Regexp.escape(@example_desc)
37
- end
38
- end
39
- end
40
- end
@@ -1,74 +0,0 @@
1
- module Spec
2
- module DSL
3
- class ExampleShouldRaiseHandler
4
- def initialize(file_and_line_number, opts)
5
- @file_and_line_number = file_and_line_number
6
- @options = opts
7
- @expected_error_class = determine_error_class(opts)
8
- @expected_error_message = determine_error_message(opts)
9
- end
10
-
11
- def determine_error_class(opts)
12
- if candidate = opts[:should_raise]
13
- if candidate.is_a?(Class)
14
- return candidate
15
- elsif candidate.is_a?(Array)
16
- return candidate[0]
17
- else
18
- return Exception
19
- end
20
- end
21
- end
22
-
23
- def determine_error_message(opts)
24
- if candidate = opts[:should_raise]
25
- if candidate.is_a?(Array)
26
- return candidate[1]
27
- end
28
- end
29
- return nil
30
- end
31
-
32
- def build_message(exception=nil)
33
- if @expected_error_message.nil?
34
- message = "example block expected #{@expected_error_class.to_s}"
35
- else
36
- message = "example block expected #{@expected_error_class.new(@expected_error_message.to_s).inspect}"
37
- end
38
- message << " but raised #{exception.inspect}" if exception
39
- message << " but nothing was raised" unless exception
40
- message << "\n"
41
- message << @file_and_line_number
42
- end
43
-
44
- def error_matches?(error)
45
- return false unless error.kind_of?(@expected_error_class)
46
- unless @expected_error_message.nil?
47
- if @expected_error_message.is_a?(Regexp)
48
- return false unless error.message =~ @expected_error_message
49
- else
50
- return false unless error.message == @expected_error_message
51
- end
52
- end
53
- return true
54
- end
55
-
56
- def handle(errors)
57
- if @expected_error_class
58
- if errors.empty?
59
- errors << Spec::Expectations::ExpectationNotMetError.new(build_message)
60
- else
61
- error_to_remove = errors.detect do |error|
62
- error_matches?(error)
63
- end
64
- if error_to_remove.nil?
65
- errors.insert(0,Spec::Expectations::ExpectationNotMetError.new(build_message(errors[0])))
66
- else
67
- errors.delete(error_to_remove)
68
- end
69
- end
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,123 +0,0 @@
1
- module Spec
2
- module Runner
3
- class BehaviourRunner
4
-
5
- def initialize(options, arg=nil)
6
- @behaviours = []
7
- @options = options
8
- end
9
-
10
- def add_behaviour(behaviour)
11
- if !specified_examples.nil? && !specified_examples.empty?
12
- behaviour.retain_examples_matching!(specified_examples)
13
- end
14
- @behaviours << behaviour if behaviour.number_of_examples != 0 && !behaviour.shared?
15
- end
16
-
17
- # Runs all behaviours and returns the number of failures.
18
- def run(paths, exit_when_done)
19
- prepare!(paths)
20
- begin
21
- run_behaviours
22
- rescue Interrupt
23
- ensure
24
- report_end
25
- end
26
- failure_count = report_dump
27
-
28
- heckle if(failure_count == 0 && !@options.heckle_runner.nil?)
29
-
30
- if(exit_when_done)
31
- exit_code = (failure_count == 0) ? 0 : 1
32
- exit(exit_code)
33
- end
34
- failure_count
35
- end
36
-
37
- def report_end
38
- @options.reporter.end
39
- end
40
-
41
- def report_dump
42
- @options.reporter.dump
43
- end
44
-
45
- def prepare!(paths)
46
- unless paths.nil? # It's nil when running single specs with ruby
47
- paths = find_paths(paths)
48
- sorted_paths = sort_paths(paths)
49
- load_specs(sorted_paths) # This will populate @behaviours via callbacks to add_behaviour
50
- end
51
- @options.reporter.start(number_of_examples)
52
- @behaviours.reverse! if @options.reverse
53
- set_sequence_numbers
54
- end
55
-
56
- def run_behaviours
57
- @behaviours.each do |behaviour|
58
- behaviour.run(@options.reporter, @options.dry_run, @options.reverse, @options.timeout)
59
- end
60
- end
61
-
62
- def number_of_examples
63
- @behaviours.inject(0) {|sum, behaviour| sum + behaviour.number_of_examples}
64
- end
65
-
66
- FILE_SORTERS = {
67
- 'mtime' => lambda {|file_a, file_b| File.mtime(file_b) <=> File.mtime(file_a)}
68
- }
69
-
70
- def sorter(paths)
71
- FILE_SORTERS[@options.loadby]
72
- end
73
-
74
- def sort_paths(paths)
75
- sorter = sorter(paths)
76
- paths = paths.sort(&sorter) unless sorter.nil?
77
- paths
78
- end
79
-
80
- private
81
-
82
- # Sets the #number on each Example
83
- def set_sequence_numbers
84
- number = 0
85
- @behaviours.each do |behaviour|
86
- number = behaviour.set_sequence_numbers(number, @options.reverse)
87
- end
88
- end
89
-
90
- def find_paths(paths)
91
- result = []
92
- paths.each do |path|
93
- if File.directory?(path)
94
- result += Dir["#{path}/**/*.rb"]
95
- elsif File.file?(path)
96
- result << path
97
- else
98
- raise "File or directory not found: #{path}"
99
- end
100
- end
101
- result
102
- end
103
-
104
- def load_specs(paths)
105
- paths.each do |path|
106
- load path
107
- end
108
- end
109
-
110
- def specified_examples
111
- @options.examples
112
- end
113
-
114
- def heckle
115
- heckle_runner = @options.heckle_runner
116
- @options.heckle_runner = nil
117
- behaviour_runner = self.class.new(@options)
118
- behaviour_runner.instance_variable_set(:@behaviours, @behaviours)
119
- heckle_runner.heckle_with(behaviour_runner)
120
- end
121
- end
122
- end
123
- end
@@ -1,50 +0,0 @@
1
- module Kernel
2
- # Creates and registers an instance of a Spec::DSL::Behaviour (or a subclass).
3
- # The instantiated behaviour class depends on the directory of the file
4
- # calling this method. For example, Spec::Rails will use different
5
- # classes for specs living in <tt>spec/models</tt>, <tt>spec/helpers</tt>,
6
- # <tt>spec/views</tt> and <tt>spec/controllers</tt>.
7
- #
8
- # It is also possible to override autodiscovery of the behaviour class
9
- # with an options Hash as the last argument:
10
- #
11
- # describe "name", :behaviour_type => :something_special do ...
12
- #
13
- # The reason for using different behaviour classes is to have
14
- # different matcher methods available from within the <tt>describe</tt>
15
- # block.
16
- #
17
- # See Spec::DSL::BehaviourFactory#add_behaviour_class for details about
18
- # how to register special Spec::DSL::Behaviour implementations.
19
- #
20
- def describe(*args, &block)
21
- raise ArgumentError if args.empty?
22
- args << {} unless Hash === args.last
23
- args.last[:spec_path] = caller(0)[1]
24
- register_behaviour(Spec::DSL::BehaviourFactory.create(*args, &block))
25
- end
26
- alias :context :describe
27
-
28
- def respond_to(*names)
29
- Spec::Matchers::RespondTo.new(*names)
30
- end
31
-
32
- private
33
-
34
- def register_behaviour(behaviour)
35
- if behaviour.shared?
36
- Spec::DSL::Behaviour.add_shared_behaviour(behaviour)
37
- else
38
- behaviour_runner.add_behaviour(behaviour)
39
- end
40
- end
41
-
42
- def behaviour_runner
43
- # TODO: Figure out a better way to get this considered "covered" and keep this statement on multiple lines
44
- unless $behaviour_runner; \
45
- $behaviour_runner = ::Spec::Runner::OptionParser.new.create_behaviour_runner(ARGV.dup, STDERR, STDOUT, false); \
46
- at_exit { $behaviour_runner.run(nil, false) }; \
47
- end
48
- $behaviour_runner
49
- end
50
- end
@@ -1,32 +0,0 @@
1
- # The following copyright applies to Object#copy_instance_variables_from,
2
- # which we borrowed from active_support.
3
- #
4
- # Copyright (c) 2004 David Heinemeier Hansson
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining
7
- # a copy of this software and associated documentation files (the
8
- # "Software"), to deal in the Software without restriction, including
9
- # without limitation the rights to use, copy, modify, merge, publish,
10
- # distribute, sublicense, and/or sell copies of the Software, and to
11
- # permit persons to whom the Software is furnished to do so, subject to
12
- # the following conditions:
13
- #
14
- # The above copyright notice and this permission notice shall be
15
- # included in all copies or substantial portions of the Software.
16
- #
17
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
- class Object
25
- # From active_support
26
- def copy_instance_variables_from(object, exclude = []) # :nodoc:
27
- exclude += object.protected_instance_variables if object.respond_to? :protected_instance_variables
28
-
29
- instance_variables = object.instance_variables - exclude.map { |name| name.to_s }
30
- instance_variables.each { |name| instance_variable_set(name, object.instance_variable_get(name)) }
31
- end
32
- end