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,82 +0,0 @@
1
- module Spec
2
- module DSL
3
- # See http://rspec.rubyforge.org/documentation/before_and_after.html
4
- module BehaviourCallbacks
5
- def prepend_before(*args, &block)
6
- scope, options = scope_and_options(*args)
7
- add(scope, options, :before, :unshift, &block)
8
- end
9
- def append_before(*args, &block)
10
- scope, options = scope_and_options(*args)
11
- add(scope, options, :before, :<<, &block)
12
- end
13
- alias_method :before, :append_before
14
-
15
- def prepend_after(*args, &block)
16
- scope, options = scope_and_options(*args)
17
- add(scope, options, :after, :unshift, &block)
18
- end
19
- alias_method :after, :prepend_after
20
- def append_after(*args, &block)
21
- scope, options = scope_and_options(*args)
22
- add(scope, options, :after, :<<, &block)
23
- end
24
-
25
- def scope_and_options(*args)
26
- args, options = args_and_options(*args)
27
- scope = (args[0] || :each), options
28
- end
29
-
30
- def add(scope, options, where, how, &block)
31
- scope ||= :each
32
- options ||= {}
33
- behaviour_type = options[:behaviour_type]
34
- case scope
35
- when :each; self.__send__("#{where}_each_parts", behaviour_type).__send__(how, block)
36
- when :all; self.__send__("#{where}_all_parts", behaviour_type).__send__(how, block)
37
- end
38
- end
39
-
40
- def remove_after(scope, &block)
41
- after_each_parts.delete(block)
42
- end
43
-
44
- # Deprecated. Use before(:each)
45
- def setup(&block)
46
- before(:each, &block)
47
- end
48
-
49
- # Deprecated. Use after(:each)
50
- def teardown(&block)
51
- after(:each, &block)
52
- end
53
-
54
- def before_all_parts(behaviour_type=nil) # :nodoc:
55
- @before_all_parts ||= {}
56
- @before_all_parts[behaviour_type] ||= []
57
- end
58
-
59
- def after_all_parts(behaviour_type=nil) # :nodoc:
60
- @after_all_parts ||= {}
61
- @after_all_parts[behaviour_type] ||= []
62
- end
63
-
64
- def before_each_parts(behaviour_type=nil) # :nodoc:
65
- @before_each_parts ||= {}
66
- @before_each_parts[behaviour_type] ||= []
67
- end
68
-
69
- def after_each_parts(behaviour_type=nil) # :nodoc:
70
- @after_each_parts ||= {}
71
- @after_each_parts[behaviour_type] ||= []
72
- end
73
-
74
- def clear_before_and_after! # :nodoc:
75
- @before_all_parts = nil
76
- @after_all_parts = nil
77
- @before_each_parts = nil
78
- @after_each_parts = nil
79
- end
80
- end
81
- end
82
- end
@@ -1,231 +0,0 @@
1
- module Spec
2
- module DSL
3
- module BehaviourEval
4
- module ModuleMethods
5
- include BehaviourCallbacks
6
-
7
- attr_writer :behaviour
8
- attr_accessor :description
9
-
10
- # RSpec runs every example in a new instance of Object, mixing in
11
- # the behaviour necessary to run examples. Because this behaviour gets
12
- # mixed in, it can get mixed in to an instance of any class at all.
13
- #
14
- # This is something that you would hardly ever use, but there is one
15
- # common use case for it - inheriting from Test::Unit::TestCase. RSpec's
16
- # Rails plugin uses this feature to provide access to all of the features
17
- # that are available for Test::Unit within RSpec examples.
18
- def inherit(klass)
19
- raise ArgumentError.new("Shared behaviours cannot inherit from classes") if @behaviour.shared?
20
- @behaviour_superclass = klass
21
- derive_execution_context_class_from_behaviour_superclass
22
- end
23
-
24
- # You can pass this one or many modules. Each module will subsequently
25
- # be included in the each object in which an example is run. Use this
26
- # to provide global helper methods to your examples.
27
- #
28
- # == Example
29
- #
30
- # module HelperMethods
31
- # def helper_method
32
- # ...
33
- # end
34
- # end
35
- #
36
- # describe Thing do
37
- # include HelperMethods
38
- # it "should do stuff" do
39
- # helper_method
40
- # end
41
- # end
42
- def include(*mods)
43
- mods.each do |mod|
44
- included_modules << mod
45
- mod.send :included, self
46
- end
47
- end
48
-
49
- # Use this to pull in examples from shared behaviours.
50
- # See Spec::Runner for information about shared behaviours.
51
- def it_should_behave_like(behaviour_description)
52
- behaviour = @behaviour.class.find_shared_behaviour(behaviour_description)
53
- if behaviour.nil?
54
- raise RuntimeError.new("Shared Behaviour '#{behaviour_description}' can not be found")
55
- end
56
- behaviour.copy_to(self)
57
- end
58
-
59
- def copy_to(eval_module) # :nodoc:
60
- examples.each { |e| eval_module.examples << e; }
61
- before_each_parts.each { |p| eval_module.before_each_parts << p }
62
- after_each_parts.each { |p| eval_module.after_each_parts << p }
63
- before_all_parts.each { |p| eval_module.before_all_parts << p }
64
- after_all_parts.each { |p| eval_module.after_all_parts << p }
65
- included_modules.each { |m| eval_module.included_modules << m }
66
- eval_module.included_modules << self
67
- end
68
-
69
- # :call-seq:
70
- # predicate_matchers[matcher_name] = method_on_object
71
- # predicate_matchers[matcher_name] = [method1_on_object, method2_on_object]
72
- #
73
- # Dynamically generates a custom matcher that will match
74
- # a predicate on your class. RSpec provides a couple of these
75
- # out of the box:
76
- #
77
- # exist (or state expectations)
78
- # File.should exist("path/to/file")
79
- #
80
- # an_instance_of (for mock argument constraints)
81
- # mock.should_receive(:message).with(an_instance_of(String))
82
- #
83
- # == Examples
84
- #
85
- # class Fish
86
- # def can_swim?
87
- # true
88
- # end
89
- # end
90
- #
91
- # describe Fish do
92
- # predicate_matchers[:swim] = :can_swim?
93
- # it "should swim" do
94
- # Fish.new.should swim
95
- # end
96
- # end
97
- def predicate_matchers
98
- @predicate_matchers ||= {:exist => :exist?, :an_instance_of => :is_a?}
99
- end
100
-
101
- def define_predicate_matchers(hash=nil) # :nodoc:
102
- if hash.nil?
103
- define_predicate_matchers(predicate_matchers)
104
- define_predicate_matchers(Spec::Runner.configuration.predicate_matchers)
105
- else
106
- hash.each_pair do |matcher_method, method_on_object|
107
- define_method matcher_method do |*args|
108
- eval("be_#{method_on_object.to_s.gsub('?','')}(*args)")
109
- end
110
- end
111
- end
112
- end
113
-
114
- # Creates an instance of Spec::DSL::Example and adds
115
- # it to a collection of examples of the current behaviour.
116
- def it(description=:__generate_description, opts={}, &block)
117
- examples << Example.new(description, opts, &block)
118
- end
119
-
120
- # Alias for it.
121
- def specify(description=:__generate_description, opts={}, &block)
122
- it(description, opts, &block)
123
- end
124
-
125
- def methods # :nodoc:
126
- my_methods = super
127
- my_methods |= behaviour_superclass.methods
128
- my_methods
129
- end
130
-
131
- protected
132
-
133
- def method_missing(method_name, *args)
134
- if behaviour_superclass.respond_to?(method_name)
135
- return execution_context_class.send(method_name, *args)
136
- end
137
- super
138
- end
139
-
140
- def before_each_proc(behaviour_type, &error_handler)
141
- parts = []
142
- parts.push(*Behaviour.before_each_parts(nil))
143
- parts.push(*Behaviour.before_each_parts(behaviour_type)) unless behaviour_type.nil?
144
- parts.push(*before_each_parts(nil))
145
- parts.push(*before_each_parts(behaviour_type)) unless behaviour_type.nil?
146
- CompositeProcBuilder.new(parts).proc(&error_handler)
147
- end
148
-
149
- def before_all_proc(behaviour_type, &error_handler)
150
- parts = []
151
- parts.push(*Behaviour.before_all_parts(nil))
152
- parts.push(*Behaviour.before_all_parts(behaviour_type)) unless behaviour_type.nil?
153
- parts.push(*before_all_parts(nil))
154
- parts.push(*before_all_parts(behaviour_type)) unless behaviour_type.nil?
155
- CompositeProcBuilder.new(parts).proc(&error_handler)
156
- end
157
-
158
- def after_all_proc(behaviour_type)
159
- parts = []
160
- parts.push(*after_all_parts(behaviour_type)) unless behaviour_type.nil?
161
- parts.push(*after_all_parts(nil))
162
- parts.push(*Behaviour.after_all_parts(behaviour_type)) unless behaviour_type.nil?
163
- parts.push(*Behaviour.after_all_parts(nil))
164
- CompositeProcBuilder.new(parts).proc
165
- end
166
-
167
- def after_each_proc(behaviour_type)
168
- parts = []
169
- parts.push(*after_each_parts(behaviour_type)) unless behaviour_type.nil?
170
- parts.push(*after_each_parts(nil))
171
- parts.push(*Behaviour.after_each_parts(behaviour_type)) unless behaviour_type.nil?
172
- parts.push(*Behaviour.after_each_parts(nil))
173
- CompositeProcBuilder.new(parts).proc
174
- end
175
-
176
- private
177
-
178
- def execution_context_class
179
- @execution_context_class ||= derive_execution_context_class_from_behaviour_superclass
180
- end
181
-
182
- def derive_execution_context_class_from_behaviour_superclass
183
- @execution_context_class = Class.new(behaviour_superclass)
184
- behaviour_superclass.spec_inherited(self) if behaviour_superclass.respond_to?(:spec_inherited)
185
- @execution_context_class
186
- end
187
-
188
- def behaviour_superclass
189
- @behaviour_superclass ||= Object
190
- end
191
-
192
- protected
193
- def included_modules
194
- @included_modules ||= [::Spec::Matchers]
195
- end
196
-
197
- def examples
198
- @examples ||= []
199
- end
200
- end
201
-
202
- module InstanceMethods
203
- def initialize(*args, &block) #:nodoc:
204
- # TODO - inheriting from TestUnit::TestCase fails without this
205
- # - let's figure out why and move this somewhere else
206
- end
207
-
208
- def violated(message="")
209
- raise Spec::Expectations::ExpectationNotMetError.new(message)
210
- end
211
-
212
- def inspect
213
- "[RSpec example]"
214
- end
215
-
216
- def pending(message)
217
- if block_given?
218
- begin
219
- yield
220
- rescue Exception => e
221
- raise Spec::DSL::ExamplePendingError.new(message)
222
- end
223
- raise Spec::DSL::PendingFixedError.new("Expected pending '#{message}' to fail. No Error was raised.")
224
- else
225
- raise Spec::DSL::ExamplePendingError.new(message)
226
- end
227
- end
228
- end
229
- end
230
- end
231
- end
@@ -1,42 +0,0 @@
1
- module Spec
2
- module DSL
3
- class BehaviourFactory
4
-
5
- class << self
6
-
7
- BEHAVIOUR_CLASSES = {:default => Spec::DSL::Behaviour}
8
-
9
- # Registers a behaviour class +klass+ with the symbol
10
- # +behaviour_type+. For example:
11
- #
12
- # Spec::DSL::BehaviourFactory.add_behaviour_class(:farm, Spec::Farm::DSL::FarmBehaviour)
13
- #
14
- # This will cause Kernel#describe from a file living in
15
- # <tt>spec/farm</tt> to create behaviour instances of type
16
- # Spec::Farm::DSL::FarmBehaviour.
17
- def add_behaviour_class(behaviour_type, klass)
18
- BEHAVIOUR_CLASSES[behaviour_type] = klass
19
- end
20
-
21
- def remove_behaviour_class(behaviour_type)
22
- BEHAVIOUR_CLASSES.delete(behaviour_type)
23
- end
24
-
25
- def create(*args, &block)
26
- opts = Hash === args.last ? args.last : {}
27
- if opts[:shared]
28
- behaviour_type = :default
29
- elsif opts[:behaviour_type]
30
- behaviour_type = opts[:behaviour_type]
31
- elsif opts[:spec_path] =~ /spec(\\|\/)(#{BEHAVIOUR_CLASSES.keys.join('|')})/
32
- behaviour_type = $2.to_sym
33
- else
34
- behaviour_type = :default
35
- end
36
- return BEHAVIOUR_CLASSES[behaviour_type].new(*args, &block)
37
- end
38
-
39
- end
40
- end
41
- end
42
- end
@@ -1,33 +0,0 @@
1
- module Spec
2
- module DSL
3
- class CompositeProcBuilder < Array
4
- def initialize(callbacks=[])
5
- push(*callbacks)
6
- end
7
-
8
- def proc(&error_handler)
9
- parts = self
10
- errors = []
11
- Proc.new do
12
- result = parts.collect do |part|
13
- begin
14
- if part.is_a?(UnboundMethod)
15
- part.bind(self).call
16
- else
17
- instance_eval(&part)
18
- end
19
- rescue Exception => e
20
- if error_handler
21
- error_handler.call(e)
22
- else
23
- errors << e
24
- end
25
- end
26
- end
27
- raise errors.first unless errors.empty?
28
- result
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,76 +0,0 @@
1
- module Spec
2
- module DSL
3
- class Description
4
- module ClassMethods
5
- def generate_description(*args)
6
- description = args.shift.to_s
7
- unless args.empty?
8
- suffix = args.shift.to_s
9
- description << " " unless suffix =~ /^\s|\.|#/
10
- description << suffix
11
- end
12
- description
13
- end
14
- end
15
- extend ClassMethods
16
-
17
- attr_reader :description, :described_type
18
-
19
- def initialize(*args)
20
- args, @options = args_and_options(*args)
21
- init_behaviour_type(@options)
22
- init_spec_path(@options)
23
- init_described_type(args)
24
- init_description(*args)
25
- end
26
-
27
- def [](key)
28
- @options[key]
29
- end
30
-
31
- def []=(key, value)
32
- @options[key] = value
33
- end
34
-
35
- def to_s; @description; end
36
-
37
- def ==(value)
38
- case value
39
- when Description
40
- @description == value.description
41
- else
42
- @description == value
43
- end
44
- end
45
-
46
- private
47
- def init_behaviour_type(options)
48
- # NOTE - BE CAREFUL IF CHANGING THIS NEXT LINE:
49
- # this line is as it is to satisfy JRuby - the original version
50
- # read, simply: "if options[:behaviour_class]", which passed against ruby, but failed against jruby
51
- if options[:behaviour_class] && options[:behaviour_class].ancestors.include?(Behaviour)
52
- options[:behaviour_type] = parse_behaviour_type(@options[:behaviour_class])
53
- end
54
- end
55
-
56
- def init_spec_path(options)
57
- if options.has_key?(:spec_path)
58
- options[:spec_path] = File.expand_path(@options[:spec_path])
59
- end
60
- end
61
-
62
- def init_description(*args)
63
- @description = self.class.generate_description(*args)
64
- end
65
-
66
- def init_described_type(args)
67
- @described_type = args.first unless args.first.is_a?(String)
68
- end
69
-
70
- def parse_behaviour_type(behaviour_class)
71
- behaviour_class.to_s.split("::").reverse[0].gsub!('Behaviour', '').downcase.to_sym
72
- end
73
-
74
- end
75
- end
76
- end