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,9 +0,0 @@
1
- require 'spec/runner/formatter/base_formatter'
2
- require 'spec/runner/formatter/base_text_formatter'
3
- require 'spec/runner/formatter/progress_bar_formatter'
4
- require 'spec/runner/formatter/rdoc_formatter'
5
- require 'spec/runner/formatter/specdoc_formatter'
6
- require 'spec/runner/formatter/html_formatter'
7
- require 'spec/runner/formatter/failing_examples_formatter'
8
- require 'spec/runner/formatter/failing_behaviours_formatter'
9
- require 'spec/runner/formatter/snippet_extractor'
@@ -1,29 +0,0 @@
1
- module Spec
2
- module Runner
3
- module Formatter
4
- class FailingBehavioursFormatter < BaseTextFormatter
5
- def add_behaviour(behaviour_name)
6
- if behaviour_name =~ /(.*) \(druby.*\)$/
7
- @behaviour_name = $1
8
- else
9
- @behaviour_name = behaviour_name
10
- end
11
- end
12
-
13
- def example_failed(example, counter, failure)
14
- unless @behaviour_name.nil?
15
- @output.puts @behaviour_name
16
- @behaviour_name = nil
17
- @output.flush
18
- end
19
- end
20
-
21
- def dump_failure(counter, failure)
22
- end
23
-
24
- def dump_summary(duration, example_count, failure_count, pending_count)
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,24 +0,0 @@
1
- module Spec
2
- module Runner
3
- module Formatter
4
- class RdocFormatter < BaseTextFormatter
5
- def add_behaviour(name)
6
- @output.puts "# #{name}"
7
- end
8
-
9
- def example_passed(example)
10
- @output.puts "# * #{example.description}"
11
- @output.flush
12
- end
13
-
14
- def example_failed(example, counter, failure)
15
- @output.puts "# * #{example.description} [#{counter} - FAILED]"
16
- end
17
-
18
- def example_pending(behaviour_name, example_name, message)
19
- @output.puts "# * #{behaviour_name} #{example_name} [PENDING: #{message}]"
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,10 +0,0 @@
1
- require 'spec/expectations'
2
- require 'spec/matchers'
3
-
4
- module Test
5
- module Unit
6
- class TestCase
7
- include Spec::Matchers
8
- end
9
- end
10
- end
@@ -1,79 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- module Spec
4
- module DSL
5
- describe BehaviourEval do
6
- def count
7
- @count ||= 0
8
- @count = @count + 1
9
- @count
10
- end
11
-
12
- before(:all) do
13
- count.should == 1
14
- end
15
-
16
- before(:all) do
17
- count.should == 2
18
- end
19
-
20
- before(:each) do
21
- count.should == 3
22
- end
23
-
24
- before(:each) do
25
- count.should == 4
26
- end
27
-
28
- it "should run before(:all), before(:each), example, after(:each), after(:all) in order" do
29
- count.should == 5
30
- end
31
-
32
- after(:each) do
33
- count.should == 7
34
- end
35
-
36
- after(:each) do
37
- count.should == 6
38
- end
39
-
40
- after(:all) do
41
- count.should == 9
42
- end
43
-
44
- after(:all) do
45
- count.should == 8
46
- end
47
- end
48
-
49
- describe BehaviourEval, "instance methods" do
50
- it "should support pending" do
51
- lambda {
52
- pending("something")
53
- }.should raise_error(Spec::DSL::ExamplePendingError, "something")
54
- end
55
-
56
- it "should have #pending raise a Pending error when its block fails" do
57
- block_ran = false
58
- lambda {
59
- pending("something") do
60
- block_ran = true
61
- raise "something wrong with my example"
62
- end
63
- }.should raise_error(Spec::DSL::ExamplePendingError, "something")
64
- block_ran.should == true
65
- end
66
-
67
- it "should have #pending raise Spec::DSL::PendingFixedError when its block does not fail" do
68
- block_ran = false
69
- lambda {
70
- pending("something") do
71
- block_ran = true
72
- end
73
- }.should raise_error(Spec::DSL::PendingFixedError, "Expected pending 'something' to fail. No Error was raised.")
74
- block_ran.should == true
75
- end
76
-
77
- end
78
- end
79
- end
@@ -1,48 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- module Spec
4
- module DSL
5
- describe BehaviourFactory do
6
- it "should create a Spec::DSL::Behaviour by default" do
7
- Spec::DSL::BehaviourFactory.create("behaviour") {
8
- }.should be_an_instance_of(Spec::DSL::Behaviour)
9
- end
10
-
11
- it "should create a Spec::DSL::Behaviour when :behaviour_type => :default" do
12
- Spec::DSL::BehaviourFactory.create("behaviour", :behaviour_type => :default) {
13
- }.should be_an_instance_of(Spec::DSL::Behaviour)
14
- end
15
-
16
- it "should create specified type when :behaviour_type => :something_other_than_default" do
17
- behaviour_class = Class.new do
18
- def initialize(*args, &block); end
19
- end
20
- Spec::DSL::BehaviourFactory.add_behaviour_class(:something_other_than_default, behaviour_class)
21
- Spec::DSL::BehaviourFactory.create("behaviour", :behaviour_type => :something_other_than_default) {
22
- }.should be_an_instance_of(behaviour_class)
23
- end
24
-
25
- it "should type indicated by spec_path" do
26
- behaviour_class = Class.new do
27
- def initialize(*args, &block); end
28
- end
29
- Spec::DSL::BehaviourFactory.add_behaviour_class(:something_other_than_default, behaviour_class)
30
- Spec::DSL::BehaviourFactory.create("behaviour", :spec_path => "./spec/something_other_than_default/some_spec.rb") {
31
- }.should be_an_instance_of(behaviour_class)
32
- end
33
-
34
- it "should type indicated by spec_path (with spec_path generated by caller on windows)" do
35
- behaviour_class = Class.new do
36
- def initialize(*args, &block); end
37
- end
38
- Spec::DSL::BehaviourFactory.add_behaviour_class(:something_other_than_default, behaviour_class)
39
- Spec::DSL::BehaviourFactory.create("behaviour", :spec_path => "./spec\\something_other_than_default\\some_spec.rb") {
40
- }.should be_an_instance_of(behaviour_class)
41
- end
42
-
43
- after(:each) do
44
- Spec::DSL::BehaviourFactory.remove_behaviour_class(:something_other_than_default)
45
- end
46
- end
47
- end
48
- end
@@ -1,661 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- module Spec
4
- module DSL
5
- class FakeReporter < Spec::Runner::Reporter
6
- attr_reader :added_behaviour
7
- def add_behaviour(description)
8
- @added_behaviour = description
9
- end
10
- end
11
-
12
- describe Behaviour, "class methods" do
13
- before :each do
14
- @reporter = FakeReporter.new(mock("formatter", :null_object => true), mock("backtrace_tweaker", :null_object => true))
15
- @behaviour = Behaviour.new("example") {}
16
- end
17
-
18
- after :each do
19
- Behaviour.clear_before_and_after!
20
- end
21
-
22
- it "should not run before(:all) or after(:all) on dry run" do
23
- before_all_ran = false
24
- after_all_ran = false
25
- Behaviour.before(:all) { before_all_ran = true }
26
- Behaviour.after(:all) { after_all_ran = true }
27
- @behaviour.it("should") {}
28
- @behaviour.run(@reporter, true)
29
- before_all_ran.should be_false
30
- after_all_ran.should be_false
31
- end
32
-
33
- it "should not run any example if before(:all) fails" do
34
- spec_ran = false
35
- Behaviour.before(:all) { raise NonStandardError }
36
- @behaviour.it("test") {spec_ran = true}
37
- @behaviour.run(@reporter)
38
- spec_ran.should be_false
39
- end
40
-
41
- it "should run after(:all) if before(:all) fails" do
42
- after_all_ran = false
43
- Behaviour.before(:all) { raise NonStandardError }
44
- Behaviour.after(:all) { after_all_ran = true }
45
- @behaviour.run(@reporter)
46
- after_all_ran.should be_true
47
- end
48
-
49
- it "should run after(:all) if before(:each) fails" do
50
- after_all_ran = false
51
- Behaviour.before(:each) { raise NonStandardError }
52
- Behaviour.after(:all) { after_all_ran = true }
53
- @behaviour.run(@reporter)
54
- after_all_ran.should be_true
55
- end
56
-
57
- it "should run after(:all) if any example fails" do
58
- after_all_ran = false
59
- @behaviour.it("should") { raise NonStandardError }
60
- Behaviour.after(:all) { after_all_ran = true }
61
- @behaviour.run(@reporter)
62
- after_all_ran.should be_true
63
- end
64
-
65
-
66
- it "should unregister a given after(:each) block" do
67
- after_all_ran = false
68
- @behaviour.it("example") {}
69
- proc = Proc.new { after_all_ran = true }
70
- Behaviour.after(:each, &proc)
71
- @behaviour.run(@reporter)
72
- after_all_ran.should be_true
73
-
74
- after_all_ran = false
75
- Behaviour.remove_after(:each, &proc)
76
- @behaviour.run(@reporter)
77
- after_all_ran.should be_false
78
- end
79
-
80
- it "should run second after(:each) block even if the first one fails" do
81
- example = @behaviour.it("example") {}
82
- second_after_ran = false
83
- @behaviour.after(:each) do
84
- second_after_ran = true
85
- raise "second"
86
- end
87
- first_after_ran = false
88
- @behaviour.after(:each) do
89
- first_after_ran = true
90
- raise "first"
91
- end
92
-
93
- @reporter.should_receive(:example_finished) do |example, error, location, example_not_implemented|
94
- example.should equal(example)
95
- error.message.should eql("first")
96
- location.should eql("after(:each)")
97
- example_not_implemented.should be_false
98
- end
99
- @behaviour.run(@reporter)
100
- first_after_ran.should be_true
101
- second_after_ran.should be_true
102
- end
103
-
104
- it "should not run second before(:each) if the first one fails" do
105
- @behaviour.it("example") {}
106
- first_before_ran = false
107
- @behaviour.before(:each) do
108
- first_before_ran = true
109
- raise "first"
110
- end
111
- second_before_ran = false
112
- @behaviour.before(:each) do
113
- second_before_ran = true
114
- raise "second"
115
- end
116
-
117
- @reporter.should_receive(:example_finished) do |name, error, location, example_not_implemented|
118
- name.should eql("example")
119
- error.message.should eql("first")
120
- location.should eql("before(:each)")
121
- example_not_implemented.should be_false
122
- end
123
- @behaviour.run(@reporter)
124
- first_before_ran.should be_true
125
- second_before_ran.should be_false
126
- end
127
-
128
- it "should supply before(:all) as description if failure in before(:all)" do
129
- @reporter.should_receive(:example_finished) do |example, error, location|
130
- example.description.should eql("before(:all)")
131
- error.message.should == "in before(:all)"
132
- location.should eql("before(:all)")
133
- end
134
-
135
- Behaviour.before(:all) { raise NonStandardError.new("in before(:all)") }
136
- @behaviour.it("test") {true}
137
- @behaviour.run(@reporter)
138
- end
139
-
140
- it "should provide after(:all) as description if failure in after(:all)" do
141
- @reporter.should_receive(:example_finished) do |example, error, location|
142
- example.description.should eql("after(:all)")
143
- error.message.should eql("in after(:all)")
144
- location.should eql("after(:all)")
145
- end
146
-
147
- Behaviour.after(:all) { raise NonStandardError.new("in after(:all)") }
148
- @behaviour.run(@reporter)
149
- end
150
- end
151
-
152
- describe Behaviour do
153
- before :each do
154
- @reporter = FakeReporter.new(mock("formatter", :null_object => true), mock("backtrace_tweaker", :null_object => true))
155
- @behaviour = Behaviour.new("example") {}
156
- end
157
-
158
- after :each do
159
- Behaviour.clear_before_and_after!
160
- end
161
-
162
- it "should send reporter add_behaviour" do
163
- @behaviour.run(@reporter)
164
- @reporter.added_behaviour.should == "example"
165
- end
166
-
167
- it "should run example on run" do
168
- example_ran = false
169
- @behaviour.it("should") {example_ran = true}
170
- @behaviour.run(@reporter)
171
- example_ran.should be_true
172
- end
173
-
174
- it "should not run example on dry run" do
175
- example_ran = false
176
- @behaviour.it("should") {example_ran = true}
177
- @behaviour.run(@reporter, true)
178
- example_ran.should be_false
179
- end
180
-
181
- it "should not run before(:all) or after(:all) on dry run" do
182
- before_all_ran = false
183
- after_all_ran = false
184
- @behaviour.before(:all) { before_all_ran = true }
185
- @behaviour.after(:all) { after_all_ran = true }
186
- @behaviour.it("should") {}
187
- @behaviour.run(@reporter, true)
188
- before_all_ran.should be_false
189
- after_all_ran.should be_false
190
- end
191
-
192
- it "should not run any example if before(:all) fails" do
193
- spec_ran = false
194
- @behaviour.before(:all) { raise "help" }
195
- @behaviour.it("test") {spec_ran = true}
196
- @behaviour.run(@reporter)
197
- spec_ran.should be_false
198
- end
199
-
200
- it "should run after(:all) if before(:all) fails" do
201
- after_all_ran = false
202
- @behaviour.before(:all) { raise }
203
- @behaviour.after(:all) { after_all_ran = true }
204
- @behaviour.run(@reporter)
205
- after_all_ran.should be_true
206
- end
207
-
208
- it "should run after(:all) if before(:each) fails" do
209
- after_all_ran = false
210
- @behaviour.before(:each) { raise }
211
- @behaviour.after(:all) { after_all_ran = true }
212
- @behaviour.run(@reporter)
213
- after_all_ran.should be_true
214
- end
215
-
216
- it "should run after(:all) if any example fails" do
217
- after_all_ran = false
218
- @behaviour.it("should") { raise "before all error" }
219
- @behaviour.after(:all) { after_all_ran = true }
220
- @behaviour.run(@reporter)
221
- after_all_ran.should be_true
222
- end
223
-
224
- it "should supply before(:all) as description if failure in before(:all)" do
225
- @reporter.should_receive(:example_finished) do |example, error, location|
226
- example.description.should eql("before(:all)")
227
- error.message.should eql("in before(:all)")
228
- location.should eql("before(:all)")
229
- end
230
-
231
- @behaviour.before(:all) { raise "in before(:all)" }
232
- @behaviour.it("test") {true}
233
- @behaviour.run(@reporter)
234
- end
235
-
236
- it "should provide after(:all) as description if failure in after(:all)" do
237
- @reporter.should_receive(:example_finished) do |example, error, location|
238
- example.description.should eql("after(:all)")
239
- error.message.should eql("in after(:all)")
240
- location.should eql("after(:all)")
241
- end
242
-
243
- @behaviour.after(:all) { raise "in after(:all)" }
244
- @behaviour.run(@reporter)
245
- end
246
-
247
- it "should run before(:all) block only once" do
248
- before_all_run_count_run_count = 0
249
- @behaviour.before(:all) {before_all_run_count_run_count += 1}
250
- @behaviour.it("test") {true}
251
- @behaviour.it("test2") {true}
252
- @behaviour.run(@reporter)
253
- before_all_run_count_run_count.should == 1
254
- end
255
-
256
- it "calls spec_inherited class method" do
257
- super_class_before_ran = false
258
- super_class = Class.new do
259
- def self.spec_inherited(mod)
260
- mod.before {setup}
261
- end
262
-
263
- define_method :setup do
264
- super_class_before_ran = true
265
- end
266
- end
267
- @behaviour.inherit super_class
268
-
269
- before_ran = false
270
- @behaviour.before {before_ran = true}
271
- @behaviour.it("test") {true}
272
- @behaviour.run(@reporter)
273
- super_class_before_ran.should be_true
274
- before_ran.should be_true
275
- end
276
-
277
- it "should run after(:all) block only once" do
278
- after_all_run_count = 0
279
- @behaviour.after(:all) {after_all_run_count += 1}
280
- @behaviour.it("test") {true}
281
- @behaviour.it("test2") {true}
282
- @behaviour.run(@reporter)
283
- after_all_run_count.should == 1
284
- @reporter.rspec_verify
285
- end
286
-
287
- it "after(:all) should have access to all instance variables defined in before(:all)" do
288
- context_instance_value_in = "Hello there"
289
- context_instance_value_out = ""
290
- @behaviour.before(:all) { @instance_var = context_instance_value_in }
291
- @behaviour.after(:all) { context_instance_value_out = @instance_var }
292
- @behaviour.it("test") {true}
293
- @behaviour.run(@reporter)
294
- context_instance_value_in.should == context_instance_value_out
295
- end
296
-
297
- it "should copy instance variables from before(:all)'s execution context into spec's execution context" do
298
- context_instance_value_in = "Hello there"
299
- context_instance_value_out = ""
300
- @behaviour.before(:all) { @instance_var = context_instance_value_in }
301
- @behaviour.it("test") {context_instance_value_out = @instance_var}
302
- @behaviour.run(@reporter)
303
- context_instance_value_in.should == context_instance_value_out
304
- end
305
-
306
- it "should not add global before callbacks for untargetted behaviours" do
307
- fiddle = []
308
-
309
- Behaviour.before(:all) { fiddle << "Behaviour.before(:all)" }
310
- Behaviour.prepend_before(:all) { fiddle << "Behaviour.prepend_before(:all)" }
311
- Behaviour.before(:each, :behaviour_type => :special) { fiddle << "Behaviour.before(:each, :behaviour_type => :special)" }
312
- Behaviour.prepend_before(:each, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:each, :behaviour_type => :special)" }
313
- Behaviour.before(:all, :behaviour_type => :special) { fiddle << "Behaviour.before(:all, :behaviour_type => :special)" }
314
- Behaviour.prepend_before(:all, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:all, :behaviour_type => :special)" }
315
-
316
- behaviour = Behaviour.new("I'm not special", :behaviour_type => :not_special) {}
317
- behaviour.run(@reporter)
318
- fiddle.should == [
319
- 'Behaviour.prepend_before(:all)',
320
- 'Behaviour.before(:all)',
321
- ]
322
- end
323
-
324
- it "should add global before callbacks for targetted behaviours" do
325
- fiddle = []
326
-
327
- Behaviour.before(:all) { fiddle << "Behaviour.before(:all)" }
328
- Behaviour.prepend_before(:all) { fiddle << "Behaviour.prepend_before(:all)" }
329
- Behaviour.before(:each, :behaviour_type => :special) { fiddle << "Behaviour.before(:each, :behaviour_type => :special)" }
330
- Behaviour.prepend_before(:each, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:each, :behaviour_type => :special)" }
331
- Behaviour.before(:all, :behaviour_type => :special) { fiddle << "Behaviour.before(:all, :behaviour_type => :special)" }
332
- Behaviour.prepend_before(:all, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:all, :behaviour_type => :special)" }
333
-
334
- Behaviour.append_before(:behaviour_type => :special) { fiddle << "Behaviour.append_before(:each, :behaviour_type => :special)" }
335
-
336
- behaviour = Behaviour.new("I'm not special", :behaviour_type => :special) {}
337
- behaviour.it("test") {true}
338
- behaviour.run(@reporter)
339
- fiddle.should == [
340
- 'Behaviour.prepend_before(:all)',
341
- 'Behaviour.before(:all)',
342
- 'Behaviour.prepend_before(:all, :behaviour_type => :special)',
343
- 'Behaviour.before(:all, :behaviour_type => :special)',
344
- 'Behaviour.prepend_before(:each, :behaviour_type => :special)',
345
- 'Behaviour.before(:each, :behaviour_type => :special)',
346
- 'Behaviour.append_before(:each, :behaviour_type => :special)',
347
- ]
348
- end
349
-
350
- it "before callbacks are ordered from global to local" do
351
- fiddle = []
352
- super_class = Class.new do
353
- define_method :setup do
354
- fiddle << "superclass setup"
355
- end
356
- end
357
- @behaviour.inherit super_class
358
-
359
- Behaviour.prepend_before(:all) { fiddle << "Behaviour.prepend_before(:all)" }
360
- Behaviour.before(:all) { fiddle << "Behaviour.before(:all)" }
361
- @behaviour.prepend_before(:all) { fiddle << "prepend_before(:all)" }
362
- @behaviour.before(:all) { fiddle << "before(:all)" }
363
- @behaviour.prepend_before(:each) { fiddle << "prepend_before(:each)" }
364
- @behaviour.before(:each) { fiddle << "before(:each)" }
365
- @behaviour.it("test") {true}
366
- @behaviour.run(@reporter)
367
- fiddle.should == [
368
- 'Behaviour.prepend_before(:all)',
369
- 'Behaviour.before(:all)',
370
- 'prepend_before(:all)',
371
- 'before(:all)',
372
- 'prepend_before(:each)',
373
- 'before(:each)'
374
- ]
375
- end
376
-
377
- it "after callbacks are ordered from local to global" do
378
- @reporter.should_receive(:add_behaviour).with any_args()
379
- @reporter.should_receive(:example_finished).with any_args()
380
-
381
- fiddle = []
382
- super_class = Class.new do
383
- define_method :teardown do
384
- fiddle << "superclass teardown"
385
- end
386
- end
387
- @behaviour.inherit super_class
388
-
389
- @behaviour.after(:each) { fiddle << "after(:each)" }
390
- @behaviour.append_after(:each) { fiddle << "append_after(:each)" }
391
- @behaviour.after(:all) { fiddle << "after(:all)" }
392
- @behaviour.append_after(:all) { fiddle << "append_after(:all)" }
393
- Behaviour.after(:all) { fiddle << "Behaviour.after(:all)" }
394
- Behaviour.append_after(:all) { fiddle << "Behaviour.append_after(:all)" }
395
- @behaviour.it("test") {true}
396
- @behaviour.run(@reporter)
397
- fiddle.should == [
398
- 'after(:each)',
399
- 'append_after(:each)',
400
- 'after(:all)',
401
- 'append_after(:all)',
402
- 'Behaviour.after(:all)',
403
- 'Behaviour.append_after(:all)'
404
- ]
405
- end
406
-
407
- it "should run superclass teardown method and after block" do
408
- super_class_teardown_ran = false
409
- super_class = Class.new do
410
- define_method :teardown do
411
- super_class_teardown_ran = true
412
- end
413
- end
414
- @behaviour.inherit super_class
415
-
416
- teardown_ran = false
417
- @behaviour.after {teardown_ran = true}
418
- @behaviour.it("test") {true}
419
- @behaviour.run(@reporter)
420
- super_class_teardown_ran.should be_false
421
- teardown_ran.should be_true
422
- @reporter.rspec_verify
423
- end
424
-
425
- it "should have accessible methods from inherited superclass" do
426
- helper_method_ran = false
427
- super_class = Class.new do
428
- define_method :helper_method do
429
- helper_method_ran = true
430
- end
431
- end
432
- @behaviour.inherit super_class
433
-
434
- @behaviour.it("test") {helper_method}
435
- @behaviour.run(@reporter)
436
- helper_method_ran.should be_true
437
- end
438
-
439
- it "should have accessible class methods from inherited superclass" do
440
- class_method_ran = false
441
- super_class = Class.new
442
- (class << super_class; self; end).class_eval do
443
- define_method :class_method do
444
- class_method_ran = true
445
- end
446
- end
447
- @behaviour.inherit super_class
448
- @behaviour.class_method
449
- class_method_ran.should be_true
450
-
451
- lambda {@behaviour.foobar}.should raise_error(NoMethodError)
452
- end
453
-
454
- it "should include inherited class methods" do
455
- class_method_ran = false
456
- super_class = Class.new
457
- class << super_class
458
- def super_class_class_method; end
459
- end
460
- @behaviour.inherit super_class
461
-
462
- @behaviour.methods.should include("super_class_class_method")
463
- end
464
-
465
- it "should have accessible instance methods from included module" do
466
- @reporter.should_receive(:add_behaviour).with any_args()
467
- @reporter.should_receive(:example_finished).with any_args()
468
-
469
- mod1_method_called = false
470
- mod1 = Module.new do
471
- define_method :mod1_method do
472
- mod1_method_called = true
473
- end
474
- end
475
-
476
- mod2_method_called = false
477
- mod2 = Module.new do
478
- define_method :mod2_method do
479
- mod2_method_called = true
480
- end
481
- end
482
-
483
- @behaviour.include mod1, mod2
484
-
485
- @behaviour.it("test") do
486
- mod1_method
487
- mod2_method
488
- end
489
- @behaviour.run(@reporter)
490
- mod1_method_called.should be_true
491
- mod2_method_called.should be_true
492
- end
493
-
494
- it "should have accessible class methods from included module" do
495
- mod1_method_called = false
496
- mod1 = Module.new do
497
- class_methods = Module.new do
498
- define_method :mod1_method do
499
- mod1_method_called = true
500
- end
501
- end
502
-
503
- metaclass.class_eval do
504
- define_method(:included) do |receiver|
505
- receiver.extend class_methods
506
- end
507
- end
508
- end
509
-
510
- mod2_method_called = false
511
- mod2 = Module.new do
512
- class_methods = Module.new do
513
- define_method :mod2_method do
514
- mod2_method_called = true
515
- end
516
- end
517
-
518
- metaclass.class_eval do
519
- define_method(:included) do |receiver|
520
- receiver.extend class_methods
521
- end
522
- end
523
- end
524
-
525
- @behaviour.include mod1, mod2
526
-
527
- @behaviour.mod1_method
528
- @behaviour.mod2_method
529
- mod1_method_called.should be_true
530
- mod2_method_called.should be_true
531
- end
532
-
533
- it "should count number of specs" do
534
- @behaviour.it("one") {}
535
- @behaviour.it("two") {}
536
- @behaviour.it("three") {}
537
- @behaviour.it("four") {}
538
- @behaviour.number_of_examples.should == 4
539
- end
540
-
541
- it "should not match anything when there are no examples" do
542
- @behaviour.should_not be_matches(['context'])
543
- end
544
-
545
- it "should match when one of the examples match" do
546
- example = mock('my example')
547
- example.should_receive(:matches?).and_return(true)
548
- @behaviour.stub!(:examples).and_return([example])
549
- @behaviour.should be_matches(['jalla'])
550
- end
551
-
552
- it "should include targetted modules included using configuration" do
553
- $included_modules = []
554
-
555
- mod1 = Module.new do
556
- class << self
557
- def included(mod)
558
- $included_modules << self
559
- end
560
- end
561
- end
562
-
563
- mod2 = Module.new do
564
- class << self
565
- def included(mod)
566
- $included_modules << self
567
- end
568
- end
569
- end
570
-
571
- mod3 = Module.new do
572
- class << self
573
- def included(mod)
574
- $included_modules << self
575
- end
576
- end
577
- end
578
-
579
- begin
580
- Spec::Runner.configuration.include(mod1, mod2)
581
- Spec::Runner.configuration.include(mod3, :behaviour_type => :cat)
582
-
583
- behaviour = Behaviour.new("I'm special", :behaviour_type => :dog) do
584
- end.run(@reporter)
585
-
586
- $included_modules.should include(mod1)
587
- $included_modules.should include(mod2)
588
- $included_modules.should_not include(mod3)
589
- ensure
590
- Spec::Runner.configuration.exclude(mod1, mod2, mod3)
591
- end
592
- end
593
-
594
- it "should include any predicate_matchers included using configuration" do
595
- $included_predicate_matcher_found = false
596
- Spec::Runner.configuration.predicate_matchers[:do_something] = :does_something?
597
- Behaviour.new('example') do
598
- it "should respond to do_something" do
599
- $included_predicate_matcher_found = respond_to?(:do_something)
600
- end
601
- end.run(@reporter)
602
- $included_predicate_matcher_found.should be(true)
603
- end
604
-
605
- it "should use a mock framework set up in config" do
606
- mod = Module.new do
607
- class << self
608
- def included(mod)
609
- $included_module = mod
610
- end
611
- end
612
- end
613
-
614
- begin
615
- $included_module = nil
616
- Spec::Runner.configuration.mock_with mod
617
-
618
- behaviour = Behaviour.new('example') do
619
- end.run(@reporter)
620
-
621
- $included_module.should_not be_nil
622
- ensure
623
- Spec::Runner.configuration.mock_with :rspec
624
- end
625
- end
626
-
627
- end
628
-
629
- class BehaviourSubclass < Behaviour
630
- public :described_type
631
- end
632
-
633
- describe Behaviour, " subclass" do
634
- it "should have access to the described_type" do
635
- BehaviourSubclass.new(Example){}.described_type.should == Example
636
- end
637
-
638
- it "should figure out its behaviour_type based on its name ()" do
639
- BehaviourSubclass.new(Object){}.behaviour_type.should == :subclass
640
- end
641
-
642
- # TODO - add an example about shared behaviours
643
- end
644
-
645
- describe Enumerable do
646
- def each(&block)
647
- ["4", "2", "1"].each(&block)
648
- end
649
-
650
- it "should be included in examples because it is a module" do
651
- map{|e| e.to_i}.should == [4,2,1]
652
- end
653
- end
654
-
655
- describe String do
656
- it "should not be included in examples because it is not a module" do
657
- lambda{self.map}.should raise_error(NoMethodError, /undefined method `map' for/)
658
- end
659
- end
660
- end
661
- end